- プロプラン以上をご契約頂いている場合、契約更新のためのAPIを利用可能です。
- 契約更新APIをご利用いただくと、Shopifyストア内からログイン中の顧客の契約を取得し、該当の契約のステータスを変更することができます(解約や、一時停止、再開など)
実装コード
実装をするためには、sengineinitというwindowイベントのリスナーを噛ませたうえで、そこから契約一覧を取得してください。取得した契約一覧の「id」という項目を使い、契約の一時停止・再度有効・終了(キャンセル)をすることができます。
<script>
window.addEventListener('sengineinit', () => {
// 契約一覧取得
window.subscriptionApi.getContracts().then((data) => {
console.log('getContracts');
console.log(data);
}).catch((error) => {
console.error(error);
});
// 契約を一時停止
// window.subscriptionApi.updateContractStatus(contractId, 'PAUSED').then((data) => {
// console.log('updateContractStatus');
// console.log(data);
// }).catch((error) => {
// console.error(error);
// });
// 契約を有効化
// window.subscriptionApi.updateContractStatus(contractId, 'ACTIVE').then((data) => {
// console.log('updateContractStatus');
// console.log(data);
// }).catch((error) => {
// console.error(error);
// });
// 契約を終了 (キャンセル)
// window.subscriptionApi.updateContractStatus(contractId, 'CANCELLED').then((data) => {
// console.log('updateContractStatus');
// console.log(data);
// }).catch((error) => {
// console.error(error);
// });
});
</script>
契約データ
以下が契約データのオブジェクトのサンプル、となります。サンプルデータの後に、具体的なサンプルデータの説明を記載します。
{
"id":48,
"status":"ACTIVE",
"term":"DAY",
"interval":1,
"shopify_customer_id":"gid:\/\/shopify\/Customer\/6613147091171",
"shopify_contract_id":"gid:\/\/shopify\/SubscriptionContract\/28307194083",
"next_billing_date":"2024-06-26 01:37:24Z",
"customer_name":"test tar7",
"delivery_price_amount":1000,
"delivery_price_currency":"JPY",
"next_billing_time":1719365844,
"contract_base_date":"2024-06-25T01:22:49Z",
"payment_count":1,
"cancelled_at":null,
"line_discounted_price_amount":2000,
"current_price_amount":2000,
"quantity":1,
"current_price_currency":"JPY",
"data":{
"id":"gid:\/\/shopify\/SubscriptionContract\/28307194083",
"createdAt":"2024-06-25T01:22:49Z",
"updatedAt":"2024-06-25T01:30:08Z",
"status":"ACTIVE",
"nextBillingDate":"2024-06-26T01:00:00Z",
"billingPolicy":{
"interval":"DAY",
"intervalCount":1,
"maxCycles":null,
"minCycles":null,
"anchors":[
]
},
"customer":{
"id":"gid:\/\/shopify\/Customer\/6613147091171",
"firstName":"tar7",
"lastName":"test",
"displayName":"tar7 test",
"email":"shota.w@gmail.com",
"createdAt":"2023-02-08T06:13:02Z",
"image":{
"altText":null,
"originalSrc":"https:\/\/cdn.shopify.com\/proxy\/f918f665cf2d2ce6f265de412d6016182fa68c790abf9931ade81392a89f6e24\/www.gravatar.com\/avatar\/a8aa06ed94ba5f4035520a19fb9e9614.jpg?s=2048&d=https%3A%2F%2Fcdn.shopify.com%2Fshopifycloud%2Fshopify%2Fassets%2Fadmin%2Fcustomers%2Fpolaris%2Favatar-2-a0ee6e3fb3ae515b66b68388b265e5bd1e90646c4c72d59170518f45351e668b.png"
},
"defaultAddress":{
"address1":"\u5c0f\u77f3\u5ddd",
"address2":"",
"city":"\u6587\u4eac\u533a",
"country":"Japan",
"zip":"112-0002",
"name":"tar7 test",
"phone":null,
"company":"",
"province":"T\u014dky\u014d",
"provinceCode":"JP-13"
}
},
"billingAttempts":[
],
"orders":{
"edges":[
{
"node":{
"id":"gid:\/\/shopify\/Order\/5819332919523",
"email":"shota.w@gmail.com",
"name":"#1143",
"test":true,
"createdAt":"2024-06-25T01:22:48Z",
"confirmed":true,
"currencyCode":"JPY",
"currentTotalPriceSet":{
"presentmentMoney":{
"amount":"3000.0",
"currencyCode":"JPY"
}
},
"displayFinancialStatus":"PAID",
"displayFulfillmentStatus":"UNFULFILLED"
}
}
]
},
"lines":{
"edges":[
{
"node":{
"title":"muge4",
"sellingPlanName":"\uff11\u30f6\u6708\u306b\uff11\u56de",
"sellingPlanId":"gid:\/\/shopify\/SellingPlan\/4213440739",
"currentPrice":{
"amount":"2000.0",
"currencyCode":"JPY"
},
"lineDiscountedPrice":{
"amount":"2000.0",
"currencyCode":"JPY"
},
"pricingPolicy":{
"cycleDiscounts":[
{
"afterCycle":0,
"computedPrice":{
"amount":"2000.0",
"currencyCode":"JPY"
}
}
]
},
"requiresShipping":true,
"quantity":1,
"variantTitle":null,
"id":"gid:\/\/shopify\/SubscriptionLine\/37fb3b54-fb6b-4583-adf6-d6ea361d5e61",
"productId":"gid:\/\/shopify\/Product\/7960950931683",
"variantId":"gid:\/\/shopify\/ProductVariant\/43557323243747",
"variantImage":{
"originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/0636\/7592\/4707\/products\/ScreenShot2022-12-15at15.32.53.png?v=1671086315"
}
}
}
]
}
}
}
キー | 説明 | 備考 |
---|---|---|
id | 契約ID | 全システムの連番契約IDです。以後の関数ではこのidを使ってください。 |
status data.status | 契約ステータス | 現状の契約ステータスです。 ACTIVE: 有効 CANCELLED: キャンセル済 EXPIRED: 期限切れ(利用されません) FAILED: 支払い失敗済 PAUSED: 一時停止中 COMPLETED: 最大回数満了 |
term | サブスクの間隔の単位 | DAY: 日 WEEK: 週 MONTH: 月 YEAR: 年 |
interval | サブスクの間隔の数字 | interval=1でterm=MONTHの場合、毎月 interval=2でterm=MONTHの場合、2ヶ月に1回 |
shopify_customer_id | Shopify顧客ID | |
shopify_contract_id data.id | Shopify契約ID | |
next_bililng_date next_billing_time | 次の支払い日時 次の支払い日時のunixtime | ※data.nextBillingDateもほぼ同じですが、こちらの値を使うようにしてください。 |
customer_name | 顧客の名前 | |
delivery_price_amount delivery_price_currency | 配送金額 配送通貨 | 配送費を金額と、通貨で記載します (例: amount=1000, currency=JPYの場合、配送料は1000円) |
contract_base_date | 契約日(契約基準日) | このサブスク契約が開始した日付。更新の際の基準となる |
payment_count | 支払数 | このサブスク契約で行われた支払いの回数です(初回契約時に1、その後更新するたびに1ずつ増える) |
cancelled_at | キャンセル日時 | |
line_discounted_price_amount | ディスカウント後の金額小計 | |
current_price_amount | 金額小計 | |
quantity | 数量 | |
current_price_currency | 金額の通貨 | |
data.createdAt / data.updatedAt | Shopify上での契約作成日時・更新日時 | |
data.nextBillingDate | Shopify上での次の支払い日時 | |
data.billingPolicy | 支払い間隔データ | ※Shopifyの支払い間隔データは契約プラン変更時には変わらないため、このデータは使わず、term / intervalを使ってください |
data.customer | 顧客データ | ※Shopifyの顧客データのうち、必要なものを抽出したものとなります。適宜お使いください。 |
data.billingAttempts | 直近の成功した支払 | ※初回支払を除いた、成功した継続課金の履歴が出ます。件数は成功・失敗などが混在しているため数件程度となります。 |
data.orders | 直近で作成された注文 | ※初回支払を含めた、作成された注文のリストです |
data.lines | サブスクリプション内容行 | 同一のサブスクリプション契約内の商品の行一覧です。これらを使う場合、この内容が複数あることを前提としてUIを組んでください。 |