🗞

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

2021/09/17に公開

この記事について

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

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

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

サブスクリプション契約の作成と管理

subscription contract とは、一定の期間または未定義の期間における定期的なサブスクリプションについて、顧客とマーチャントの間で特定の条件で合意することです。

このチュートリアルでは、2 つのユースケースを例に、サブスクリプション契約の作成と管理方法を説明します。このチュートリアルでは、2 つのユースケース(「Subscribe and save」サブスクリプションと「Prepaid」サブスクリプション)を例に、サブスクリプション契約の作成と管理方法を説明します。

必要条件

適用範囲の要件

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

  • read_own_subscription_contracts: アプリが所有するコントラクトに対するサブスクリプション契約のミューテーションを読み取ることを許可します。
  • write_own_subscription_contracts: アプリが所有するコントラクトに対して、サブスクリプションコントラクトミューテーションの書き込みを許可します。

サブスクリプション契約

サブスクリプション契約は、定期的なポリシーを持つ販売プランをサブスクリプションした結果です。顧客がチェックアウト時にサブスクリプション製品またはバリアントをサブスクリプションすると、Shopify はサブスクリプション契約を生成し、Webhook を使用して契約をアプリと共有します。

サブスクリプション契約は、マーチャントがサブスクリプションの更新時に満たすべき新しい注文を生成します。また、アプリがお客様に購読料を請求する仕組みにもなっています。

サブスクリプションコントラクトのオブジェクトの説明を見る
API オブジェクト 説明
サブスクリプション契約 特定の請求および配送スケジュールで、特定の価格で顧客に配送される一連のアイテムの契約を表します。

サブスクリプション契約は、注文とは異なります。注文とは、お客様がショップから 1 つまたは複数の商品をサブスクリプションするために完了したリクエストです。注文は、お客様がチェックアウトプロセスを完了したときに作成されます。その際、お客様は、電子メールアドレスまたは電話番号、請求先住所、および支払い情報を提供します。

注文が作成されても、サブスクリプション契約がすぐに利用できない場合があります。コントラクトが作成されたときに通知を受けるには、サブスクリプションコントラクトの Webhook を利用するのが最善です。
契約ライン サブスクリプション契約のアイテムの価格と数量を表します。
価格ポリシー 指定された請求サイクル数の後に価格を変更するという将来の意図を表します。顧客がチェックアウトを完了すると、Shopify はコントラクトを作成し、アプリ開発者には顧客がどのポリシーを選択したかが通知されます。
サブスクリプションオーダーライン サブスクリプション契約を関連するオーダーラインアイテムにリンクし、オプションでこのオーダーラインを作成した請求試行にリンクします。

サブスクリプション注文行は、以下のイベントのいずれかが発生したときに作成されます。

・課金の試みが注文を作成する。
・販売プランのサブスクリプションからサブスクリプションが作成される。

サブスクリプションドラフト サブスクリプションを変更する意図を表します。顧客がサブスクリプションを変更したい場合、アプリはサブスクリプションドラフトを作成し、変更をコミットして変更を有効にする必要があります。
ドラフト変更 契約ラインの変更など、サブスクリプションドラフトに加えられた変更を表します。
課金の試み 課金サイクルを実行し、顧客の支払い方法に定期サブスクリプション契約の料金を請求する試みを表します。

ストアで利用可能なコントラクトの照会

ストアで利用可能なコントラクトを表示するには、SubscriptionContract を照会します。次の例では、応答ボディは、契約のステータス、顧客および請求ポリシーに関する情報を含む、利用可能なすべての契約を返します。

サブスクリプション契約は、以下のステータスのいずれかを持つことができます。

  • ACTIVE:契約はアクティブで、そのポリシーに従って継続されています。
  • PAUSED:契約は一時的に中断されており、将来的に再開される予定です。
  • EXPIRED:契約が終了しました。想定される状況で契約が終了した。サブスクリプションのすべての請求および配信サイクルが実行されました。
  • CANCELED:契約が終了しました。予定外のお客様の行動により、契約が終了しました。
  • FAILED(失敗)。課金に失敗し、これ以上の課金が期待できないために契約が終了しました。

