概要
継続決済(リカーリング)機能を使用すると、顧客のカード情報を安全に保存し、2回目以降の決済でカード入力なしに課金できます。サブスクリプションや定期課金に最適です。継続決済は一部のゲートウェイでのみ利用可能です。利用可否については担当者にお問い合わせください。
継続決済フロー
初回決済(カード保存)
初回決済時にsave_card: true と customer_id を指定してカードを保存します。
リクエスト
string
必須
顧客を識別する一意のID。加盟店側で管理するユーザーIDなどを指定してください。
boolean
必須
継続決済の初回では
true を指定してください。決済完了後にカード情報が保存されます。レスポンス
payment_type: "initial" は、このリクエストがカード保存を伴う初回決済であることを示します。payment_method_id は決済完了後の Webhook で受け取ってください。payment_url にリダイレクトして決済を完了させます。
決済完了時のWebhook
保存済みカードの確認
顧客の保存済みカードを一覧取得できます。レスポンス
継続決済の実行
保存済みのpayment_method_id を使用して、カード入力なしで決済できます。
リクエスト
string
必須
保存済みの決済方法ID(
pmi_xxx 形式)レスポンス
継続決済は即時処理されます(payment_url は返りません)。
payment_type: "recurring" は、保存済みカードを使用した継続決済であることを示します。決済完了時のWebhook(成功)
継続決済のWebhookでは
is_recurring: true が設定されます。決済失敗時のWebhook
継続決済が失敗した場合、payment.failed イベントが送信されます。error オブジェクトに失敗の詳細が含まれます。
error.recommended_action の値に応じて、適切な対応を行ってください。決済方法の管理
カードのブロック
不正利用の疑いがある場合など、特定のカードをブロックできます。ブロック解除
カードの削除(Detach)
顧客の要求によりカード情報を完全に削除する場合は、detachを使用します。レスポンス
ブロックと削除の違い:
- ブロック: 一時的に使用を停止(不正対策)。後でアンブロック可能
- 削除(Detach): 完全に削除(GDPR対応、顧客の削除要求)。復元不可
エラーハンドリング
継続決済がサポートされていない場合
カードの有効期限切れ
ベストプラクティス
1
customer_id を一意に管理
加盟店側のユーザーIDと
customer_id を1対1で紐付けてください。同じ顧客に異なる customer_id を使用すると、カード情報が分散してしまいます。2
payment_method_id を永続化
Webhookで受け取った
payment_method_id をデータベースに保存し、次回以降の決済に使用してください。3
失敗時のリトライ戦略
カード決済は一時的なエラーで失敗することがあります。指数バックオフでリトライし、複数回失敗した場合は顧客に通知してください。
4
有効期限の管理
保存済みカードの有効期限を監視し、期限が近づいたら顧客にカード更新を促してください。