はじめに
「決済を保留にしたい」という要望は、宿泊業でも物販でもよく出てきます。今すぐ請求はしたくないが、支払い能力は確認しておきたい。この気持ちはとてもよく分かります。
ただ、この「保留」を実現する方法は一つではありません。この記事では、宿泊予約という文脈で保留を実現しようとしたときに何が起きたか、そして最終的にどう解決したかを、順を追って説明します。
「保留」には2つの意味がある
与信保留とカード保存の違い
決済における「保留」には、性質のまったく違う2つの方法があります。
カードの利用枠を今押さえておき、後で確定させる。枠が減るので二重に使えない安心感がある
カード情報を安全に預かるだけ。枠は押さえないが、後日いつでも請求できる
直感的には与信保留のほうが安心に見えます。実際に検討を始めたときも、私はこちらを前提にしていました。しかし調べるほどに、宿泊予約では使えないことが分かってきました。
与信には有効期限がある
与信保留の最大の制約は、押さえた枠が永久には持たないことです。日本のアカウント・日本円の決済では最長30日、カードブランドによっては7日で期限を迎えます。
期限が来ると枠は自動的に解放され、その与信からは請求できなくなります。つまり「与信は取ったのに請求できない」状態になり、改めてお客様にカード情報を入力してもらうしかありません。
365日先の予約には使えない
この宿は最大365日先まで予約を受け付けます。予約日からチェックイン14日前まで与信を保持するには、最長で350日ほど枠を押さえ続ける必要があります。30日では到底足りませんでした。
延長のための仕組みも調べましたが、追加で金額を積み増す機能はあっても有効期限そのものを延ばすものではなく、また日本円の決済や一部カードブランドは対象外という制約もありました。ここで与信案は完全に諦めました。
カード保存という解決策
予約時にすることは登録と本人認証だけ
そこで選んだのが、カードを安全に保存しておき、必要な日に請求する方式です。決済サービスの機能としては「支払い」ではなく「カード登録」のモードを使います。
大事なのは、この登録時に本人認証(3Dセキュア)を必ず通すことです。カード会社に対して「利用者本人が、今後の継続的な請求に同意した」という記録が残り、後日お客様が画面の前にいない状態での請求が正当なものとして扱われます。
この一手間を省くと、14日前の自動課金が「本人確認ができない」という理由で拒否される事態が起きます。
自社に残すのは下4桁だけ
カード番号そのものは決済サービス側で保管され、自社のデータベースには渡ってきません。保存するのは「どのカードか」を示す識別子と、お客様に見せるためのブランド名(VISAなど)と下4桁だけです。
カード情報を自社で持たない。これは実装が楽になるだけでなく、万一の情報漏洩時のダメージを根本から下げてくれます。
自動課金はどう動くのか
毎晩0時に対象を探す
課金は、毎日深夜0時に動く定期処理が担当します。「今日が課金予定日の予約」を探して、順に請求していきます。
課金予定日が今日以前で、まだ請求していない予約を探す
予約管理システムから最新の請求残高を取得する
キャンセルされていないか、金額が異常でないかを点検
保存済みカードへ請求し、結果を記録
お客様に領収メール、運営者に日次レポートを送信
対象の探し方には工夫があります。「課金予定日が今日と一致する」ではなく「今日以前」で探すのです。定期処理が何らかの理由で1日動かなかった場合、一致で探すとその日の分が永久に取り残されてしまうからです。
請求額は予約管理システムから取り直す
請求する金額は、予約時にお客様が同意した金額をそのまま使う — わけではありません。予約後に運営者がオプションを追加したり、料金を調整したりすることがあるためです。
そこで課金の直前に、予約管理システムから現時点の請求残高を取得して、その額を請求します。予約管理システムが金額の正本、というルールをここでも貫いています。
異常な金額は請求せず、人を呼ぶ
金額を外部から取ってくる以上、システムの不具合で桁が違う数字が返ってくる可能性はゼロではありません。30万円のはずが300万円になっていたら、大事故です。
そこで「予約時の金額の3倍を超える請求」や「0円以下の請求」を検出したら、課金を中止して運営者にアラートメールを送る仕組みを入れました。判断に迷ったら止めて人を呼ぶ。金額に関わる自動処理では、この保険が欠かせません。
失敗しても自動で再試行しない
カードの残高不足などで請求が失敗したとき、自動でリトライはしません。何度も試すとカード会社側で不正利用と判定されることがありますし、そもそも原因を解消しないまま繰り返しても通りません。
失敗したら1度だけ運営者にアラートを送り、あとは管理画面の「今すぐ請求」ボタンから人が判断して再実行します。失敗の通知は1回だけ、再試行は人の判断で。この割り切りが運用を楽にしてくれます。
まとめ
決済の「保留」を実現するにあたって重要だったのは、次の3点です。
- 与信には期限がある — 日本円では最長30日。遠い日程の予約では使えない
- カード保存+本人認証 — 登録時に3Dセキュアを通すことで、後日の請求が通るようになる
- 異常時は止めて人を呼ぶ — 金額の異常検知と、失敗時の自動リトライ禁止
決済の状態管理については「Webhookとステータス管理で作る壊れない決済フロー」で、金額の守り方については「価格改ざん・二重課金を防ぐ決済セキュリティ」で解説しています。