リクエスト例:

POST /admin/api/2021-01/graphql.json

query {
  subscriptionContracts(first: 10) {
    edges {
      node {
        id
        createdAt
        status
        nextBillingDate
        customer {
          firstName
          lastName
        }
        billingPolicy {
          interval
          intervalCount
        }
      }
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionContracts": {
      "edges": [
        {
          "node": {
            "id": "gid://shopify/SubscriptionContract/1",
            "createdAt": "2020-06-16T19:01:46Z",
            "status": "ACTIVE",
            "nextBillingDate": "2020-06-01T00:00:00Z",
            "customer": {
              "firstName": "John",
              "lastName": "Smith"
            },
            "billingPolicy": {
              "interval": "MONTH",
              "intervalCount": 3
            }
          }
        },
        {
          "node": {
            "id": "gid://shopify/SubscriptionContract/2",
            "createdAt": "2020-06-16T19:04:15Z",
            "status": "ACTIVE",
            "nextBillingDate": "2020-06-01T00:00:00Z",
            "customer": {
              "firstName": "Jane",
              "lastName": "Smith"
            },
            "billingPolicy": {
              "interval": "MONTH",
              "intervalCount": 3
            }
          }
        }
      ]
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 32,
      "actualQueryCost": 8
    }
  }
}

サブスクリプション・ドラフトの新規作成

subscription draftは、サブスクリプション契約を変更する意図をキャプチャします。アプリはサブスクリプション契約を段階的に構築できます。

subscription draft は、すべての更新が適用された契約の予測状態を取得する方法を提供します。購読契約は常に最新かつ正確であるべきであり、その結果、購読の報告、購読者へのメール配信、購読の変更に基づくフローの構築が可能になります。

購読と保存

次の例は、毎月の「Subscribe and save」サブスクリプションのための新しいサブスクリプションドラフトの作成を示しています(最低コミットメントは 3 回の注文)。

サブスクリプション契約に関連するエラーコードについては、SubscriptionDraftErrorCode を参照してください。

備考
subscriptionContractCreate ミューテーションを使用しても、支払い済みの既存のフルフィルメントには影響しません。既存の注文を編集するには、アプリは orderEditBegin ミューテーションを使用する必要があります。

リクエスト例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionContractCreate(
    input: {
      customerId: "gid://shopify/Customer/3963517010085"
      nextBillingDate: "2021-06-01"
      currencyCode: USD
      contract: {
        status: ACTIVE
        paymentMethodId: "gid://shopify/CustomerPaymentMethod/424359b3cecf1229e56697ab1e71b3d4"
        billingPolicy: { interval: MONTH, intervalCount: 1, minCycles: 3 }
        deliveryPolicy: { interval: MONTH, intervalCount: 1 }
        deliveryPrice: 14.99
        deliveryMethod: {
          shipping: {
            address: {
              firstName: "John"
              lastName: "McDonald"
              address1: "33 New Montgomery St"
              address2: "#750"
              city: "San Francisco"
              province: "California"
              country: "USA"
              zip: "94105"
            }
          }
        }
      }
    }
  ) {
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}

JSON response:

{
  "data": {
    "subscriptionContractCreate": {
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/22"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 990,
        "restoreRate": 50
      }
    }
  }
}
プリペイド

プリペイド契約は、課金ポリシーよりも頻度の高い配信ポリシーを定義することで作成されます。次の例では、これらのポリシーを組み合わせて、毎月 3 回の配信を行うプリペイドサブスクリプションを定義しています。

サブスクリプション契約に関連するエラーコードについては、SubscriptionDraftErrorCodeを参照してください。

備考
subscriptionContractCreate ミューテーションを使用しても、支払い済みの既存のフルフィルメントには影響しません。既存の注文を編集するには、アプリは orderEditBegin ミューテーションを使用する必要があります。

