決済の設定 — そして、静かにお金を失う 1 つの手順
決済の認証情報は サーバー側のみ です。それらはマシン上の .env に置かれ、決してデータ
ベースにも、フォームにも、この管理画面にも入りません。これは意図的です。以下は、各値がどこに
入るか — そして、見落としやすく、見落とすと高くつく 1 つの手順 — です。
飛ばすとお金がかかる手順
インドネシアの決済方法のほとんどは 非同期 です。買い手は仮想口座、e ウォレット、または 小売店での支払いを選び、それから タブを閉じます。1 時間後に、銀行アプリから、別のデバイスで 支払いを終えるかもしれません。それに関する何も、あなたのウェブサイトには決して戻ってきません。
なので購入は、プロバイダーが あなたの サーバーを呼び出すこと — ウェブフック — によって、 そしてそれ以外の何によってでもなく、完了します。
その呼び出しが決して届かなければ:
- 買い手のお金はあなたに届き、
- そのライセンスは決して発行されず、
- 注文は「保留」のまま留まり、
- そしてどこにも理由が書かれません。
これはめったにない例外的ケースではありません。インドネシアの決済方法では、これが 通常の 経路です。
各プロバイダーはどこで URL を得るか
| プロバイダー | ウェブフック URL | 誰が設定するか |
|---|---|---|
| Xendit | https://yourdomain/webhooks/xendit |
あなたが手で、1 度 |
| PayPal | (なし) | 不要 — 戻ってきたときに完了します |
PayPal は買い手が戻ってきたときに完了するので、ウェブフックはまったく要りません。Xendit があなたを 必要とする 1 つです — 以下を参照してください。
Xendit があなたを必要とする 1 つです。 その「請求書支払い済み」コールバックは請求書ごとでは なくアカウント全体なので、Xendit 自身のダッシュボードで 1 度だけ設定します。
Xendit、クリックごとに
- dashboard.xendit.co でサインインします。
- Settings → Developers → Webhooks。
- Invoices paid の下に、管理ページが Xendit 用に表示する URL
(
https://yourdomain/webhooks/xendit)を貼り付けます。 - 保存し、同じページに表示される webhook verification token をコピーします。
- そのトークンを、サーバーの
.envにXENDIT_CALLBACK_TOKENとして、XENDIT_SECRET_KEYと 並べて入れます。 - 新しい値が読まれるよう、サイトを再起動します。
両方の半分が必要です。トークンなしの URL は、配信は届くが拒否されることを意味します。URL なしの トークンは、そもそも何も届かないことを意味します。
本当に動くことを証明する
「貼り付けました」を信用しないでください。管理者 → 設定 → 決済ウェブフック を開いてください。 実際にサーバーに届いたものを報告します。
| 表示 | 意味 | すべきこと |
|---|---|---|
| 一度も受信していない | このプロバイダーから何も届いたことがありません | プロバイダーのダッシュボードで URL が欠けているか誤っています |
| 一致しない | 配信は届くが、あなたのどの注文も名指ししません | URL があなたを指していますが、ストアが使うのとは 別の プロバイダーアカウントからです |
| 動作中 | 少なくとも 1 つの配信が実在の注文に一致しました | 何も — 配線は完了しています |
カウンターは、プロバイダー自身の認証情報を運ぶ呼び出しに対してのみ動くので、インターネットからの 無作為な探りが、未設定のゲートウェイを健全に見せることは決してできません。
本物のお金を受け取る前に、エンドツーエンドでテストしてください。 Xendit のダッシュボードには
同じページに「test webhook」ボタンがあります。それを使い、管理カードを再読み込みしてください。
それでも 一度も受信していない と表示されるなら、URL が誤っています — 打ち間違い、抜けた
https://、末尾のスラッシュがないか確認してください。
認証情報そのもの
これらを設定する方法は 2 つあります。どちらもシークレットを見えないところに保ちます — どちらも 保存された値を決して表示しません。
管理ページから(推奨)
管理者 → 設定 → 決済ゲートウェイの認証情報。 PayPal Client ID + Secret(および sandbox/live の
切り替え)と、Xendit Secret Key + Callback token を入力します。それらはサーバー上に 暗号化 して
保存されます。フィールドは書き込み専用なので、いったん保存すると二度と表示されません — ページは
Configured / Not set だけを示します。フィールドを空のままにすると変更されません。1 つをクリア
するには Remove stored credentials を使います。
1 度きりのセットアップ: それらを暗号化するキーを生成します。アプリキーとは 別 に保つので、
データベースのダンプと .env の漏洩が、それぞれ単独では無意味になります:
php artisan store:secrets-key # writes STORE_SECRETS_KEY to .env — then BACK IT UP off the server
php artisan config:clear
STORE_SECRETS_KEY を失うと、保存された認証情報は読めなくなります(単に入力し直すことになります)。
あるいは .env から(代替)
お好みなら、代わりにサーバーの .env に設定し、それから再起動します。両方が存在する場合は、
管理ページの値が優先されます。
# Xendit
XENDIT_SECRET_KEY=...
XENDIT_CALLBACK_TOKEN=... # from Settings → Developers → Webhooks
# PayPal
PAYPAL_CLIENT_ID=...
PAYPAL_SECRET=...
PAYPAL_ENV=sandbox # or: live
認証情報のないゲートウェイは単にオフになります — 有効にすべき他のものはありません。
サーバーがプロキシやファイアウォールの背後にある場合
ウェブフックの経路は 公開の、サーバー間 の URL です。必然的にログインを持ちません — プロバイダーはあなたとしてログインできません。代わりに、プロバイダー自身の署名またはトークン、 プロバイダーから直接支払い状態を権威的に読み直すこと、そしてレート制限によって保護されています。
つまり POST /webhooks/* は公開インターネットから到達可能でなければなりません。これをブロック
したり、サイト全体を IP 許可リストの背後に置いたりすると、非同期決済は履行されなくなります —
URL をまったく設定しなかったときとまったく同じ静かな症状で。