第 10 章 / 全 27 章
コンビニ決済
コンビニ決済 は、加盟店サイトで「コンビニ」を選んだ顧客に 13 桁の受付番号 と 支払期限 を発行し、店頭(レジ・店内端末)での支払いを待つ決済手段です。銀行振込と同じく取引テーブル(Payment)の 1 行として扱い、新しいテーブルは持ちません。
取引の項目
| 項目 | 説明 |
|---|---|
| 支払店舗 | セブン-イレブン / ローソン / ファミリーマート / ミニストップ / その他。作成時に顧客(または管理画面)が選びます |
| 受付番号 | 13 桁の数字(先頭は 0 以外)。一意で、一覧・詳細・横断検索に表示します |
| 支払期限 | 申請から 加盟店設定の日数(既定 3 日、1〜30 日)。銀行振込の振込期限と同じ列を使います |
| 支払日時 | 店頭で支払われた(入金通知を受け取った)日時 |
ライフサイクル
| 状態 | 意味 | 次の操作 |
|---|---|---|
支払待ち(awaiting_payment) | 受付番号を発行し、店頭での支払いを待っている。申請中(pending)とは別の独立したステータス | 入金消込 / キャンセル / 失敗 / 期限切れ(期限超過時) |
| 完了 | 店頭で支払われた | 返金 / 領収書 |
| 期限切れ | 期限までに支払われなかった | 期限後に届いた入金通知は未消込入金に保留され、「期限後入金として消込」で完了にできる(決済申請) |
決済申請一覧では、支払待ちのコンビニ決済は 振込待ちの銀行振込と同じ並び(期限が近い順に先頭、期限超過は赤)で表示し、「支払待ち」バッジを付けます。
入金通知(店頭で支払われたとき)
コンビニ決済ネットワークからの入金通知は POST /api/demo/cvs-notify が受け取り、銀行振込の入金消込と同じ処理(deposit アクション)で取引を完了にします。金額が不足していれば支払待ちのまま「不足」を記録します。
POST /api/demo/cvs-notify
Authorization: Bearer <DEPOSIT_NOTIFY_SECRET>
{ "eventId": "cvs-evt-0001", "receiptNo": "4102993827716", "mode": "test" }- 認証は銀行の入金通知と同じ
DEPOSIT_NOTIFY_SECRETです。未設定なら本番以外で無認証、本番では 404 になります mode(test/live)は 必須 です。取引の環境と一致しない通知は消込されず未消込入金(理由「環境不一致」)に保留されます。eventId(任意、128 文字以内)が同じ通知の再送は 200{ duplicate: true }で再適用されません。受信した通知はすべて 入金通知ログ に残ります- 完了時は加盟店へ
payment.completedの Webhook と、顧客へ決済完了メールを送ります - 決済リンクページの「店頭で支払い済みにする(デモ)」ボタンも同じ処理を呼びます
期限切れと通知
- cron(
/api/cron/expire-transfers。デモの Vercel では 1 日 1 回、本番運用では毎時を推奨)が、期限を過ぎた支払待ちの受付番号を 期限切れ にします(銀行振込と同じ処理)。申請一覧の 期限超過 タブで、期限を過ぎたがまだ期限切れになっていない取引を確認できます - 通知センターには日次で「コンビニ支払期限超過」(
cvs.overdue)が 1 通届きます(admin / accounting / cs)
顧客向けの案内
- 作成時にメールテンプレート コンビニ支払案内(
cvs_guide)を送信ログに記録します(支払店舗・受付番号・金額・期限) - 決済リンクページでは支払店舗を選択でき、作成後に受付番号と期限を表示します
加盟店設定
加盟店詳細 → 契約・手数料タブの「期限の設定」に コンビニ支払期限(日) があります(権限: admin / accounting)。