リクエスト例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionContractCreate(
    input: {
      customerId: "gid://shopify/Customer/3963517010085"
      nextBillingDate: "2021-06-01"
      currencyCode: USD
      contract: {
        status: ACTIVE
        paymentMethodId: "gid://shopify/CustomerPaymentMethod/424359b3cecf1229e56697ab1e71b3d4"
        billingPolicy: { interval: MONTH, intervalCount: 3 }
        deliveryPolicy: { interval: MONTH, intervalCount: 1 }
        deliveryPrice: 14.99
        deliveryMethod: {
          shipping: {
            address: {
              firstName: "John"
              lastName: "McDonald"
              address1: "33 New Montgomery St"
              address2: "#750"
              city: "San Francisco"
              province: "California"
              country: "USA"
              zip: "94105"
            }
          }
        }
      }
    }
  ) {
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
Open/Hide response
{
  "data": {
    "subscriptionContractCreate": {
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/22"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 990,
        "restoreRate": 50
      }
    }
  }
}

購読ドラフトの更新

subscriptionDraftUpdate ミューテーションを呼び出して、サブスクリプションドラフトに変更を加えることができます。次の例では、配信ポリシーを 2 ヶ月ごとに変更しています。

リクエスト例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftUpdate(
    draftId: "gid://shopify/SubscriptionDraft/22"
    input: { deliveryPolicy: { interval: MONTH, intervalCount: 2 } }
  ) {
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionDraftUpdate": {
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/22"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 990,
        "restoreRate": 50
      }
    }
  }
}

購読ドラフトへの行の追加

subscriptionDraftLineAddミューテーションを呼び出して、購読ドラフトにsubscription lineを追加することができます。次の例では、数量と価格を持つ製品バリアントを指定するために、購読行が追加されています。

リクエストの例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftLineAdd(
    draftId: "gid://shopify/SubscriptionDraft/7"
    input: { productVariantId: "gid://shopify/ProductVariant/2", quantity: 20, currentPrice: 25.00 }
  ) {
    lineAdded {
      id
      quantity
      productId
      variantId
      variantImage {
        id
      }
      title
      variantTitle
      currentPrice {
        amount
        currencyCode
      }
      requiresShipping
      sku
      taxable
    }
    draft {
      id
    }
    userErrors {
      field
      message
      code
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionDraftLineAdd": {
      "lineAdded": {
        "id": "gid://shopify/SubscriptionLine/818b344f-1e7f-4b0e-9fc2-2b749d4b5494",
        "quantity": 20,
        "productId": "gid://shopify/Product/1",
        "variantId": "gid://shopify/ProductVariant/2",
        "variantImage": {
          "id": "gid://shopify/ImageSource/1474738389014"
        },
        "title": "Aerodynamic Wool Coat",
        "variantTitle": "Rustic Plastic Computer",
        "currentPrice": {
          "amount": "25.0",
          "currencyCode": "USD"
        },
        "requiresShipping": true,
        "sku": "",
        "taxable": true
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/7"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 11,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 989,
        "restoreRate": 50
      }
    }
  }
}

購読契約上の行の更新

subscriptionDraftLineUpdateミューテーションを呼び出して、サブスクリプションドラフト上の行を更新することができます。この例では、quantity10 に更新されています。

リクエストの例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftLineUpdate(
    draftId: "gid://shopify/SubscriptionDraft/229541"
    lineId: "gid://shopify/SubscriptionLine/9c952e0f-43df-4881-84a1-f720003c43a3"
    input: { quantity: 10 }
  ) {
    lineUpdated {
      id
      quantity
      productId
      variantId
      variantImage {
        id
      }
      title
      variantTitle
      requiresShipping
      sku
      taxable
    }
    draft {
      id
    }
    userErrors {
      field
      message
      code
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionDraftLineUpdate": {
      "lineUpdated": {
        "id": "gid://shopify/SubscriptionLine/9c952e0f-43df-4881-84a1-f720003c43a3",
        "quantity": 10,
        "productId": "gid://shopify/Product/5515510218917",
        "variantId": "gid://shopify/ProductVariant/35599671197861",
        "variantImage": {
          "id": "gid://shopify/ProductImage/18372397138085"
        },
        "title": "Shoes",
        "variantTitle": null,
        "requiresShipping": `true`,
        "sku": null,
        "taxable": `true`
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/229541"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 11,
      "throttleStatus": {
        "maximumAvailable": 5000,
        "currentlyAvailable": 4989,
        "restoreRate": 250
      }
    }
  }
}

