LoginSignup
3
0

Salesforce B2C Commerce のヘッドレス API を呼んでみる(ショッパー系 API - SCAPI パブリッククライアント編)

Last updated at Posted at 2022-04-12

※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。


この記事はヘッドレス API の使い方のシリーズの一つです。その他の記事は下記を参照してください。


今回は SCAPI パブリッククライアントを利用したショッパー系 API の呼び方を紹介したいと思います。

この記事では、SCAPI のパブリッククライアントで 3 つの顧客タイプが商品をカートに追加するユースケースを説明します。

  • ゲストユーザ ・・・ ログインしていないユーザ
  • 登録済みユーザ(B2C Login) ・・・ B2C Commerce に登録済みユーザ
  • 登録済みユーザ(Federated Login) ・・・ Google や Facebook といったIDプロバイダーを利用して(Federated Login)ログインしたユーザ

ショッパー系APIの呼び方

1. API クライアントの作成

2. スコープの設定

3. (Federated Login のために) Google OAuth2.0 の設定

4. (Federated Login のために) IDP を登録

1〜4 は、「ショッパー系API - SCAPI プライベートクライアント編 」と同じなので割愛

5. SLAS テナントの登録

Create a SLAS Client」を参照してください。
この際に、 [Private?] の値を false[Redirect URI] の値にコールバックで処理する自身のアプリケーションのエンドポイントを設定してください。(例:http://localhost:3000/callback)

この時生成した Client IdSecret をメモしておいてください。

6. アクセストークンの取得

ゲストユーザ

public-guest-user-fc8126f5-f2d6-4cc6-addf-a9bb04a58049 (1).png

  • まずは下記のようなリクエストでユーザーがログインをする。
    • shortCodetenantIDorgIDsiteIDrealmID については 「B2C Commerce に関わる ID を把握」 を参照してください。
    • clientID「5.SLASテナントの登録」 で設定した clientId の値を入力
    • redirectUri はコールバックで処理する自身のアプリケーションのエンドポイントを入力
    • code_challengecode_verifier という 43 ~ 128 文字の文字列を SHA256 でハッシュ化したものを入力。(ロジックは公開されているPostmanコレクションの Pre-request Script を参照)
REQUEST: 
GET /shopper/auth/v1/organizations/{orgID}/oauth2/authorize
?redirect_uri={redirect_url}
&response_type=code
&client_id={clientID}
&hint=guest
&code_challenge={codeChallenge} HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com
  • 上記のリクエストをすると HTTP ステータスが 303 でレスポンスヘッダーの Location{redirectUri}?usid={}&code={}(例:http://localhost:3000/callback?usid={}&code={})のフォーマットで URL が入っているので、その URL にブラウザでリダイレクトさせる。
  • 自身のアプリケーションで、 /callback を実装し、code の値を利用して下記のリクエストを行い、レスポンスボディ内の access_token を取得
    • code_verifiercode_challenge 生成時に利用した文字列。(ロジックは公開されている Postman コレクションの Pre-request Script を参照)
    • code はリダイレクト先(Location) URL のパラメータに入っている code を入力
REQUEST: 
POST /shopper/auth/v1/organizations/{orgID}/oauth2/token HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com
Content-Type: application/x-www-form-urlencoded 

REQUEST PARAMETER: 
grant_type=authorization_code_pkce
&client_id={clientID}
&redirect_uri={redirectUri}
&code_verifier={codeVerifier}
$code={code}

登録済みユーザ(B2C Login)

public-client-registered-user-b2c-fab0b3d7-08c7-43f2-b4ab-0f47fb7e40e3-7ccab931-3b53-4d73-9fdb-ebc662f1624b (1).png

  • まずは下記のようなリクエストでユーザーがログインをする。
    • usid はゲストユーザのトークン取得時のレスポンスボディにある usid に値を入力
    • userCredential は ユーザ ID / パスワード、それらを id:passwordのようにコロン(:)で結合したものを Base64 でエンコードした値です。
REQUEST: 
POST /shopper/auth/v1/organizations/{orgID}/oauth2/login HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com 
Authorization: Basic {userCredential}
Content-Type: application/x-www-form-urlencoded 

REQUEST PARAMETER: 
grant_type=client_credentials
&client_id={clientID}
&redirect_uri={redirectUri}
&channel_id={siteID}
&code_challenge={codeChallenge}
&usid={usid}
  • 上記のリクエストをすると HTTP ステータスが 303 でレスポンスヘッダーの Location{redirect_uri}?usid={}&state={}&scope=openid%20offline_access&code={} のフォーマットでURLが入っているので、その URL にブラウザでリダイレクトさせる。
  • 自身のアプリケーションで、 /callback を実装し、code の値を利用して下記のリクエストを行い、レスポンスボディ内の access_token を取得
REQUEST: 
POST /shopper/auth/v1/organizations/{orgID}/oauth2/token HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com
Content-Type: application/x-www-form-urlencoded 

REQUEST PARAMETER:
grant_type=authorization_code_pkce
&client_id={clientID}
&redirect_uri={redirectUri}
&code_verifier={codeVerifier}
$code={code}

登録済みユーザ(Federated Login)

public-registered-user-federated-login-d8b425d1-7d3b-41c3-a9f9-5d6e21a9779c (1).png

  • まずは下記のようなリクエストでユーザーがログインをする。
    • IDPID「4.(Federated Loginのために) IDP を登録」 で作成した IDPID。今回はgoogle
REQUEST: 
GET /shopper/auth/v1/organizations/{orgID}/oauth2/authorize
?redirect_uri={redirect_url}
&response_type=code
&client_id={clientID}
&hint={IDPID}
&channel_id={siteID}
&usid={usid}
&code_challenge={codeChallenge} HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com
  • 上記のリクエストをすると HTTP ステータスが 303 でレスポンスヘッダーの Locationhttps://accounts.google.com/o/oauth2/auth?scope=openid%20email%20profile&response_type=code&client_id={}&redirect_uri={}&state={}のフォーマットで URL が入っているので、その URL にブラウザでリダイレクトさせる。
  • すると画像のように Google のログイン画面に遷移するので、ログイン。

Google Cloud Platform の OAuth 同意画面ページで公開ステータスを「テスト」でテストユーザを設定している場合は、そのユーザでログインしてください。

スクリーンショット 2022-04-11 17.01.22 (1).png

  • ログイン成功すると http://localhost:3000/callback?usid={}&code={} のフォーマットの URL にブラウザでリダイレクトさせる。
  • 自身のアプリケーションで、 /callback を実装し、code の値を利用して下記のリクエストを行い、レスポンスボディ内の access_token を取得
REQUEST: 
POST /shopper/auth/v1/organizations/{orgID}/oauth2/token HTTP/1.1
Host: {shortCode}.api.commercecloud.salesforce.com
Content-Type: application/x-www-form-urlencoded 

REQUEST PARAMETER:
grant_type=authorization_code
&redirect_uri={redirectUri}
&code={code}
&code_verifier={codeVerifier}
&channel_id={siteID}

7. ショッパー系 API を呼ぶ

7 は、「ショッパー系 API - SCAPI プライベートクライアント編」と同じなので割愛します。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0