🗞

【Shopify.dev和訳】Apps/Subscriptions/Discounts

2021/09/17に公開

この記事について

この記事は、Apps/Subscriptions/Discountsの記事を和訳したものです。

記事内で使用する画像は、公式ドキュメント内の画像を引用して使用させていただいております。

Shopify アプリのご紹介

Shopify アプリである、「商品ページ発売予告アプリ | リテリア Coming Soon」は、商品ページを買えない状態のまま、発売日時の予告をすることができるアプリです。Shopify で Coming Soon 機能を実現することができます。

https://apps.shopify.com/shopify-application-314?locale=ja&from=daniel

Shopify アプリである、「らくらく日本語フォント設定|リテリア Font Picker」は、ノーコードで日本語フォントを使用できるアプリです。日本語フォントを導入することでブランドを演出することができます。

https://apps.shopify.com/font-picker-1?locale=ja&from=daniel

定期購入における割引の作成と管理

定期購入には、パーセンテージ割引、定額割引、送料無料割引など、さまざまな種類の割引を適用できます。

このチュートリアルでは、定期購入の割引を管理するためのコールを説明します。また、割引の対象となるお客様の資格、Shopify コード割引の追加、キャンセル割引についてもご説明します。


必要条件

スコープ

GraphQL ミューテーションを使用するには、アプリが Shopify ストアに対して以下のアクセススコープを要求する必要があります。

  • read_own_subscription_contracts: アプリが所有するコントラクトに対する定期購入ミューテーションの読み取りを許可します。
  • write_own_subscription_contracts: アプリが所有するコントラクトに対して、定期購入契約ミューテーションを書き込むことを許可します。
  • write_discounts: アプリが Shopify のコード割引を管理できるようにします。

割引の種類

定期購入に割引を適用するには、2 つの方法があります。

  • 手動カスタム割引: 定期購入で定義されます。
  • Shopify コード割引: ショップで定義され、定期購入に適用されます。

手動カスタム割引と Shopify コード割引の両方に、以下の割引タイプを適用できます。

  • パーセンテージ割引: 元の商品価格から何%かを差し引いた金額。例えば、10%オフなど。
  • 固定額割引: 特定の金額を元の商品価格から差し引く。例えば、10 ドル引きなど。
  • 送料無料割引: 本来の商品価格から送料を差し引くオファー。例えば、定期購入の場合、送料が無料になります。

1 回限りの購入、定期購入、またはその両方に割引を適用するかどうかを定義できます。

また、定期購入の場合は、割引の使用回数を制限することができます。


コード割引の条件

このセクションでは、定期購入に適用されるコード割引のために Shopify が提供する条件について説明します。

割引の対象となるお客様

割引のための顧客資格を特定の顧客グループに限定し、定期購入対応の顧客フィルターを使用することができます。フィルターは Shopify 管理画面の顧客ページで利用できます。

コード割引の適用範囲

コード割引を追加する際、コード割引の適格性は最初の適用時にのみ検証されます(チェックアウト時、または既存の購読契約に割引を追加する際)。コード割引が正常に適用された後は、最初の適用時に使用された条件が再度評価されることはありません。定期購入の回数制限など、その他の条件は引き続き適用されます。

利用限度額

コード割引の使用限度額は、コード割引が既存の定期購入契約に適用された場合、またはチェックアウト時にコード割引が定期購入に使用された場合に検証されます。

利用限度額に達していた場合、その割引は却下されます。コード割引の使用回数は、定期購入に保存されると増加します。利用回数は、定期購入契約から削除されても減少しません。

解約割引

解約の可能性がある加入者に解約割引を提供するアプリは、割引を設定して、定期購入契約に手動割引として保存できます。

ラインアイテム

契約書のドラフトにラインアイテムが追加、更新、または削除された場合、Shopify は残りの適用可能なアイテムに割引を再適用します。


定期購入契約の割引割り当ての問い合わせ

