このガイドのゴール
- SaaS やECサイトに決済機能を導入する際の判断基準を理解する
- Stripe と PAY.JP の特性・審査プロセス・実装パターンを比較する
- サブスクリプション・Webhook・PCI DSS 対応の実装方針を固める
決済 API の選定は「どちらが良いか」ではなく「自分のビジネスに合うのはどちらか」の問題です。グローバル展開と国内特化では、要件が根本的に異なります。
選定の判断基準
| 観点 | Stripe | PAY.JP |
|---|---|---|
| 対応通貨 | 135+ 通貨 | JPY のみ |
| 決済手段 | カード / コンビニ / 銀行振込 / Apple Pay / Google Pay 他 | カード中心 |
| サブスクリプション | 多機能(従量課金・段階料金・トライアル) | 基本的な定期課金 |
| マーケットプレイス | Stripe Connect で対応 | 非対応 |
| ドキュメント | 英語中心(日本語あり)。量と質ともに業界随一 | 日本語。簡潔でわかりやすい |
| 審査 | 事業内容により 1〜数週間 | 数日〜1 週間程度 |
| SDK | 全主要言語対応 | Ruby / PHP / Python / Java / Node.js |
| 手数料体系 | 3.6%(国内カード)。業種・取引量で交渉可 | 3.0〜3.6%(プランによる) |
上記の手数料は標準レートです。月間取引額が大きい場合はどちらのサービスも個別交渉で料率引き下げが可能です。公式サイトの料金ページで最新情報を確認してください。
アーキテクチャ: 決済フローの全体像
クライアント側の JS ライブラリ(Stripe.js / payjp.js)でトークン化し、サーバにはトークンだけを送ります。カード番号をサーバ経由にすると PCI DSS の SAQ D(最も厳格な監査レベル)が必要になり、現実的ではありません。
Webhook の実装
決済 API からの非同期通知(Webhook)は、決済の信頼性を確保するために不可欠です。
必ず処理すべきイベント
| イベント | 処理内容 |
|---|---|
charge.succeeded / payment_intent.succeeded |
サービスの利用権を付与 |
charge.failed |
ユーザーへの通知・リトライ案内 |
charge.refunded |
返金処理・利用権の取消 |
customer.subscription.deleted |
サブスク解約処理 |
invoice.payment_failed |
支払い失敗の通知・猶予期間の開始 |
Webhook 実装のポイント
- 署名検証を必ず行う — リクエストが本当に決済 API から来たか確認(リプレイ攻撃防止)
- 冪等性を確保する — 同じイベントが複数回届いても二重処理しない設計にする
- 5 秒以内に 200 を返す — 処理に時間がかかる場合はキューに入れて即座にレスポンス
- ログを残す — 受信したイベントを全件ログに記録(トラブル時の調査用)
サブスクリプション課金の設計
API のレスポンスではなく Webhook の payment_intent.succeeded をトリガーにしてください。API レスポンスは通信障害で受け取れない場合があります。Webhook はリトライされるため信頼性が高くなります。
Stripe の場合
Stripe は Subscription + Price + Product の 3 モデルで定期課金を管理します。従量課金(metered billing)や段階料金(tiered pricing)にも対応しており、SaaS の複雑な料金体系を API だけで実現できます。
PAY.JP の場合
PAY.JP は Plan + Subscription のシンプルな 2 モデル構造です。固定額の月次・年次課金が中心で、従量課金が必要な場合は自前でメーター計算を実装し都度課金する構成になります。
審査対応
決済 API を本番利用するにはサービス審査が必要です。
- 事業内容の説明: サービスの内容、ユーザーへの提供物を具体的に記載
- 利用規約・特商法表記: 法的に必要な表記を事前に準備
- テスト環境の URL: 審査担当者が実際の決済フローを確認できるようにする
- 想定取引量: 月間の取引件数・金額の見込みを提示
Stripe は事業内容によっては追加書類を求められることがあり、審査期間が長くなるケースもあります。PAY.JP は国内サービスとして審査プロセスが比較的シンプルですが、業種によっては利用不可な場合もあります。
本番チェックリスト
- カード情報は クライアント側でトークン化(サーバ非経由)
- Webhook の 署名検証 実装済み
- Webhook 処理の 冪等性 確保
- テスト環境で全決済パターン を通過(成功 / 失敗 / 3D セキュア / 返金)
- サブスクの 猶予期間・リトライポリシー を設定
- 特定商取引法に基づく表記 を掲載
- エラーメッセージ をユーザーにわかりやすく表示(カードの拒否理由等)
まとめ
- グローバル展開 / 多通貨 / 複雑な課金体系 → Stripe
- 国内向け / シンプルな決済 / 日本語サポート重視 → PAY.JP
- カード情報は 絶対にサーバ経由にしない(PCI DSS の問題)
- 課金の信頼性は Webhook が担保する(API レスポンスに依存しない)
- 審査は 事前に必要書類を揃えて 申請すると早い
この記事の情報は 2026 年 4 月時点のものです。手数料率や審査基準は変更される可能性があります。