Shopify Fulfillment API
#Shopify_api
Fulfillment 以下の構造になってる。
注文があると、FulfillementOrderオブジェクトができる。
FulfillementOrderオブジェクトに fulfillmentcreateV2で出荷状況をセットする。すると、Fulfillmentオブジェクトができる。
Fulfillmentオブジェクトに対して、取り消しなどの処理をすることは可能
https://shopify.dev/api/admin-graphql/2021-10/mutations/fulfillmentOrderCancel
https://gyazo.com/948fd718bad22a34c263d8c02d7ef089
注文(order)があると、自動的に FulfillmentOrderが作られる。そして status(OPEN->.....CLOSE発注済み)の変更を待つ形。
FulfillmentOrderのstatusの変更をかけるには、FulfillmentV2Input オブジェクトでmutation を行う。
参考:
Shopify APIで注文のフルフィルメントを行う - asoview! TECH BLOG
こちらが、完結したフローが提示されている。(locationが複数ある場合、fulfillmentOrderが複数ある場合)
注文(order)から出荷(fulfillmentOrder)を取得 query:"status:OPEN" で出荷済みitemはfilterで外す
fulfillmentOrder(ID)が取れるので、それに対して mutation fulfillmentcreateV2(
idを渡せばよい。あと、trackingInfo(ヤマトとか郵便の番号), notifyCustomerも設定できる。
fulfillmentCreateV2を自分でもcheck
https://shopify.dev/api/admin-graphql/2022-07/mutations/fulfillmentCreateV2
https://gyazo.com/d65c2d92e9b897e00670c29570c4fb1d
lineItemごとにfulfillment request?をしたい場合は、FulfillmentOrderLineItemInput(id, quantity)を入れる
returnとして、shopify fulfillment オブジェクトが返ってくる
shippingのstatus変更としては、ここを操作すればよい
最初、どういうフローかが分からなかった。
orderがあれば、order_Idを元に、fullfillmentをcreateするpostを投げれば良いかなとおもっていたが.....
実際には、
Managing fulfillments as an order management app
orderがある(object)が作られると、
その後に、自動で? fullfillmentOrder オブジェクトが作られる
order が createされた際のwebhookには、fullfillemtOrderがないので、orderが作られてると同時に作られるわけではないようだが...
実務的には? orderが作られると、fullfillmentOrderが作られて、そのidが用意されるので、それを見て、操作していけばよい?
code: order_fullfillmentOrder.json
"order": {
"id": "gid://shopify/Order/xxxxx",
"name": "#XXXX",
"fulfillments": [],
"fulfillmentOrders": {"edges": [{"node": {
"id": "gid://shopify/FulfillmentOrder/11111111",
"status": "OPEN",
"requestStatus": "UNSUBMITTED",
"supportedActions": {"action": "CREATE_FULFILLMENT"},{"action": "HOLD"},
"lineItems": {"edges": [{"node": {
"id": "gid://shopify/FulfillmentOrderLineItem/999999999",
"remainingQuantity": 1}}}}]}}
fullfillmentOrderには、status, requestStatus, supportedActionsがあり、
現状のstatus、supportedActionsにrequestを受け取りうるActionがあり、そのrequestのStatusが示される
で、CREATE_FULLFILLMENT したいなら、graphqlのmutationのparameterに
code: fullfillmentOrderCreate.json
{"data":{
"fullfillmentCreateV2":{
"fulfillment": {
"notifyCustomer": false,
"trackingInfo": {
"company": "my-shipping-company",
"number": "1562678",
"url": "https://www.my-shipping-company.com"
},
"lineItemsByFulfillmentOrder": [{
"fulfillmentOrderId": "gid://shopify/FulfillmentOrder/111111",
"fulfillmentOrderLineItems": {
"id": "gid://shopify/FulfillmentOrderLineItem/9999999",
"quantity": 3
}}]}}}}
fullfillmentにはineItemsByFullfillmentOrderを含める。
Orderは、一括発送とは限らないので、さきほどの、fullfillmentOrderID以外に、商品(lineItem)別のfullfillment_idを含めてrequestを投げる。
成功すれば、
その注文のstatusが、OPEN から
すべての商品でfullfillmentできていればCLOSEDのstatus,
部分発送ですべておえてなければ、IN_PROGRESSのstatusになる。
-----------------以下は、妄想....
FulfillmentEvent API
shipping updateを掛けて、配送状況のupdateをかけたい。
ヤマト運輸配送ステータスの変更を検知して、
Shopify APIで、fullfillmentEvent apiで postすればよい?
FulfillmentEvent
ここで、statusを 例えば、pickupにしてやればよい。
shopify側の管理画面で、shipping update時に顧客に通知(メール、SMS) がいくように設定できる。
参考:
https://toi.kuronekoyamato.co.jp/cgi-bin/tneko
Notifications · Shopify Help Center