定期購入契約に適用された割引を確認するには、割引の割り当てを照会できます。次の例では、購読契約の最初の 5 行の割引配分を照会する方法を示しています。

リクエスト
POST /admin/api/2021-01/graphql.json

{
  subscriptionDraft(id: "gid://shopify/SubscriptionDraft/1") {
    id
    lines(first: 5) {
      edges {
        node {
          id
          lineDiscountedPrice {
            amount
            currencyCode
          }
          discountAllocations {
            amount {
              amount
              currencyCode
            }
            discount {
              ... on SubscriptionAppliedCodeDiscount {
                id
              }
              ... on SubscriptionManualDiscount {
                id
              }
            }
          }
        }
      }
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraft": {
      "id": "gid://shopify/SubscriptionDraft/65558",
      "lines": {
        "edges": [
          {
            "node": {
              "id": "gid://shopify/SubscriptionLine/0a76381a-0382-41cc-a50c-ba116667480c",
              "lineDiscountedPrice": {
                "amount": "3.13",
                "currencyCode": "USD"
              },
              "discountAllocations": [
                {
                  "amount": {
                    "amount": "250.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/e444480d-2229-4040-a1e6-cb5790983947"
                  }
                },
                {
                  "amount": {
                    "amount": "125.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/934dcec6-8a4c-4d24-9aa4-3d8b89a9728e"
                  }
                },
                {
                  "amount": {
                    "amount": "62.5",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/2a957c6e-8db0-49d7-9d8c-f1c12605e6a8"
                  }
                },
                {
                  "amount": {
                    "amount": "31.25",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/a61cc79b-101a-4472-a174-6d470e33981c"
                  }
                },
                {
                  "amount": {
                    "amount": "15.62",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/25cae292-7527-44f0-85fa-deb083312de4"
                  }
                },
                {
                  "amount": {
                    "amount": "7.81",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/f1cf0ecd-6091-4642-abe2-952fad9c9170"
                  }
                },
                {
                  "amount": {
                    "amount": "3.91",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/eb308cac-0106-4657-8611-50222b4696de"
                  }
                },
                {
                  "amount": {
                    "amount": "0.78",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/969bfa83-1d0a-4e40-8b99-7e2121df3208"
                  }
                }
              ]
            }
          },
          {
            "node": {
              "id": "gid://shopify/SubscriptionLine/2ae1c795-0e33-42bb-a74a-b8106545a849",
              "lineDiscountedPrice": {
                "amount": "500.0",
                "currencyCode": "USD"
              },
              "discountAllocations": []
            }
          },
          {
            "node": {
              "id": "gid://shopify/SubscriptionLine/3cd2fc52-4b16-4f1c-9d79-91e2abb3058e",
              "lineDiscountedPrice": {
                "amount": "0.01",
                "currencyCode": "USD"
              },
              "discountAllocations": [
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/6e080d47-5154-4279-965c-8f6fa8151d72"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/249dafe1-62cc-450a-a475-70bc19f5b0e2"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/70eda768-513e-4bc0-92c8-36a1ea6503f5"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/31c33505-a29b-44e3-8fee-62e646cc44cc"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/dabf2d1f-2698-42f7-86d9-76e2aa3e69db"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/9f52b67b-d030-47d2-b94f-0c5fde1a4483"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/5f0a82b1-7b27-450e-806b-67834e844b57"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/313b754a-715c-4aea-9e84-5576f3882547"
                  }
                },
                {
                  "amount": {
                    "amount": "49.99",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/49ea8c6e-d2cb-4c80-a76f-5c178df15ddb"
                  }
                },
                {
                  "amount": {
                    "amount": "50.0",
                    "currencyCode": "USD"
                  },
                  "discount": {
                    "id": "gid://shopify/SubscriptionManualDiscount/99af7009-5f57-497c-85d5-b3f770b17be1"
                  }
                }
              ]
            }
          },
          {
            "node": {
              "id": "gid://shopify/SubscriptionLine/3e4f1771-4649-4dd9-a066-3fdc5e06f3a5",
              "lineDiscountedPrice": {
                "amount": "500.0",
                "currencyCode": "USD"
              },
              "discountAllocations": []
            }
          },
          {
            "node": {
              "id": "gid://shopify/SubscriptionLine/866be7ce-8903-4acb-a3b2-a73a41100c55",
              "lineDiscountedPrice": {
                "amount": "500.0",
                "currencyCode": "USD"
              },
              "discountAllocations": []
            }
          }
        ]
      }
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 18,
      "actualQueryCost": 18,
      "throttleStatus": {
        "maximumAvailable": 1000.0,
        "currentlyAvailable": 982,
        "restoreRate": 50.0
      }
    }
  }
}

