核心要約
AIに決済機能を任せるとき、最も危険なプロンプトは単に「決済を付けて」と依頼することです。決済はお金を受け取るコードではなく、お金の流れに責任を持つ運用・会計・カスタマーサポートのシステムです。
技術的には、決済画面連携、承認 API 呼び出し、Webhook 受信、注文保存をAIが素早く実装できます。しかし、次の方針が決まっていなければ、実際のサービスでは幽霊注文、二重決済、返金遅延、カスタマーセンターの問い合わせ急増、法的告知漏れの問題が発生する可能性があります。
| 決定領域 | 事前に決めるべき質問 | 失敗時のリスク |
|---|---|---|
| 注文状態 | 注文はどの状態をどの順序で通過するのか? | 決済はされたが注文がない幽霊注文が発生 |
| 返金期限 | 申込み撤回と返金処理期限をどのように反映するのか? | 法定期限違反、遅延利息、紛争リスク |
| 部分返金 | 一部商品の返品、クーポン、配送料をどのように計算するのか? | 運用担当者が毎回手動計算、顧客の不信 |
| 二重決済 | 同じ注文に決済が二度計上されないよう、どう防ぐのか? | カード明細基準での顧客不満、信頼低下 |
| 失敗案内 | 限度額超過、残高不足、認証失敗をどのように案内するのか? | 再試行コンバージョン率の低下、不要な問い合わせ増加 |
| 決済履歴 | 顧客は決済と返金の状態をどこで確認するのか? | カスタマーセンターへの問い合わせ増加、状態の不透明化 |
| 返金告知 | 返金規定とキャンセルボタンをどこに配置するのか? | ダークパターン論争、規制リスク |
1. 注文状態設計:状態こそが運用言語である
決済機能を作るとき、注文状態を「注文完了」だけにしてはいけません。実際の注文は、決済試行、承認、キャンセル、返金、失敗、期限切れのような複数の段階を経ます。
推奨状態の例
| 状態コード例 | 顧客に表示される状態 | 意味 |
|---|---|---|
payment_pending |
決済待ち | 注文は作成されたが決済が完了していない |
paid |
決済完了 | 決済承認が完了し、注文が有効である |
payment_failed |
決済失敗 | 決済試行が失敗し、再試行可否を判断する必要がある |
cancel_requested |
キャンセル申請 | 顧客がキャンセルを申請し、処理待ちである |
cancelled |
キャンセル完了 | 決済前の注文キャンセル、または承認取消が完了した |
refund_requested |
返金申請 | 決済後の返金申請が受け付けられた |
refund_processing |
返金処理中 | 返金承認または決済手段への返金処理中である |
partially_refunded |
部分返金完了 | 注文金額の一部のみが返金された |
refunded |
返金完了 | 返金処理が完了した |
expired |
注文期限切れ | 決済待ち時間が過ぎ、注文が無効化された |
状態設計の原則
- 注文状態と決済状態を完全に同じものとは見なしません。注文は存在するが決済が失敗することもあり、決済は承認されたが注文保存が失敗することもあります。
- すべての状態変更には、発生時刻、処理者、理由、決済取引識別子、返金取引識別子を残します。
- 顧客画面、管理者画面、カスタマーセンターの対応文言が同じ状態定義を使用する必要があります。
- 状態遷移は一方向に設計し、例外復旧は別途管理者権限で記録を残して処理します。
2. 申込み撤回と法定返金期限:方針ではなく法的要件である
韓国で消費者向け電子商取引を運営するなら、電子商取引等における消費者保護に関する法律を考慮する必要があります。一般的に消費者は一定期間内に申込み撤回を行うことができ、事業者は返金要請または返還手続きの後、定められた期限内に代金を返金しなければなりません。
実務で特に重要な基準は次のとおりです。
- 消費者は原則として、財貨などの供給を受けた日など、法律で定められた基準日から7日以内に申込み撤回を行うことができます。
- 事業者は返金事由が発生した後、法定期限内に代金を返金しなければならず、遅延した場合は遅延賠償金または遅延利息の問題が生じる可能性があります。
- デジタルコンテンツ、オーダーメイド商品、使用により価値が著しく減少する商品などは例外になり得ますが、例外を適用するには事前告知と同意などの要件を慎重に確認する必要があります。
- 実際の適用は、商品類型、契約方式、消費者に提供した告知、使用開始の有無によって変わり得るため、法務レビューが必要です。
開発要件に変える方法
法的基準は約款文言にだけ書いておくだけでは不十分です。システム要件にも変える必要があります。
| 法・方針上の要件 | システム要件 |
|---|---|
| 7日以内の申込み撤回可否判断 | 注文受領日またはサービス提供日を基準に返金可能期間を自動計算 |
| 3営業日以内の返金処理が必要 | 管理者画面に返金申請日と処理期限を表示 |
| 返金遅延リスク | 期限間近、期限超過の通知を表示 |
| 例外商品の告知が必要 | 決済前に返金制限商品であることを明確に表示し、同意ログを保存 |
| 紛争対応が必要 | 約款バージョン、告知時刻、同意時刻、顧客 IP またはアカウントログを保管 |
3. 部分返金ルール:クーポン、配送料、税金を事前に定義する
部分返金は全体キャンセルよりはるかに複雑です。複数の商品を一度に注文した後、一部だけ返品する場合、もともと適用された割引と配送料をどのように分けるかを決める必要があります。
必ず決めるべき項目
- 商品別の決済金額をどのように配分するのか
- 注文全体クーポンを商品別に比例配分するのか
- 特定商品クーポンは該当商品にのみ適用するのか
- 送料無料条件が満たされなくなったとき、配送料を差し引くのか
- 顧客都合の返品配送料と商品不良の返品配送料をどのように区別するのか
- ポイント、積立金、ギフトカード決済分をどの順序で返金するのか
- 部分返金後、税金計算書、現金領収書、領収書表記をどのように変更するのか
部分返金計算の例
| 項目 | 金額 |
|---|---|
| A 商品 | 30,000ウォン |
| B 商品 | 70,000ウォン |
| 注文全体クーポン | -10,000ウォン |
| 実際の決済金額 | 90,000ウォン |
クーポンを商品金額の比率で配分すると、A 商品には3,000ウォン、B 商品には7,000ウォンの割引が配分されます。このとき A 商品だけを返金する場合、返金基準金額は30,000ウォンではなく27,000ウォンです。送料無料条件、返品配送料、決済手段別の返金制限があれば、最終返金額はさらに変わる可能性があります。
正解は一つではありません。重要なのは、一貫したルールを事前に定め、顧客が決済前または返金申請前に理解できるよう告知することです。
4. 二重決済防止:ボタン無効化だけでは不十分である
二重決済は、顧客が最も早く発見する決済事故です。顧客はサービス内部の注文状態よりも、カード承認メッセージとカード明細を先に見ます。同じ注文が二度決済されると、信頼は大きく低下します。
発生原因
- 顧客が決済ボタンを連続クリックする
- 決済直後に更新したり、戻るを押したりする
- モバイルネットワーク遅延により同じリクエストが再送信される
- 決済承認レスポンスは成功したが、サービスサーバーへの保存が失敗する
- Webhook とクライアントリダイレクトが同時に注文状態を変更する
防御設計
| 防御装置 | 説明 |
|---|---|
| クライアントのボタンロック | 決済ボタンのクリック後に再クリックを防ぐが、補助手段としてのみ使用 |
| サーバー側の注文ロック | 同じ注文 ID に対して決済承認リクエストが同時に実行されないよう処理 |
| 冪等性キー | 同じ決済リクエストを複数回送っても結果が一度だけ生成されるようにする識別子を使用 |
| 一意の取引番号 | 注文番号と決済取引番号の重複保存をデータベース制約条件で防止 |
| 状態ベース検証 | すでに paid の注文には追加承認リクエストを防止 |
| Webhook 重複処理 | 同じ Webhook イベントが複数回来ても状態変更が一度だけ起きるよう処理 |
AIに決済コードを依頼するときは、「重複クリック防止」ではなく「同一注文に対する決済承認と決済完了処理は冪等に動作しなければならない」と明示するのがよいです。
5. 決済失敗案内文言:失敗は事故ではなく正常な流れである
決済失敗は毎日発生する正常な状況です。限度額超過、残高不足、カード認証失敗、パスワードエラー、3D Secure 認証失敗、簡単決済アプリの無応答、ネットワークエラーはいずれもよくあるケースです。
悪い案内は「エラーが発生しました」で終わる文言です。顧客は決済されたのか、もう一度押してよいのか、注文が消えるのか分かりません。
案内文言の例
| 状況 | 推奨案内 |
|---|---|
| 残高不足 | 決済手段の残高が不足しているため、決済が完了しませんでした。別の決済手段を選択するか、残高を確認した後、もう一度お試しください。 |
| 限度額超過 | カード限度額または1回の決済限度額を超過したため、決済に失敗しました。カード会社のアプリで限度額を確認するか、別のカードで決済してください。 |
| 認証失敗 | 決済認証が完了しなかったため、注文は決済待ち状態で維持されます。30分以内に再度決済できます。 |
| ネットワークエラー | 決済結果の確認が遅れています。重複決済を防ぐため、しばらくしてから決済履歴をご確認ください。 |
| 注文期限切れ | 決済待ち時間が過ぎ、注文が期限切れになりました。商品を再度選択して注文してください。 |
失敗案内の核心要素
- 決済が実際に完了していないのかを明確に伝えます。
- 注文が維持される時間を知らせます。
- 再試行してよいのか、別の決済手段を使うべきなのかを案内します。
- カスタマーセンターに問い合わせる際に必要な注文番号を表示します。
- 決済結果が不確実な場合、無条件に再決済を誘導せず、確認中の状態を提供します。