購読ドラフト上の行の削除

subscriptionDraftLineRemove ミューテーションを呼び出し、lineId を与えることで、サブスクリプションドラフト上のサブスクリプションラインを削除することができます。

リクエストの例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftLineRemove(
    draftId: "gid://shopify/SubscriptionDraft/7"
    lineId: "gid://shopify/SubscriptionLine/cb0141b4-93fc-4dde-b6dc-53933b596b10"
  ) {
    lineRemoved {
      id
    }
    draft {
      id
    }
    userErrors {
      field
      message
      code
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionDraftLineRemove": {
      "lineRemoved": {
        "id": "gid://shopify/SubscriptionLine/cb0141b4-93fc-4dde-b6dc-53933b596b10"
      },
      "draft": {
        "id": "gid://shopify/SubscriptionDraft/7"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10
    }
  }
}

サブスクリプションのドラフトをコミットする

ドラフトサブスクリプションの状態に満足したら、それをコミットできます。ドラフトサブスクリプションをコミットすると、すべての変更が有効になります。

リクエスト例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionDraftCommit(draftId: "gid://shopify/SubscriptionDraft/22") {
    contract {
      id
    }
    userErrors {
      field
      message
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionDraftCommit": {
      "contract": {
        "id": "gid://shopify/SubscriptionContract/22"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 990,
        "restoreRate": 50
      }
    }
  }
}

定期サブスクリプション契約の詳細表示

顧客サブスクリプションカードと注文サブスクリプションカードのView subscriptionボタンを使うと、マーチャントはアプリに移動してサブスクリプション契約の詳細を見ることができます。

Shopify 管理画面の顧客ページ

Shopify 管理画面のオーダーページ

アプリ内でサブスクリプション契約にリダイレクトする

マーチャントを関連するサブスクリプション契約にリダイレクトするために、アプリは特定のエンドポイントを実装する必要があります。実装後、このエンドポイントは、subscription_contract_id で定義されたサブスクリプションについて、アプリ内のサブスクリプション契約ページにリダイレクトします。

View subscription link をカスタマイズするには、Partner Dashboard で Subscription link app extension を管理します。

リンク先の URL を変更したり、変更を保存したり、アプリの拡張機能がすでに存在する場合は削除したりすることができます。

View subscriptionリンクをカスタマイズしていない場合は、リンクがハードコードされています。ハードコードされたリンクの形式は次のとおりです。

{app_application_url}/subscriptions?customer_id={customer_id}&hmac={hmac}&id={subscription_contract_id}&shop={myshopify_domain}

購読契約の更新

顧客が支払い方法を更新したり、購読内容を変更したりした場合、適切な購読契約を更新する必要があります。

サブスクリプション契約を更新するには、subscriptionContractUpdate ミューテーションを使用し、サブスクリプション契約 ID を指定します。このコールは、契約の既存の状態を持つドラフトを返します。

リクエストの例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionContractUpdate(contractId: "gid://shopify/SubscriptionContract/22") {
    draft {
      id
    }
    userErrors {
      field
      message
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionContractUpdate": {
      "draft": {
        "id": "gid://shopify/SubscriptionContract/22"
      },
      "userErrors": []
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 990,
        "restoreRate": 50
      }
    }
  }
}

課金の試みの作成

サブスクリプションの課金をスケジュールして自動化するために、アプリは課金の試みを作成する必要があります。アプリが課金の試みを行うと、サブスクリプションが更新されます。

課金の試みは、サブスクリプション契約の課金サイクルを実行し、顧客の支払い方法に課金する試みを表します。課金の試みは、現在の状態で契約を実行し、課金の前にアプリの契約データが Shopify と同期していることを確認します。

