買い物カゴの作成と注文の確定

B2C Commerce API (SCAPI) は、Shopper BasketsShopper Customers、および Shopper Orders API ファミリーを通じた注文手続きをサポートしています。

このトピックでは、買い物カゴを作成して送信するためのベストプラクティスの概要を説明し、SCAPI を使用した支払処理へのアプローチ方法に関する全体的なガイダンスを提供します。

支払カードデータを B2C Commerce に渡さないでください。代わりに、プロバイダーの script/iframe を使用して買い物客に支払カードデータを直接決済プロバイダーに提供してもらい、プロバイダーから返されたトークンを API に渡します。トークンを検証し、トークンが有効な場合は注文を受け入れ、それ以外の場合は拒否します。

この記事では、支払いトークンを取得する支払いゲートウェイを操作していることを前提としています。

このページ内のリンクには、既存のお客様のみがアクセスできるものがあります。Commerce Cloud リポジトリにアクセスする方法については Salesforce Commerce Cloud GitHub リポジトリとアクセスを参照してください。

Tip

前提条件 

以下を実装していることを確認します。

  • 支払いゲートウェイ
  • 注文の作成方法に関する戦略。SCAPI では、支払を検証する前に注文を作成することをお勧めします。
  • SLAS プライベートクライアントまたは SLAS パブリッククライアント。このトピックのコード例では、プライベートクライアントを使用します。詳細については、SLAS クライアントの作成を参照してください。

買い物カゴの作成 

買い物カゴを作成するには、次の 2 つの方法があります。

  • 買い物カゴを段階的に作成する
  • 1 つのリクエストで買い物カゴを作成する

買い物カゴを段階的に作成する 

買い物カゴを段階的に作成する場合は、買い物客から提供された情報を入力します。これにより、買い物カゴが B2C Commerce バックエンドに保持され、買い物カゴを簡単に永続化できない場合に便利です。 また、次のコード例に示すように、検証を実行し、API エラーを返すこともできます。コード例に含まれるコメントはわかりやすくするために提供されており、コードを機能させるには削除する必要があることに注意してください。

1#!/bin/bash
2set -euo pipefail
3
4CODE='kv7kzm78'
5ORG='f_ecom_zzrf_001'
6SITE='RefArchGlobal'
7CLIENT=
8SECRET=
9
10BASE="https://$CODE.api.commercecloud.salesforce.com"
11BASE_AUTH="$BASE/shopper/auth/v1/organizations/$ORG"
12BASE_BASKETS="$BASE/checkout/shopper-baskets/v1/organizations/$ORG"
13
14# 1. Get guest token (Note: The following code provides a rough flow using a private client. The commands for getting a token for a public client differ.)
15TOKEN=$(
16  curl "$BASE_AUTH/oauth2/token" \
17    -sS --fail-with-body \
18    -u "$CLIENT:$SECRET" \
19    -d 'grant_type=client_credentials' | jq -r .'access_token'
20)
21
22# 2. Create basket (Note: When you create a basket, you store a reference to the basket, and use the reference in subsequent calls.)
23BASKET=$(
24  curl "$BASE_BASKETS/baskets?siteId=$SITE" \
25    -sS --fail-with-body \
26    -H "Authorization: Bearer $TOKEN" \
27    -H "Content-Type: application/json" \
28    -d '{ "productItems": [{ "quantity": 1, "productId": "682875090845M"}]}' | jq -r '.basketId'
29)
30
31# 3. Set basket customer
32curl "$BASE_BASKETS/baskets/$BASKET/customer?siteId=$SITE" \
33  -sS --fail-with-body -o /dev/null \
34  -X 'PUT' \
35  -H "Authorization: Bearer $TOKEN" \
36  -H "Content-Type: application/json" \
37  -d '{ "email": "shopper@salesforce.com" }'
38
39# 4. Set shipping address. All baskets have a shipment called `me`. For multiple shipments, you must to create those shipments yourself. See [reateShipmentForBasket](https://developer.salesforce.com/docs/commerce/commerce-api/references/shopper-baskets?meta=createShipmentForBasket).
40curl "$BASE_BASKETS/baskets/$BASKET/shipments/me?siteId=$SITE" \
41  -sS --fail-with-body -o /dev/null \
42  -X 'PATCH' \
43  -H "Authorization: Bearer $TOKEN" \
44  -H "Content-Type: application/json" \
45  -d '{
46        "shippingAddress": {
47          "firstName": "Joe",
48          "lastName": "Shopper",
49          "address1": "415 Mission St.",
50          "city": "San Francisco",
51          "postalCode": "94105",
52          "stateCode": "CA",
53          "countryCode": "US"
54        }
55      }'
56
57# 5. Get applicable shipping methods (Note: This example defaults to the first shipping method that is available.)
58SHIPPING_METHOD=$(
59  curl "$BASE_BASKETS/baskets/$BASKET/shipments/me/shipping-methods?siteId=$SITE" \
60    -sS --fail-with-body \
61    -H "Authorization: Bearer $TOKEN" | jq -r '.applicableShippingMethods[0].id'
62)
63
64# 6. Set shipping method
65curl "$BASE_BASKETS/baskets/$BASKET/shipments/me/shipping-method?siteId=$SITE" \
66  -sS --fail-with-body -o /dev/null \
67  -X 'PUT' \
68  -H "Authorization: Bearer $TOKEN" \
69  -H "Content-Type: application/json" \
70  -d '{"id": "'$SHIPPING_METHOD'"}'
71
72# 7. Set payment instrument (Note: This example uses PayPal.)
73curl "$BASE_BASKETS/baskets/$BASKET/payment-instruments?siteId=$SITE" \
74  -sS --fail-with-body -o /dev/null \
75  -H "Authorization: Bearer $TOKEN" \
76  -H "Content-Type: application/json" \
77  -d '{ "paymentMethodId": "PayPal" }'
78
79# 8. Set billing address
80curl "$BASE_BASKETS/baskets/$BASKET/billing-address?siteId=$SITE&useAsShipping=false" \
81  -sS --fail-with-body -o /dev/null \
82  -X 'PUT' \
83  -H "Authorization: Bearer $TOKEN" \
84  -H "Content-Type: application/json" \
85  -d '{
86        "firstName": "Joe",
87        "lastName": "Shopper",
88        "address1": "415 Mission St",
89        "city": "San Francisco",
90        "postalCode": "94105",
91        "stateCode": "CA",
92        "countryCode": "US"
93      }'
94
95# 9. Submit order
96curl "$BASE/checkout/shopper-orders/v1/organizations/$ORG/orders?siteId=$SITE" \
97  -sS --fail-with-body \
98  -H "Authorization: Bearer $TOKEN" \
99  -H "Content-Type: application/json" \
100  -d '{ "basketId": "'$BASKET'"}' | jq