定期購入契約へのパーセンテージ割引の追加

subscriptionDraftDiscountAddミューテーションを使用すると、定期購入契約にパーセンテージ割引を追加できます。

以下の例では、recurringCycleLimitは、任意の定期購入契約に適用される割引を使用できる反復サイクル数を意味します。制限がない場合、割引は無期限に適用されます。限度額に達すると、特定の定期購入契約の定期購入ラインに割引が適用されなくなります。アプリは、購読契約から割引を更新(契約ライン、値、または制限を調整)または削除できます。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftDiscountAdd(
    draftId: "gid://shopify/SubscriptionDraft/1"
    input: {
      title: "Discount title"
      recurringCycleLimit: 6
      value: { percentage: 50 }
      entitledLines: {
        all: false
        lines: { add: ["gid://shopify/SubscriptionLine/f4b1179c-2238-4991-bb47-353b2cae0d68"] }
      }
    }
  ) {
    discountAdded {
      id
      title
      type
      value {
        ... on SubscriptionDiscountPercentageValue {
          percentage
        }
      }
      entitledLines {
        all
        lines(first: 10) {
          edges {
            node {
              id
              currentPrice {
                amount
                currencyCode
              }
              quantity
              lineDiscountedPrice {
                amount
                currencyCode
              }
              discountAllocations {
                amount {
                  amount
                  currencyCode
                }
                discount {
                  ... on SubscriptionManualDiscount {
                    id
                  }
                }
              }
            }
          }
        }
      }
    }
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftDiscountAdd": {
      "discountAdded": {
        "id": "gid://shopify/SubscriptionManualDiscount/18945661-27c0-4cd5-8914-9cbaa81ea4b6",
        "title": "Discount title",
        "type": "MANUAL",
        "value": {
          "percentage": 50
        },
        "entitledLines": {
          "all": false,
          "lines": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/SubscriptionLine/f4b1179c-2238-4991-bb47-353b2cae0d68",
                  "currentPrice": {
                    "amount": "10.0",
                    "currencyCode": "USD"
                  },
                  "quantity": 1,
                  "lineDiscountedPrice": {
                    "amount": "5.0",
                    "currencyCode": "USD"
                  },
                  "discountAllocations": [
                    {
                      "amount": {
                        "amount": "5.0",
                        "currencyCode": "USD"
                      },
                      "discount": {
                        "id": "gid://shopify/SubscriptionManualDiscount/18945661-27c0-4cd5-8914-9cbaa81ea4b6"
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/1"
      },
      "userErrors": []
    }
  }
}

定期購入契約への固定額割引の追加

定期購入契約に固定額の割引を追加するには、subscriptionDraftDiscountAddミューテーションを使用します。次の例では、定額割引の$50.00 が定期購入契約に適用されています。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftDiscountAdd(
    draftId: "gid://shopify/SubscriptionDraft/1"
    input: {
      title: "Discount title"
      recurringCycleLimit: 6
      value: { fixedAmount: { amount: 50, appliesOnEachItem: false } }
      entitledLines: {
        all: false
        lines: { add: ["gid://shopify/SubscriptionLine/f4b1179c-2238-4991-bb47-353b2cae0d68"] }
      }
    }
  ) {
    discountAdded {
      id
      title
      type
      value {
        ... on SubscriptionDiscountFixedAmountValue {
          amount {
            amount
            currencyCode
          }
          appliesOnEachItem
        }
      }
      entitledLines {
        all
        lines(first: 10) {
          edges {
            node {
              id
              currentPrice {
                amount
                currencyCode
              }
              quantity
            }
          }
        }
      }
    }
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftDiscountAdd": {
      "discountAdded": {
        "id": "gid://shopify/SubscriptionManualDiscount/18945661-27c0-4cd5-8914-9cbaa81ea4b6",
        "title": "Discount title",
        "type": "MANUAL",
        "value": {
          "amount": {
            "amount": 50,
            "currencyCode": "USD"
          },
          "appliesOnEachItem": false
        },
        "entitledLines": {
          "all": false,
          "lines": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/SubscriptionLine/f4b1179c-2238-4991-bb47-353b2cae0d68",
                  "currentPrice": {
                    "amount": "10.0",
                    "currencyCode": "USD"
                  },
                  "quantity": 1
                }
              }
            ]
          }
        }
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/1"
      },
      "userErrors": []
    }
  }
}

