Stripeとは
Stripeは米国発のグローバル決済プラットフォームで、クレジットカード決済・ACH振替・SEPA・各種ローカル決済手段を統一APIで扱えます。日本では銀行振込・コンビニ決済・PayPay(Stripe経由)にも対応しており、日本語ドキュメントと日本語サポートも充実しています。スタートアップから大企業まで幅広い企業に採用されており、APIの品質・ドキュメントの充実度ではグローバルトップクラスです。
Stripeで実現できる決済機能
- カード決済(一括・分割):Visa・Mastercard・American Express・JCBなど主要カードに対応
- サブスクリプション(定期課金):月次・年次などの自動課金
- 銀行振込:バーチャル口座番号の発行
- コンビニ決済:ファミリーマート・ローソン・セブン-イレブン等
- PayNow・GrabPay等:アジア太平洋地域の決済手段
- Connect(プラットフォーム決済):マーケットプレイスへの分配決済
Stripeアカウントの作成と設定
Stripe.comからアカウントを作成します。日本のビジネスの場合は日本のアカウントとして登録し、事業情報・代表者情報・銀行口座を設定します。本番環境の有効化には追加の本人確認が必要ですが、テストモードはすぐに使えます。
APIキーはStripeダッシュボードの「開発者」→「APIキー」から確認できます。公開可能キー(pk_test_...)はフロントエンド用、シークレットキー(sk_test_...)はバックエンド専用で外部に漏洩させないように管理します。
Stripe.jsとElements(カード情報の安全な取り扱い)
カード番号・有効期限・CVVは自社サーバーを通過させてはいけません。Stripe.jsのElementsコンポーネントを使うことで、カード情報はStripeのサーバーに直接送信され、自社サーバーにはカード情報が渡らない安全な実装が可能です。Elementsはレスポンシブデザインに対応したカスタマイズ可能なUIコンポーネントです。
基本的な決済実装の流れ
- フロントエンド:Stripe.jsを読み込み、Elementsでカード入力UIを表示
- フロントエンド:ユーザーがカード情報を入力してフォーム送信
- フロントエンド:stripe.createPaymentMethod()でPaymentMethodを作成し、IDをバックエンドに送信
- バックエンド:PaymentIntent APIを使って決済インテントを作成
- フロントエンド:stripe.confirmCardPayment()で決済を確定
- バックエンド:Webhookで決済結果を受け取り、注文ステータスを更新
Webhookの実装
Stripeでは決済結果の確認にWebhookの利用を強く推奨しています。特に3Dセキュア認証や非同期決済では、リダイレクト後のページだけでは決済完了を確認できないためWebhookが不可欠です。
Webhookエンドポイントでは、stripe.webhooks.constructEvent()を使って署名検証を行います。処理は冪等性を持たせ、同じイベントを2回受け取っても問題ないよう実装します。
サブスクリプションの実装
Stripeのサブスクリプション機能を使うと、月額・年額などの定期課金を実装できます。Productオブジェクトでサービス内容を、Priceオブジェクトで価格・課金頻度を定義します。顧客情報はCustomerオブジェクトで管理し、支払い方法はSetupIntentを使って事前に保存します。
日本特有の考慮事項
- 消費税:Stripe Taxを使えば消費税の自動計算とインボイスへの記載が可能
- 領収書・インボイス:Stripeの請求書機能で適格請求書(インボイス)を自動発行できる
- 不正検知:Stripe Radarが標準搭載されており、機械学習による不正検知を自動実施
- 通貨:日本円(JPY)での決済に対応。JPYは整数のみ(銭なし)のため金額計算に注意
テストの方法
Stripeはテスト用のカード番号を多数提供しています。4242424242424242は決済成功、4000000000000002は決済失敗のテストカードです。3Dセキュア認証のテスト、各種エラーケースのテストも用意されており、本番環境前に十分な品質保証が可能です。
まとめ
StripeはAPIの品質・ドキュメント・エコシステムが非常に充実した決済プラットフォームです。日本市場向けの機能も年々強化されており、グローバル展開を視野に入れたサービスでも心強い選択肢です。まずはテストモードで実装を進め、Webhook・エラーハンドリング・テストカードでの検証を十分に行ってから本番にデプロイしてください。