※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。
今回は B2B/D2C Commerce (LWR) でのチェックアウト内の処理の実装方法を紹介したいと思います。
B2B/D2C Commerce (LWR) ではチェックアウト時にストアフロントから REST API が呼ばれ、その際にサービスとして登録された Apex で書いた処理が行われます。アーキテクチャの詳細はヘルプをご覧ください。
サービスで処理される内容は下記の通りです。
- 在庫チェック
- 配送料計算
- 税金計算
- 価格チェック
- 決済
ここでは、どのようにサービスを作成するかのサンプルとどのように登録をするを紹介したいと思います。
決済以外のサービスと決済サービスでは方法が違うので分けて紹介したいと思います。設定方法はヘルプをご覧ください。
決済以外のサービス
実装サンプル
在庫チェック、配送料計算、税金計算、価格チェックのサンプルは Github に公開されています。それぞれの処理が書かれた Apex はこれらのインターフェースを実装する必要があります。
サービス登録方法
サービスを登録するためには RegisteredExternalService オブジェクトのレコードを作成します。作成する際に必要となるフィールドは下記の通りです。
ExternalServiceProviderId | ExternalServiceProviderType | DeveloperName |
---|---|---|
在庫チェックのための処理が書かれた Apex の ID | Inventory | 管理画面で表示される任意のAPI名(アンダースコアと英数字のみ) |
配送料計算処理が書かれた Apex の ID | Shipment | 同上 |
税金計算処理が書かれた Apex の ID | Tax | 同上 |
価格チェック処理が書かれた Apex の ID | Price | 同上 |
レコードは Workbench や開発者コンソールで作成してもいいですし、ヘルプ内の Apex のスクリプトを真似してもいいかと思います。もし sfdx
とjq
コマンドが入っていればこちらのシェルを参照していただいても構いません。
決済サービス
決済サービスでは大きくわけて2つの実装方法があります。仮にここでは「サーバ型」「クライアント型」とさせてください
-
カード情報を Salesforce のサーバーを介して決済会社へ渡す方法(サーバー型)
- このヘルプにあるように「commercepayments.PaymentGatewayAdapter」を Apex に実装している必要がある
-
カード情報を Salesforce のサーバーを介さずに決済会社へ渡す方法(クライアント型)
- このヘルプにあるように「commercepayments.PaymentGatewayAdapter」と「commerce.ClientSidePaymentAdapter」が Apex に実装されている必要があり、さらにクライアントに表示するための LWC を作成する必要がある
実装サンプル
Stripe の実装の2つの型のサンプルを紹介します。
サービス登録方法
サービスを登録するためには、決済会社のAPI を呼ぶ際に利用する指定ログイン情報を作成した後、PaymentGatewayProvider と PaymentGateway オブジェクトのレコードを作成します。(ヘルプ)
作成する際に必要となるフィールドは下記の通りです。
PaymentGatewayProvider
DeveloperName | ApexAdapterId | MasterLabel | IdempotencySupported |
---|---|---|---|
このレコードの名前 | 支払い処理が書かれた Apex の ID | 管理画面に表示されるラベル名 | Yes or No |
PaymentGateway
MerchantCredentialId | PaymentGatewayName | paymentGatewayProviderId | Status |
---|---|---|---|
作成した指定ログイン情報(Named Credential レコード)のID | このゲートウェイの名前 | 作成した PaymentGatewayProvider レコードの ID | Active |
レコードは Workbench や開発者コンソールで作成してもいいですし、もし sfdx
とjq
コマンドが入っていればこちらのシェルを参照していただいても構いません。
PaymentGateway(支払いゲートウェイ)に関しては画面上からレコードを新規作成することもできます。
サービスをストアに紐付ける
サービスを登録するためには StoreIntegratedService オブジェクトのレコードを作成します。
Integration | ServiceProviderType | StoreId |
---|---|---|
Inventory__{在庫チェックのために作成した RegisteredExternalService の DeveloperName} | Inventory | 紐付けたいストア(WebStore)レコードの ID |
Shipment__{配送料計算のために作成した RegisteredExternalService の DeveloperName} | Shipment | 紐付けたいストア(WebStore)レコードの ID |
Tax__{税金計算のために作成した RegisteredExternalService の DeveloperName} | Tax | 紐付けたいストア(WebStore)レコードの ID |
Price__{価格チェックのために作成した RegisteredExternalService の DeveloperName} | Price | 紐付けたいストア(WebStore)レコードの ID |
作成した PaymentGateway レコードの ID | Payment | 紐付けたいストア(WebStore)レコードの ID |
レコードは Workbench や開発者コンソールで作成してもいいですし、ヘルプ内の「Map to Your Store」内の Apex を真似てもいいかと思います。
画面からの紐付け
画面からも可能ですので、下に方法を紹介します。
管理画面で在庫チェック、配送料計算、税金計算、価格チェック、決済はそれぞれ「ストア在庫」「送料の計算」「税金の計算」「価格チェック」「支払」タブに対応しており、クリックすると紐づけるためのボタンが表示されています。