前提条件
Dodo Payments APIを統合するには、次のものが必要です:- Dodo Paymentsのマーチャントアカウント
- ダッシュボードからのAPI認証情報(APIキーとWebhookシークレットキー)
API統合
チェックアウトセッション
Checkout Sessionsを使用して、セキュリティで保護されたホスト型チェックアウトでサブスクリプション商品を販売します。サブスクリプション商品をproduct_cart に渡し、返された checkout_url に顧客をリダイレクトしてください。
- Node.js SDK
- Python SDK
- REST API
APIレスポンス
以下はレスポンスの例です:checkout_url にリダイレクトします。
Webhook
サブスクリプションを統合する際、サブスクリプションライフサイクルを追跡するためのWebhookを受信します。これらのWebhookは、サブスクリプションの状態や支払いシナリオを効果的に管理するのに役立ちます。 Webhookエンドポイントを設定するには、詳細な統合ガイドに従ってください。サブスクリプションイベントタイプ
以下のWebhookイベントは、サブスクリプションの状態変更を追跡します:subscription.active- サブスクリプションが正常に有効化されました。subscription.updated- サブスクリプションオブジェクトが更新されました(任意のフィールドが変更されたときに発火します)。subscription.on_hold- 更新失敗によりサブスクリプションが保留されました。subscription.failed- マンダート作成中にサブスクリプションの作成が失敗しました。subscription.renewed- 次回請求期間に向けてサブスクリプションが更新されました。
支払いシナリオ
受信する webhook とそのタイミングは、商品に trial があるかどうかによって異なります。 即時請求(trial 日数 0 日):subscription.active: mandate が承認され、subscription が有効化されます。payment.succeeded: 初回 charge を確認します。checkout から 2〜10 分以内 に発生します。
- trial 開始時(checkout): 支払い方法が承認されると
subscription.activeが 1 回発生します。この時点では定期 charge は発生しません。 初回の実際の charge は trial 終了まで延期されます。 - trial 終了時: 定期金額が charge され、
payment.succeededと同時にsubscription.renewedを受信します。
subscription.renewed: 更新 payment が引き落とされる各 billing cycle で発生し、常にpayment.succeededと同時に送信されます。更新されたnext_billing_dateも含まれます。
subscription product に対して実際に金額が引き落とされるたびに、
subscription.renewed と payment.succeeded を受信します。次の cycle の access を延長するシグナルとして、payment.succeeded 単独ではなく subscription.renewed を使用してください。- Subscription Failure
subscription.failed- mandate の作成に失敗したため、subscription の作成に失敗しました。payment.failed- payment の失敗を示します。
- Subscription On Hold
subscription.on_hold- renewal payment または plan change charge の失敗により、subscription が on hold になります。- subscription が on hold になると、payment method が更新されるまで自動的には更新されません。
Best Practice: 実装を簡素化するため、subscription の lifecycle 管理では主に subscription event を追跡することをおすすめします。
subscription.failed と subscription.on_hold の違い
これら 2 つの event は混同しやすいものの、必要な対応は大きく異なります。
Subscription On Hold の処理
subscription がon_hold state になると、再有効化するために payment method を更新する必要があります。このセクションでは、subscription が on hold になるタイミングとその処理方法を説明します。
Subscription が On Hold になる場合
subscription は次の場合に on hold になります。- Renewal payment の失敗: 残高不足、カードの有効期限切れ、または bank decline により、自動 renewal charge に失敗した場合
- Plan change charge の失敗: plan の upgrade/downgrade 中に発生する即時 charge に失敗した場合
- Payment method の承認失敗: recurring charge に対して payment method を承認できない場合
On Hold の Subscription を再有効化する
on_hold state の subscription を再有効化するには、Update Payment Method API を使用します。これにより自動的に次の処理が行われます。
- 未払い残額に対する charge を作成
- charge の invoice を生成
- 新しい payment method を使用して payment を処理
- payment が成功すると、subscription を
activestate に再有効化
1
Handle subscription.on_hold webhook
subscription.on_hold webhook を受信したら、application state を更新し、customer に通知してください。2
Update payment method
customer が payment method を更新する準備ができたら、Update Payment Method API を呼び出します。
customer が payment method を保存している場合は、既存の payment method ID も使用できます。
3
Monitor webhook events
payment method を更新した後、次の webhook event を監視してください。
payment.succeeded- 未払い残額に対する charge が成功したsubscription.active- subscription が再有効化された
Subscription event payload の例
Subscription Plan の変更
change plan API endpoint を使用して、subscription plan を upgrade または downgrade できます。これにより subscription の product、quantity、および proration を変更できます。Change Plan API Reference
subscription plan の変更について詳しくは、Change Plan API documentation を参照してください。
Proration Options
subscription plan を変更する際、即時 charge の処理方法として 2 つの option があります。1. prorated_immediately
- 現在の billing cycle の残り時間に基づいて prorated amount を計算
- old plan と new plan の差額のみを customer に charge
- trial 期間中は user を直ちに new plan に切り替え、customer に即時 charge
2. full_immediately
- new plan の subscription amount 全額を customer に charge
- previous plan の残り時間や credit を無視
- billing cycle を reset したい場合や、proration に関係なく全額を charge したい場合に便利
3. difference_immediately
- upgrade すると、2 つの plan amount の差額が customer に即時 charge されます。
- たとえば、current plan が 30 Dollars で customer が 80 Dollars の plan に upgrade すると、$50 が即時に charge されます。
- downgrade すると、current plan の未使用 amount が internal credit として追加され、今後の subscription renewal に自動的に適用されます。
- たとえば、current plan が 50 Dollars で customer が 20 Dollars の plan に切り替えると、残りの $30 が credit として付与され、次の billing cycle に使用されます。
4. do_not_bill
- plan change を即時に適用しますが、変更時には 何も charge しません。
- 更新後の plan(および quantity/add-ons)は次回予定されている renewalで請求され、元の billing date は維持されます。
Behavior
- この API を呼び出すと、Dodo Payments は選択した proration option に基づいて直ちに charge を開始します
- plan change が downgrade で、
prorated_immediatelyを使用した場合、credit が自動的に計算され、subscription の credit balance に追加されます。これらの credit はその subscription 専用であり、同じ subscription の今後の recurring payment の offset にのみ使用されます full_immediatelyoption は credit の計算を bypass し、新しい plan の金額全額を charge します
Charge Processing
- plan change 時に開始される即時 charge は、通常 2 分未満で処理が完了します
- この即時 charge が何らかの理由で失敗すると、問題が解決するまで subscription は自動的に on hold になります
On-Demand Subscriptions
Create Subscription
サブスクリプション製品の作成およびサブスクリプションライフサイクルの管理に関する API リファレンス
Change Subscription Plan
プロレートオプションを使用したサブスクリプションプランのアップグレード、ダウングレード、または変更に関する API リファレンス
Update Payment Method
支払い方法の更新および保留中のサブスクリプションの再有効化に関する API リファレンス
Patch Subscription
サブスクリプション詳細および設定の更新に関する API リファレンス
on_demand field を含めます。これにより、即時 charge なしで payment method を承認するか、custom initial price を設定できます。
on-demand subscription に charge するには:
後続の charge には、POST /subscriptions//charge endpoint を使用し、その transaction で customer に charge する amount を指定します。
request/response の例、安全な retry policy、webhook handling を含む完全な step-by-step guide については、On-Demand Subscriptions Guide を参照してください。
Subscription Billing について知っておくべき重要事項
trial では charge ではなく $0 authorization が行われます。 subscription に trial がある場合、trial 開始時にカードを保存するための $0 mandate authorization が作成され、初回の実際の charge は trial 終了時に発生します。payments list では、trial 中の subscription に
amount: 0 を含む payment が正確に 1 件表示されます。Subscription lifecycle:
on_hold = renewal が失敗した状態(復旧可能: customer に payment method の更新を促します。dunning retry が適用されます)。expired = renewal されずに term が終了した状態で、再有効化できません。customer は再 subscription する必要があります。cancelled = customer または merchant によって終了された状態です。renewal failure の大半は Dodo の error ではなく、issuer-side decline(残高不足、カード declined)です。Related API Reference
Create Subscription
subscription product の作成と subscription lifecycle の管理に関する API reference
Change Subscription Plan
proration option を使用した subscription plan の upgrade、downgrade、変更に関する API reference
Update Payment Method
payment method の更新と on-hold subscription の再有効化に関する API reference
Patch Subscription
subscription details と configuration の更新に関する API reference