1 つのリクエストで買い物カゴを作成する 

また、リクエストを 1 回行うだけで買い物カゴを作成し、入力したい関連部分を指定することもできます。 次の例では、買い物カゴ全体とその入れ子になったドキュメントを 1 つのリクエストで作成します。

1#!/bin/bash
2set -euo pipefail
3
4CODE='kv7kzm78'
5ORG='f_ecom_zzrf_001'
6SITE='RefArchGlobal'
7CLIENT=
8SECRET=
9
10BASE="https://$CODE.api.commercecloud.salesforce.com"
11BASE_AUTH="$BASE/shopper/auth/v1/organizations/$ORG"
12BASE_BASKETS="$BASE/checkout/shopper-baskets/v1/organizations/$ORG"
13
14# 1. Get guest token
15TOKEN=$(
16    curl "$BASE_AUTH/oauth2/token" \
17        -sS --fail-with-body \
18        -u "$CLIENT:$SECRET" \
19        -d 'grant_type=client_credentials' | jq -r .'access_token'
20)
21
22# 2. Create a basket
23BASKET=$(
24    curl "$BASE_BASKETS/baskets?siteId=$SITE" \
25        -sS --fail-with-body \
26        -H "Authorization: Bearer $TOKEN" \
27        -H "Content-Type: application/json" \
28        -d '{
29              "productItems": [{ "quantity": 1, "productId": "682875090845M" }],
30              "customerInfo": { "email": "shopper@salesforce.com" },
31              "shipments": [
32                {
33                  "shipmentId": "me",
34                  "shippingAddress": {
35                    "firstName": "Joe",
36                    "lastName": "Shopper",
37                    "address1": "415 Mission St.",
38                    "city": "San Francisco",
39                    "postalCode": "94105",
40                    "stateCode": "CA",
41                    "countryCode": "US"
42                  },
43                  "shippingMethod": { "id": "GBP001" }
44                }
45              ],
46              "paymentInstruments": [{ "paymentMethodId": "PayPal" }],
47              "billingAddress": {
48                "firstName": "Joe",
49                "lastName": "Shopper",
50                "address1": "415 Mission St",
51                "city": "San Francisco",
52                "postalCode": "94105",
53                "stateCode": "CA",
54                "countryCode": "US"
55              }
56            }' | jq -r '.basketId'
57)
58
59# 3. Submit order
60curl "$BASE/checkout/shopper-orders/v1/organizations/$ORG/orders?siteId=$SITE" \
61    -sS --fail-with-body \
62    -H "Authorization: Bearer $TOKEN" \
63    -H "Content-Type: application/json" \
64    -d '{ "basketId": "'$BASKET'"}'

既存の買い物カゴの取得 

既存の買い物カゴを取得するには、Shopper Customers API getCustomerBaskets エンドポイントを使用します。

次の例では、顧客 ID を使用して顧客の買い物カゴを取得します。

1curl  "$BASE/customer/shopper-customers/v1/organizations/$ORG/customers/$CUSTOMERID/baskets?siteId=$SITE' \
2  -sS --fail-with-body \
3    -H "Authorization: Bearer $TOKEN" \
4    -H "Content-Type: application/json" \

次の例では、買い物カゴ ID を使用して買い物カゴを取得します。

1curl  "$BASE_BASKETS/baskets/$BASKETID?siteId=$SITE' \
2  -sS --fail-with-body \
3    -H "Authorization: Bearer $TOKEN" \
4    -H "Content-Type: application/json" \