ステータス

課金の試みは保留中のステータスで始まります。処理された後、成功または失敗のいずれかに移行しますが、どちらも最終的な状態です。

  • 課金の試みが成功した場合は、注文が作成されます。
  • 課金の試みが成功した場合、注文が作成されます。課金の試みが失敗した場合、トランザクションが失敗したことを意味します。

3D Secureに関してお客様側でアクションが保留されている場合、課金の試みがターミナル状態に移行する前に 3D セキュアチャレンジが発生する可能性があります。

通話例

課金試行を作成するために、subscriptionBillingAttemptCreate ミューテーションに以下の入力を指定する。

  • subscriptionContractId: サブスクリプション契約の ID。
  • subscriptionBillingAttemptInput
    • idempotencyKey。重複した支払いを避けるためにクライアントが生成した一意のキー。
    • test 可能であれば、支払いをテストモードで実行するかどうか。デフォルトは false です。true に設定すると、ペイメントゲートウェイのモードを無視します。false に設定すると、ペイメントゲートウェイのモードを使用します。

請求の試みは非同期に処理されます。つまり、結果として生じる注文はすぐには利用できません。注文が作成されたかどうか(true)、または注文が作成されていないかどうか(false)を知るために、請求の試みをフェッチして ready フィールドを検査することができます。

リクエストの例

POST /admin/api/2021-01/graphql.json

mutation {
  subscriptionBillingAttemptCreate(
    subscriptionContractId: "gid://shopify/SubscriptionContract/1"
    subscriptionBillingAttemptInput: { idempotencyKey: "abc123" }
  ) {
    subscriptionBillingAttempt {
      id
      errorMessage
      nextActionUrl
      order {
        id
      }
      ready
    }
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionBillingAttemptCreate": {
      "subscriptionBillingAttempt": {
        "id": "gid://shopify/SubscriptionBillingAttempt/32933",
        "errorMessage": null,
        "nextActionUrl": null,
        "order": null,
        "ready": false
      }
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 11,
      "throttleStatus": {
        "maximumAvailable": 5000,
        "currentlyAvailable": 4989,
        "restoreRate": 250
      }
    }
  }
}

注文はすぐにはできないので、SubScriptionBillingAttempt を照会して結果の注文情報を得ることができます。

リクエストの例

POST /admin/api/2021-01/graphql.json

query {
  subscriptionBillingAttempt(id: "gid://shopify/SubscriptionBillingAttempt/524310") {
    id
    errorMessage
    nextActionUrl
    order {
      id
    }
    ready
  }
}
Open/Hide response

JSON responce:

{
  "data": {
    "subscriptionBillingAttempt": {
      "id": "gid://shopify/SubscriptionBillingAttempt/32933",
      "errorMessage": null,
      "nextActionUrl": null,
      "order": {
        "id": "gid://shopify/Order/2014567596054"
      },
      "ready": `true`
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 2,
      "actualQueryCost": 2,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 998,
        "restoreRate": 50
      }
    }
  }
}

3D セキュアについて

Shopify では、金融機関がチャレンジを要求した際に、お客様にメールで通知することで 3D セキュアの認証を行います。このフローは以下の図で示されています。

図を隠す

nextActionUrlフィールドが利用可能になるまで、subscriptionBillingAttemptオブジェクトをポーリングして、URL を確認することができます。支払いに失敗した場合に再請求を試みるかどうかは、アプリ次第です。

備考
subscription_billing_attempts/success および subscription_billing_attempts/failure の Webhook は、チャレンジが完了するまでトリガーされません。顧客がチャレンジを完了しなかった場合、アプリには通知されません。

:::

図の表示

nextActionUrlフィールドが利用可能になるまで、subscriptionBillingAttemptオブジェクトをポーリングして、URL を確認することができます。支払いの試みが失敗した場合に再請求を試みるのはアプリ次第です。

備考
subscription_billing_attempts/success および subscription_billing_attempts/failure の Webhook は、チャレンジが完了するまでトリガーされません。顧客がチャレンジを完了しなかった場合、アプリには通知されません。

