オンライン決済を実装するとき、Stripe API が定番化しているのは機能の広さよりも「ドキュメントと SDK の完成度」による部分が大きい。各言語の公式 SDK、テストモード、エラー時の挙動の説明が整っていて、決済という失敗が許されない領域で実装の見通しが立てやすい。

カバー範囲

単発の Payment Intents / Checkout から、サブスクリプションと請求(Billing)、請求書発行、税計算、さらに Connect を使ったマーケットプレイス決済(プラットフォームが出品者へ売上を分配する形態)まで一通り揃う。SaaS のサブスク課金を組むなら、定期課金・プロレーション・支払い失敗時のリトライといった面倒な処理が API レベルで用意されている点が効く。

実装の進め方

Stripe を組むなら、Webhook の設計を後回しにしないことが要点だ。決済やサブスクの最終状態は非同期に確定するため、Checkout のリダイレクト完了だけでアカウントを有効化する設計は穴になる。「Webhook を受けて状態を確定する」前提でフローを組み、テストモードと Stripe CLI で異常系まで検証してから本番に出したい。

サブスク特有の難所

定期課金を組むと、単発決済にはない状態管理が必要になる。プラン変更時の日割り計算(プロレーション)、支払い失敗後のリトライと猶予期間(dunning)、解約のタイミング——これらはビジネスルールに直結し、Stripe が API レベルで用意していても「自社サービスでどう振る舞わせるか」の設計は利用側の責任だ。ここを曖昧にしたまま実装すると、課金トラブルや顧客対応の負担として後から表面化する。

料金構造

月額固定費は基本的になく、決済額ベースの手数料で、国内カードは標準で 3.6% 前後。固定費がない代わりに、取引が増えるほど手数料が積み上がる構造なので、想定取引額でコストを試算しておきたい。返金時の手数料の扱いや、海外カード・通貨変換の追加コストも、取引構成によっては無視できない差になる。

🔵
日本特有の決済が中心なら再検討を

銀行振込やコンビニ決済だけで足りる国内向けサービスでは、Stripe のグローバル・サブスク機能の多くが過剰になる。日本のカード決済に最適化された国内系サービスの方が、審査や日本語サポートの面で噛み合うことがある。

Webhook を実装しないと決済は完成しない

Stripe の実装で最も誤解されやすいのが、決済の完了をフロントエンドの戻り値で判定してしまう構成だ。3D セキュアの認証中にブラウザが閉じられる、通信が切れる、非同期の決済手段が使われる——といった経路では、フロントエンドは結果を受け取れない。決済の確定は Webhook で受け取るのが正しく、フロントの表示はあくまで暫定と扱うべきだ。

🔴
Webhook の署名検証と冪等性は必須です

署名検証をしないエンドポイントは、第三者が決済成功の通知を偽造できる状態になります。また Stripe は配信を再試行するため、同じイベントが複数回届きます。イベント ID を記録して処理済みを判定しないと、二重に商品を発送したり残高を加算したりする事故につながります。この2点はどちらも省略できません。

日本で使うときに追加で要る検討

決済は国内の商習慣と密接に関わる領域で、コンビニ決済や銀行振込といった日本固有の手段が要件に入ることがある。対応の可否と、その手段特有の入金タイミング(即時ではなく数日後に確定する)を業務フローに織り込む必要がある。返金・チャージバックの扱いも手段ごとに異なるため、カード決済の感覚だけで設計すると運用でつまずく。