決済の接続
お金を受け取りたいなら、個人開発者にとっての標準的な道はStripeです(売上税を代わりに処理してほしいなら Lemon Squeezy / Paddle。登録代行業者()として、取り分は大きくなりますが税の頭痛を消してくれます)。仕組みは反復的でよく文書化されているので、委任するのに理想的です。必要な部品は次のとおりです。
- チェックアウトフロー。Stripe Checkout が最速で、ホストされた決済ページを渡してくれるので、生のカード情報に触れずに済みます。
- は、あなたのアプリが「もう支払いは通った?」と何度も尋ね続ける代わりに、売上が確定した瞬間に決済会社のほうからアプリに電話をかけてくれるようなものだと考えてください。Webhookはまさにそれで、決済プロバイダーが呼び出すエンドポイント(あなたのサーバー上の)であり、決済が実際に成功したことをアプリが知るためのものです。ここは初心者が省いてしまい、なぜ注文が処理されないのかと不思議がる部分です。あなたのサイトに戻るリダイレクトは閉じられたり、ブロックされたり、偽装されたりしえます。サーバー対サーバーの真実の源はWebhookです。リダイレクトだけを信用してはいけません。Webhookを信用しましょう。
- 権限を保存する方法。データベースでユーザーを「支払い済み」とマークします。そうすればリロードしても新しい端末でも、買ったものがちゃんと見えます。
肝心なのはどの矢印を信用するかです。あなたのサイトへ戻るユーザーのリダイレクトは失われたり偽装されたりしえます。製品を実際にアンロックするのは、サーバー対サーバーの線であるWebhookです。
┌──────┐ 1. 購入クリック┌───────────┐
│ユーザ│────────────────▶│ YOUR APP │
└──────┘ └─────┬─────┘
▲ │ 2. チェックアウト作成
│ ▼
│ ┌─────────────┐
│ 3. ホスト型で決済 │ STRIPE │
└───────────────────▶│ Checkout │
(カード情報) └──────┬──────┘
│
┌─────────────────────┴─────────────────────┐
│ 4a. リダイレクト戻り 4b. WEBHOOK 呼出 │
│ (消失/偽造の恐れ) (サーバ→サーバ,│
▼ 署名·信頼) ▼
┌──────────────┐ ┌────────────────────┐
│ サンクス │ ✗ ここで解除しない │ YOUR APP /webhook │
│ ページ(UIのみ)│ │ 署名を検証 → │
└──────────────┘ │ ユーザーをPAID化 ✓ │
└────────────────────┘
この3つすべてをAIにスキャフォールドさせ、Webhookの署名検証を説明させましょう。そこが唯一のセキュリティに敏感なステップだからです。それがなければ、あなたのWebhook URLを見つけた誰もが「決済成功」イベントを偽装して、製品をタダで解放できてしまいます。本番キーに切り替える前に、Stripeのテストモードでテスト用カード番号(4242 4242 4242 4242 が有名です)を使ってすべてをテストし、Stripe を使ってWebhookイベントをローカルマシンに転送し、発火する様子を見守りましょう。テストモードでの予行演習を省いてはいけません。アプリを通る最初の本物のお金は、すでに何十回も動くのを見た取引であるべきです。