リクエストの例

POST /admin/api/2021-01/graphql.json

query {
  subscriptionBillingAttempt(id: "gid://shopify/SubscriptionBillingAttempt/123") {
    id
    errorMessage
    errorCode
    nextActionUrl
    order {
      id
    }
    ready
  }
}
Open/Hide response

JSON response:

{
  "data": {
    "subscriptionBillingAttempt": {
      "id": "gid://shopify/SubscriptionBillingAttempt/123",
      "errorMessage": null,
      "errorCode": null,
      "nextActionUrl": "https://example.com/subscriptions/billing/959c1a7cec286e06bfe7f16ff351c101/challenge",
      "order": null,
      "ready": false
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 2,
      "actualQueryCost": 2
    }
  }
}

サブスクリプション関連の webhook

アプリは、以下のサブスクリプション関連の webhook を購読できます。Webhook を設定して利用する方法については、Webhook を設定するを参照してください。

customer_payment_methods/create

説明

支払い方法が作成されたときに発行されます。

ペイロード

  {
    customer_id,
    token,
    instrument_type,
    payment_instrument,
  }

必要な範囲

read_customer_payment_methods

customer_payment_methods/update

説明

決済方法が更新されたときに発行されます。

ペイロード

  {
    customer_id,
    token,
    instrument_type,
    payment_instrument,
  }

必要な範囲

read_customer_payment_methods

customer_payment_methods/revoke

説明

支払い方法が取り消されたときに発行されます。

ペイロード

該当なし

必要な範囲

read_customer_payment_methods

subscription_contracts/create

説明

コントラクトが最初に作成されたときに発行されます。これは、注文が作成されるまで延期されます。

ペイロード

{
   admin_graphql_api_id,
   id,
   billing_policy,
   delivery_policy,
   admin_graphql_api_customer_id,
   customer_id,
   currency_code,
   status,
   admin_graphql_api_origin_order_id,
   origin_order_id
  }

必要な範囲

read_own_subscription_contracts

subscription_contracts/update

説明

コントラクトが更新されたときに発行されます。

ペイロード

    {
     admin_graphql_api_id,
     id,
     billing_policy,
     delivery_policy,
     admin_graphql_api_customer_id,
     customer_id,
     currency_code,
     status,
     admin_graphql_api_origin_order_id,
     origin_order_id
    }

必要な範囲

read_own_subscription_contracts

subscription_billing_attempts/success

説明

課金が成功したときに表示されます。

ペイロード

{
   id,
   admin_graphql_api_id,
   idempotency_key,
   order_id,
   admin_graphql_api_order_id,
   subscription_contract_id,
   admin_graphql_api_subscription_contract_id,
   ready,
   error_message,
  }

必要な範囲

read_own_subscription_contracts

subscription_billing_attempts/failure

説明

課金に失敗したときに表示されます。

ペイロード

  {
   id,
   admin_graphql_api_id,
   idempotency_key,
   order_id,
   admin_graphql_api_order_id,
   subscription_contract_id,
   admin_graphql_api_subscription_contract_id,
   ready,
   error_message,
  }

この場合、order_idnullの場合があります。error_messageが入力されます。

必要な範囲

read_own_subscription_contracts

subscription_billing_attempts/challenged

説明

金融機関が 3D セキュアによるサブスクリプション課金の試みの料金に異議を唱えたときに発行されます。

ペイロード

  {
   id,
   admin_graphql_api_id,
   idempotency_key,
   order_id,
   admin_graphql_api_order_id,
   subscription_contract_id,
   admin_graphql_api_subscription_contract_id,
   ready,
   error_message,
  }

必要な範囲

read_own_subscription_contracts

次のステップ

定期サブスクリプションの割引を作成・管理する:パーセント割引、定額割引、送料無料割引など、さまざまな種類の割引を定期サブスクリプションに適用する方法をご紹介します。

定期サブスクリプションの配送料と配送方法の作成と管理:定期サブスクリプションの配送方法を更新する方法と、チェックアウト時にお客様に表示される配送料について説明します。

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

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