For discussing the development and integration of subscription-enabled shops using Shopify's Subscription APIs.
As a prerequisite, this API is used to obtain sellingPlan information.
https://shopify.dev/docs/api/ajax/reference/product#get-locale-products-product-handle-js
For a product that includes three variations, if you associate plan group A with the first variation and plan group A with the second variation, the structure of the JSON data returned will differ depending on the store.
What is the reason for this difference?
correct JSON data
{ "selling_plan_groups": [ { "id": "de6ea32ed60090ea69fcd92c946ca3fe6a7743d0", "name": "ウィジェット検証用1", "options": [ { "name": "ウィジェット検証用1", "position": 1, "values": ["プラン1"] } ], "selling_plans": [ { "id": 8612348198, "name": "プラン1", "description": "", "options": [ { "name": "ウィジェット検証用1", "position": 1, "value": "プラン1" } ], "recurring_deliveries": true, "price_adjustments": [ { "order_count": null, "position": 1, "value_type": "percentage", "value": 5 } ] } ], "app_id": null }, { "id": "a0a0af06a4f3877b0e50310c03e70690aff58dc3", "name": "ウィジェット検証用2", "options": [ { "name": "ウィジェット検証用2", "position": 1, "values": ["プラン1"] } ], "selling_plans": [ { "id": 8612380966, "name": "プラン1", "description": "", "options": [ { "name": "ウィジェット検証用2", "position": 1, "value": "プラン1" } ], "recurring_deliveries": true, "price_adjustments": [ { "order_count": null, "position": 1, "value_type": "percentage", "value": 5 } ] } ], "app_id": null } ] }
Incorrect JSON data
For some reason, they are consolidated into one plan group.
{ "selling_plan_groups": [ { "id": "9b03a6290bf8382c19a4ec723375ad1f75c4da50", "name": "通常配送より5%オフ!", "options": [ { "name": "通常配送より5%オフ!", "position": 1, "values": ["お得用1ヶ月分", "お得用3ヶ月分"] } ], "selling_plans": [ { "id": 689486332187, "name": "お得用1ヶ月分", "description": "毎月1回、商品を配送いたします。", "options": [ { "name": "通常配送より5%オフ!", "position": 1, "value": "お得用1ヶ月分" } ], "recurring_deliveries": true, "price_adjustments": [ { "order_count": null, "position": 1, "value_type": "percentage", "value": 5 } ] }, { "id": 689486364955, "name": "お得用3ヶ月分", "description": "3ヶ月毎に1回、商品を配送いたします。", "options": [ { "name": "通常配送より5%オフ!", "position": 1, "value": "お得用3ヶ月分" } ], "recurring_deliveries": true, "price_adjustments": [ { "order_count": null, "position": 1, "value_type": "percentage", "value": 5 } ] } ], "app_id": null } ] }
Hey @ptt-kmatsubara
Products can have multiple selling plan groups (e.g. 'Subscribe and save', 'Prepaid') and each selling plan group can have multiple selling plans (.e.g 'Delivery Weekly', 'Delivery Monthly').
More info here: https://shopify.dev/docs/apps/selling-strategies/subscriptions/selling-plans
Scott | Developer Advocate @ Shopify
Thank you for your reply.
yes. I understand their behavior.
The problem is that even though multiple plan groups are linked, the JSON data is treated as if it were a single plan group.
The JSON data provided by Shopify is inconsistent with the information that can be obtained using AdminAPI.
Hey @ptt-kmatsubara
Can you please DM me store details so I can investigate?
Scott | Developer Advocate @ Shopify
日本語で失礼します。
対象の商品は下記となります。
https://lachaton.jp/products/test.js
^ こちらのJSONデータで提供される情報として、下記のように1プラングループに対し、2プラン紐づけがあるようなJSONデータが返却されています。
{
"selling_plan_groups": [
{
"id": "168e14bb2598ba7406f54360cedcbd7436f2815a",
"name": "通常配送よりさらに5%オフ!",
"options": [
{
"name": "通常配送よりさらに5%オフ!",
"position": 1,
"values": [
"お得用1ヶ月分",
"お得用3ヶ月分"
]
}
],
"selling_plans": [
{
"id": 689584111899,
"name": "お得用1ヶ月分",
"description": "毎月1回、商品を配送いたします。",
"options": [
{
"name": "通常配送よりさらに5%オフ!",
"position": 1,
"value": "お得用1ヶ月分"
}
],
"recurring_deliveries": true,
"price_adjustments": [
{
"order_count": null,
"position": 1,
"value_type": "percentage",
"value": 5
}
]
},
{
"id": 689584144667,
"name": "お得用3ヶ月分",
"description": "毎月1回、商品を配送いたします。",
"options": [
{
"name": "通常配送よりさらに5%オフ!",
"position": 1,
"value": "お得用3ヶ月分"
}
],
"recurring_deliveries": true,
"price_adjustments": [
{
"order_count": null,
"position": 1,
"value_type": "percentage",
"value": 5
}
]
}
],
"app_id": null
}
]
}
また、AdminAPI実行時に返却される情報は下記となります。
(3つあるバリエーションのうち2つにそれぞれ1つプラングループ紐づけ)
{
"data": {
"product": {
"title": "(検証用)極上ナチュラルチキンペースト",
"variants": {
"edges": [
{
"node": {
"id": "gid://shopify/ProductVariant/47093534523675",
"title": "1week",
"sellingPlanGroupCount": 0,
"sellingPlanGroups": {
"edges": []
}
}
},
{
"node": {
"id": "gid://shopify/ProductVariant/47093534589211",
"title": "お得用1ヶ月",
"sellingPlanGroupCount": 1,
"sellingPlanGroups": {
"edges": [
{
"node": {
"id": "gid://shopify/SellingPlanGroup/77200916763",
"name": "通常配送よりさらに5%オフ!"
}
}
]
}
}
},
{
"node": {
"id": "gid://shopify/ProductVariant/47093534621979",
"title": "お得用3ヶ月",
"sellingPlanGroupCount": 1,
"sellingPlanGroups": {
"edges": [
{
"node": {
"id": "gid://shopify/SellingPlanGroup/77200949531",
"name": "通常配送よりさらに5%オフ!"
}
}
]
}
}
}
]
}
}
},
"extensions": {
"cost": {
"requestedQueryCost": 133,
"actualQueryCost": 14,
"throttleStatus": {
"maximumAvailable": 1000.0,
"currentlyAvailable": 986,
"restoreRate": 50.0
}
}
}
}
こちらの想定するJSONとしては下記のような構成となります。
(2つプラングループがある状態)
{
"selling_plan_groups": [
{
"id": "aaaa",
"selling_plans": [
{ "id": 689486332187 },
]
},
{
"id": "bbbb",
"selling_plans": [
{ "id": 689486332187 },
]
}
]
}
こちらですが、同じ名称で違うデータを参照していたりしませんか? Ajax APIのレスポンスにproduct 情報を含めることはできますか?
こちらでよろしいでしょうか。
https://lachaton.jp/products/test.js
該当のストア様の商品となります。
こちらの商品は3つのバリエーションが有り、
「1week」・・・プラングループ紐づけ無し
「お得用1ヶ月」・・・プラングループID「77200916763」を紐づけ
「お得用3ヶ月」・・・プラングループID「77200949531」を紐づけ
といった構成になっています。(gidからShopifyの管理部分の文字列は省略しています)
こちらですが、原因は、2つのGroupが同じ名前で登録されているのでマージされているのではないかと思います。Group名を片方変えた場合、どうなりますか?
ありがとうございます。Group名を別にした場合、期待するJSONデータが返却されるようになりました。
状況整理すると、異なるIDのプラングループを紐づけても名前が同一のものは1つのプラングループとなるようマージされる仕様(バグではなく)となっている。
という解釈でよろしいでしょうか。
公式な記載はありませんが、JSONのデータのgroupのIDは、Admin GraphQLでかえってきているIDの値と異なっており、これは、Admin APIの仕様ではなくて、Storefront APIの仕様に準拠していると見えます。
https://shopify.dev/docs/api/storefront/unstable/objects/SellingPlanGroup
Strorefront APIで、product > SellingPlanGroupを参照すると、IDはレスポンスに含まれないため、同一名称はマージされるものと思います。
承知いたしました。ありがとうございました。