MuleSoft で B2C Commerce を利用してみる（B2C Commerce 利用編）

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

今回の記事では、前回の「[MuleSoft で B2C Commerce を利用してみる（事前準備編）](https://qiita.com/syunyama/items/cd21be5fadceb23db6c5)」に引き続き　B2C Commerce へ MuleSoft のコネクターを利用して接続する方法を紹介します。
コネクター内ではSalesforce B2C CommerceのヘッドレスAPIを利用しているので、ヘッドレスAPIについて知りたい場合は先日紹介した下記のQiita記事を参考にしてください。

* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(ショッパー系API - SCAPIパブリッククライアント編)](https://qiita.com/syunyama/items/89b204486ace9fd10440)
* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(ショッパー系API - SCAPIプライベートクライアント編)](https://qiita.com/syunyama/items/34bd2a11dabb93bb1dc1)
* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(データ系API編)](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1)
* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(ショッパー系API - OCAPI編)](https://qiita.com/syunyama/items/0bb4a6e095a53dac7267)

また、Mulesoft の B2C Commerce へ繋ぐコネクターのヘルプは下記になるので、こちらも参考にしてみてください。

* [Salesforce Commerce Cloud B2C Data Connector - Mule 4](https://docs.mulesoft.com/commerce-cloud-b2c-data-connector/1.0/)
* [B2C Shop Connector 2.0 - Mule 4](https://docs.mulesoft.com/commerce-cloud-shop-api-connector/2.0/)

さらに、B2C Commerce コネクタを利用した[ユースケース](https://anypoint.mulesoft.com/exchange/org.mule.examples/mulesoft-accelerator-for-salesforce-b2c-commerce-cloud/)が MuleSoft から公開されています。その中の「[Accelerator B2C Commerce System API - Implementation Template](https://anypoint.mulesoft.com/exchange/org.mule.examples/accel-b2c-commerce-sys-api/minor/1.5/)」はデータ系のAPIを呼ぶ良いサンプルなので、一度ダウンロードしてみるのもおすすめです。


## 前提
* 今回自身のローカル環境で使用した Anypoint Studio は Version 7.12.0 を利用しています。



## モジュールの追加方法

まず、コネクターモジュールをローカルにインストールする方法を紹介します。
Anypoint  Studio の右ナビから「Search in Exchange」をクリックして、ポップアップを開きます。
![スクリーンショット 2022-11-22 12.07.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/f14dcd37-cbbd-f49e-1d84-24153916d5af.png)




任意の言葉でモジュールを検索し、追加します。
![スクリーンショット 2022-11-22 12.08.17 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/7606b124-9aa8-a796-6a76-1410cde37bc0.png)





追加されたモジュールが右ナビに表示されていたら完了です。
![スクリーンショット 2022-11-22 12.09.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/2e3253e4-e8b8-2a08-2976-44872a62f98b.png)







## データ系APIを呼ぶ

今回はデータ系APIの顧客情報を取得したいと思います。内部ではSCAPIの「[Get Customer From Customer List](https://developer.salesforce.com/docs/commerce/commerce-api/references/customers?meta=getCustomerFromCustomerList)」を利用しているようです。
データ系・ショッパー系については[こちら](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1#%EF%BC%92%E3%81%A4%E3%81%AE%E5%88%86%E9%A1%9E)をご覧ください。またSCAPIとOCAPIの違いについては[こちら](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1#scapi%E3%81%A8ocapi%E3%81%AE%E9%81%95%E3%81%84)をご覧ください。

まずは、[モジュールの追加方法](https://salesforce.quip.com/zZenAtdSnx4R#temp:C:VEK475ced43069b4049babf0bf71)を参考に「Salesforce Commerce Cloud B2C Data Connector - Mule 4」を追加します。
モジュールをクリックした状態で「Get Customer in Customer List」を任意のフローへドラッグ&ドロップします。
![スクリーンショット 2022-11-22 17.59.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/dede64df-55f0-5399-7595-b63f03a96557.png)



ドラッグ&ドロップしたモジュールを選択した状態で、「＋」ボタンをクリックし、接続設定を追加します。


![スクリーンショット 2022-11-22 12.09.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/2faf4ad9-4c92-4170-b8ab-d401e7bbb18e.png)




「General」の入力ボックスに下記の内容を入力していきます。（通常は環境変数を使った方が良さそうですが、今回はベタ書きです）

* Base Url
    * `https://{shortCode}.api.commercecloud.salesforce.com`
    * Short Codeについては[こちら](https://qiita.com/syunyama/items/58433ae8e3c5fda7f37e#a--b2c-commerce%E3%81%AB%E9%96%A2%E3%82%8F%E3%82%8Bid%E3%82%92%E6%8A%8A%E6%8F%A1)を参照
* Client ID & Client Secret
    * 「[APIクライアントの作成](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1#1-api%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)」で作成したクライアントのIDとパスワード
* Token Url
    * `https://account.demandware.com/dwsso/oauth2/access_token`
* Scope
    *  API を呼ぶ際に必要な [API クライアントに設置したスコープ](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1#ascapi-account-manager%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A)。（[スコープ一覧](https://developer.salesforce.com/docs/commerce/commerce-api/guide/auth-z-scope-catalog.html)と[こちら](https://qiita.com/syunyama/items/060f5777b0fc04e4cea1#ocapi%E3%81%A8scpi%E3%81%A7%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95%E3%81%AE%E9%81%95%E3%81%84)を参照） 


![スクリーンショット 2022-11-22 12.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/6050f2bf-3fa0-456d-2acb-c929cbc3e9a1.png)




接続設定が追加できたら、顧客情報を取得するためのパラメータを下記のように設定します。

* version
    * API  のバージョン
* Organization ID
    * Organization ID については[こちら](https://qiita.com/syunyama/items/58433ae8e3c5fda7f37e#a--b2c-commerce%E3%81%AB%E9%96%A2%E3%82%8F%E3%82%8Bid%E3%82%92%E6%8A%8A%E6%8F%A1)を参照
* List ID
    * 顧客リストの ID。B2C Commerce の Business Manager 上から確認。
* Customer No 
    * リクエストボディの customerNo から取得


![スクリーンショット 2022-11-22 12.09.40 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/b9587bb1-77f2-19d1-9ffe-fa1328ba1f70.png)




取得した顧客情報はそのままレスポンスとして返すように「Transform Message」を設定します。
![スクリーンショット 2022-11-22 12.10.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/cb9a99ba-f25f-b098-730d-af82c9e37854.png)





最後にデプロイし、Postmanで実行して、顧客情報が取得できていたら完了です。
![スクリーンショット 2022-11-22 12.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/f2a3159a-df73-01a8-1500-3c76d17d0fe5.png)






## ショッパー系APIを呼ぶ


今回はショッパー系APIの顧客情報を取得したいと思います。内部ではSCAPIの「[Get Customer](https://developer.salesforce.com/docs/commerce/commerce-api/references/shopper-customers?meta=getCustomer)」を利用しているようです。
まずは、[モジュールの追加方法](https://salesforce.quip.com/zZenAtdSnx4R#temp:C:VEK475ced43069b4049babf0bf71)を参考に「Commerce Cloud B2C Shop Connector - Mule 4」を追加します。
モジュールをクリックした状態で「Get Customer」を任意のフローへドラッグ&ドロップします。
あとはデータ系の設定と似ているので割愛します。

ヘッダーの「Authorization」をそのまま接続設定の「Authorization」に入れておきましょう。
![スクリーンショット 2022-11-22 14.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/11009b43-3807-3bdd-eff9-f973703bdc36.png)





今回はMuleSoftを利用せずにトークンの取得を行いました。ショッパー系のトークンの取得方法は下記をご覧ください。

* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(ショッパー系API - SCAPIパブリッククライアント編)](https://qiita.com/syunyama/items/89b204486ace9fd10440#6-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97)
* [Salesforce B2C CommerceのヘッドレスAPIを呼んでみる(ショッパー系API - SCAPIプライベートクライアント編)](https://qiita.com/syunyama/items/34bd2a11dabb93bb1dc1#6-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97)

取得したトークンをベアラートークンとしてパラメータに渡し、APIを実行して顧客情報が取得できたら完了です。
![スクリーンショット 2022-11-22 14.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2110894/00ef7809-ae0f-8ddb-1856-de7418313d2a.png)