定期購入契約への送料無料割引の追加

**subscriptionDraftFreeShippingDiscountAdd**ミューテーションは、購読契約ドラフト上の送料無料の割引を更新します。次の例では、定期購入契約に送料無料が追加されています。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftFreeShippingDiscountAdd(
    draftId: "gid://shopify/SubscriptionDraft/1"
    input: { title: "Free shipping", recurringCycleLimit: 6 }
  ) {
    discountAdded {
      id
      title
      targetType
      value {
        ... on SubscriptionDiscountPercentageValue {
          percentage
        }
      }
    }
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftFreeShippingDiscountAdd": {
      "discountAdded": {
        "id": "gid://shopify/SubscriptionManualDiscount/7568195-11w0-4ad3-9014-9toma30ea4b6",
        "title": "Free shipping",
        "type": "MANUAL",
        "targetType": "SHIPPING_LINE",
        "value": {
          "percentage": 100
        }
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/1"
      },
      "userErrors": []
    }
  }
}

定期購入割引コードの作成

discountCodeBasicCreateミューテーションを使用して、基本コードの割引を作成できます。applyOnSubscriptionフィールドをtrueに定義して、割引を定期購入に適用できることを指定します。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  discountCodeBasicCreate(
    basicCodeDiscount: {
      title: "WELCOME_10%"
      code: "WELCOME_10%"
      customerGets: {
        value: { percentage: 0.1 }
        items: { all: true }
        appliesOnSubscription: true
        appliesOnOneTimePurchase: false
      }
      customerSelection: { all: true }
      startsAt: "20200202T020202"
    }
  ) {
    codeDiscountNode {
      id
      codeDiscount {
        __typename
        ... on DiscountCodeBasic {
          title
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
View response

JSON response:

{
  "data": {
    "discountCodeBasicCreate": {
      "codeDiscountNode": {
        "id": "gid://shopify/DiscountCodeNode/1",
        "codeDiscount": {
          "__typename": "DiscountCodeBasic",
          "title": "WELCOME_10%"
        }
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 11,
      "throttleStatus": {
        "maximumAvailable": 1000.0,
        "currentlyAvailable": 989,
        "restoreRate": 50.0
      }
    }
  }
}

定期購入契約への割引コードの適用

割引コードを定期購入契約に適用するには、subscriptionDraftDiscountCodeApplyミューテーションを使用します。次の例では、ウェルカム 10%オフの割引コードが定期購入契約に適用されています。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftDiscountCodeApply(
    draftId: "gid://shopify/SubscriptionDraft/1"
    redeemCode: "WELCOME_10%"
  ) {
    appliedDiscount {
      id
      redeemCode
      rejectionReason
    }
    draft {
      id
    }
    userErrors {
      field
      message
      code
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftDiscountCodeApply": {
      "discountApplied": {
        "id": "gid://shopify/SubscriptionAppliedCodeDiscount/17598524-27c1-4cd5-8914-9beca81ea4b6",
        "redeemCode": "WELCOME_10%",
        "rejectionReason": null
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/1"
      },
      "userErrors": []
    }
  }
}

定期購入契約の割引の更新

subscriptionDraftDiscountUpdateミューテーションは、定期購入契約ドラフト上の割引を更新します。次の例では、割引のtitlepercentageの値が更新されています。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftDiscountUpdate(
    draftId: "gid://shopify/SubscriptionDraft/1"
    discountId: "gid://shopify/SubscriptionManualDiscount/969bfa83-1d0a-4e40-8b99-7e2121df3208"
    input: { title: "Edited discount title", value: { percentage: 10 } }
  ) {
    discountUpdated {
      id
      title
      type
      value {
        ... on SubscriptionDiscountPercentageValue {
          percentage
        }
      }
      entitledLines {
        all
        lines(first: 10) {
          edges {
            node {
              id
              currentPrice {
                amount
                currencyCode
              }
              quantity
            }
          }
        }
      }
    }
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftDiscountUpdate": {
      "discountUpdated": {
        "id": "gid://shopify/SubscriptionManualDiscount/969bfa83-1d0a-4e40-8b99-7e2121df3208",
        "title": "Edited discount title",
        "type": "MANUAL",
        "value": {
          "percentage": 10
        },
        "entitledLines": {
          "all": false,
          "lines": {
            "edges": [
              {
                "node": {
                  "id": "gid://shopify/SubscriptionLine/0a76381a-0382-41cc-a50c-ba116667480c",
                  "currentPrice": {
                    "amount": "25.0",
                    "currencyCode": "USD"
                  },
                  "quantity": 20
                }
              }
            ]
          }
        }
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/65558"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 24,
      "actualQueryCost": 15,
      "throttleStatus": {
        "maximumAvailable": 1000.0,
        "currentlyAvailable": 985,
        "restoreRate": 50.0
      }
    }
  }
}

定期購入契約の割引の削除

subscriptionDraftDiscountRemoveミューテーションを使用すると、いつでも定期購入契約から割引を削除できます。

リクエスト
POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftDiscountRemove(
    draftId: "gid://shopify/SubscriptionDraft/1"
    discountId: "gid://shopify/SubscriptionManualDiscount/18945661-27c0-4cd5-8914-9cbaa81ea4b6"
  ) {
    discountRemoved {
      ... on SubscriptionManualDiscount {
        id
      }
      ... on SubscriptionAppliedCodeDiscount {
        id
      }
    }
    draft {
      id
    }
    userErrors {
      field
      message
      code
    }
  }
}
View response

JSON response:

{
  "data": {
    "subscriptionDraftDiscountRemove": {
      "discountRemoved": {
        "id": "gid://shopify/SubscriptionManualDiscount/18945661-27c0-4cd5-8914-9cbaa81ea4b6"
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/1"
      },
      "userErrors": []
    }
  }
}

次のステップ


Shopify アプリのご紹介

Shopify アプリである、「商品ページ発売予告アプリ | リテリア Coming Soon」は、商品ページを買えない状態のまま、発売日時の予告をすることができるアプリです。Shopify で Coming Soon 機能を実現することができます。

https://apps.shopify.com/shopify-application-314?locale=ja&from=daniel

Shopify アプリである、「らくらく日本語フォント設定|リテリア Font Picker」は、ノーコードで日本語フォントを使用できるアプリです。日本語フォントを導入することでブランドを演出することができます。

https://apps.shopify.com/font-picker-1?locale=ja&from=daniel

Discussion

ログインするとコメントできます