カード情報を自分で持たない設計から、Customer・Price・Checkout、Webhook の署名検証と冪等性、支払い失敗と解約、そしてライブへの切り替えと売上の突き合わせまで。全30レッスンで「画面の戻りを信用せず、Webhook で課金の状態を正しく保てる」ところまで進みます。コードとテスト結果は Django 6.1.1・stripe 15.6.1 と Stripe 公式の stripe-mock で実際に動かしたもので、本物の鍵も課金アカウントも要りません。
全30レッスンを6つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ Django と stripe-python はブラウザ内で実行できないため、手元の仮想環境と stripe-mock で試してください。署名の計算や鍵の点検など、標準ライブラリだけで書ける部分はブラウザ上でそのまま実行できます。
カード情報を自分で持たない設計を最初に決め、テストモードと本番モードの違い、Customer・Product・Price・Subscription の 4 つのオブジェクトを押さえます。最後は購読が指す price から自サイトのプランを逆引きする対応まで作ります。
自サイトのプランを rank と動画の二軸で定義し、利用者と Stripe の顧客を ID で結んで、Checkout Session から決済画面へ送り出します。最後は client_reference_id で「支払ったのは誰か」を確定させるところまで進みます。
画面の戻りを信用せず反映を Webhook に一本化する理由から入り、署名検証・改ざんとリプレイの拒否・冪等性・再送の扱いを 1 つずつ固めます。最後は stripe listen を使い、本番の前に手元で通知を受け取れるようにします。
購読の開始から、アップグレードと解約予定、支払い失敗の past_due、解約で free へ戻すまでを、届く Webhook ごとに反映します。最後は解約や変更を利用者自身に任せる顧客ポータルを開きます。
クーポンと割引、請求書から今期の終わりを読む方法、法人向けの別線、特定商取引法の表記と、課金の周りで必ず出てくる実務を扱います。最後は特商法の必須項目の抜けを機械で見つけられるようにします。
テストからライブへの切り替えを機械で点検し、鍵の管理と漏洩したときの手順を決めます。最後は Stripe を正として自サイトのプランとのズレを拾う、売上の突き合わせでコースを締めくくります。
全30レッスンを終えたら、次は課金できるようになったサービスを世に出して回す サービス公開と運用 へ。メンバーシップで全コースが解放されます。