Shopify APIで注文のフルフィルメントを行う

これはアソビュー Advent Calendar 2021の21日目の記事です。

アソビューでバックエンドエンジニアをしている上中です。

今回は、ShopifyのAdmin API( GraphQL)を利用して、Shopifyのストアで注文された注文情報に対してフルフィルメントを行う方法についてご説明します。

フルフィルメントとは?

Shopifyにおけるフルフィルメント(Fulfillment)は、いわゆる「出荷」のことです。アソビュー!ギフトでは、一部のギフト商品について、注文をトリガーに外部のAPIを呼び出し、注文者に対して自動でギフトコードをメールで送信しています。このギフトコードのメール送信自体が「出荷」となるため、Shopify上の注文情報を出荷済みとする必要があります。

APIで注文情報から出荷IDを取得する

Shopifyの出荷はロケーション(出荷元)ごとに行います。当然のことながら、一つの注文には複数の商品が含まれることがあり、さらに商品ごとに出荷元が異なる場合があります。その場合、出荷元ごとに複数の出荷情報が必要となります(各出荷元に個別に出荷依頼を出すため)。

よってフルフィルメントを行うには、まず注文情報から未発送の出荷情報を取得する必要があります。APIで取得してみましょう。

ちなみに、PostmanはBodyの形式にGraphQLが選択できるため、QueryやVariablesでのリクエストがしやすいです。

URL:

https://<ストアのホスト名>/admin/api/2021-10/graphql.json

ヘッダ情報:

Content-Type : application/jsonX-Shopify-Access-Token : <Admin APIパスワード>

Query:

Variables:
注文IDは、対象の注文をShopifyの注文ダッシュボードで開いた際にURLに含まれる数字の羅列です。

これで以下のようなJSONが返されます。

"displayFulfillmentStatus": "UNFULFILLED",

となっている通り、まだ未出荷状態であることがわかります。

“fulfillmentOrders”の配列に、出荷元ごとの注文出荷情報が入っています。これを元にフルフィルメントを作成します。

APIでフルフィルメントを作成する

ではフルフィルメントを作成していきます。フルフィルメントは出荷元ごとに作成できます。今回は”fulfillmentOrders”が2つあることからもわかるとおり、2つの異なる出荷元の商品が同じ注文に含まれています。

早速一つをフルフィルメントしてみます。URLやヘッダは注文取得と同じなので省略します。

Query:

Variables:

これで一つ目の出荷が完了したことになります。Shopifyのダッシュボードで注文情報を見てみると、「一部出荷済み」となります。APIで見てみても、以下の通り”PARTIALLY_FULFILLED”となり、フルフィルメントを作成した注文出荷情報はfulfillmentOrdersからなくなっています。

ということで同じように残りの出荷情報もフルフィルメントしてみると、以下のように「出荷済み(displayFulfillmentStatus: FULFILLED)」となり、fulfillmentOrderは無くなります。

以上でAPIによる出荷が完了です。今回は以上になります。

「生きるに、遊びを。」をミッションに掲げる我らがアソビューでは一緒に事業をつくる仲間を絶賛募集中です。
興味がありましたらお気軽にご応募いただければと思います。

www.wantedly.com