.NET 開発基盤部会 Wiki
目次 †
概要 †
Stripeについて調査してみた。
- ポイント
- 日本企業が130以上の通貨でビジネスできる
- 『Connect機能』で、代理店販売事務作業などを一気に無人化可能。
基本 †
仕組み †
大枠は、WebPayと同じと思われる。
項番 | API | 説明 |
1 | Account | アカウント管理 |
2 | Customers | 顧客情報/カード情報 |
3 | Charges | 課金情報 |
4 | Subscriptions | 定期課金 |
5 | Events | イベント |
6... | ..., etc. | ..., etc. |
・・・など、他多数を管理している。
サインアップ・ログイン †
https://stripe.com/jp
WebAPIの認証 †
以下が、WebAPIの認証機構(基本的に基本認証を使用する)。
秘密鍵と公開鍵 †
で、以下の4つの鍵を取得可能。
- Test Secret Key
- Test Publishable Key
- Live Secret Key
- Live Publishable Key
基本的に、
- Secret Keyは、サーバー側で使用する。
- Publishable Keyは、露見しうる、クライアント側で使用する。
(Publishable Keyには、トークン化する権限しか無い)
認証ヘッダ †
基本認証か、Bearer Tokenを使用した認証を行う。
Card Payments(カード決済) †
https://stripe.com/docs/quickstart
どのようなケースでも、始めに、以下のステップが必要。
- カード情報をトークン化して安全に支払情報を収集する。
- 課金要求に支払情報を含めるか、一時的に保存する。
カード情報をトークン化する。 †
以下の2通りの方法で、カード情報をトークン化できる。
checkout.js †
- checkout.jsを使用し、カード情報をトークン化する。
- checkout.jsの使用には公開鍵が必要になる。
- これを、FormからサーバにPOST、サーバは請求処理を行なう。
- 郵便番号収集することを強く推奨(・・・日本ではあまり見ないが)
Stripe.js or mobile SDKs †
- 支払いFormの外観を完全に管理したい場合は、
HTMLとStripe.jsを使用して、カスタム支払いFormを実装可能。
- 支払いFormの要素にはname属性を付与しない(サーバに送信されない)
- data-stripeを付与して、Stripe.jsによって処理を行う。
- stripeResponseHandler?でトークンをstripeTokenというHidden要素に格納する。
- これを、FormからサーバにPOST、サーバは請求処理を行なう。
- 郵便番号収集することを強く推奨(・・・日本ではあまり見ないが)
次のステップ †
請求する。 †
直ぐに請求する。 †
https://stripe.com/docs/charges
シンプルに、秘密鍵を使用して、以下のREST APIで請求を行なう。
後で請求する。 †
https://stripe.com/docs/charges#saving-credit-card-details-for-later
クレジットカード情報を顧客IDに変換・保存し、後で請求する。
秘密鍵を使用して、以下の順序でREST APIを呼出し請求を行なう。
- 顧客を作成する:
https://api.stripe.com/v1/customers
cus_XXXXXXXXXXXXXXXXXXXXXXXX
- カードの代わりに顧客に請求する:
https://api.stripe.com/v1/charges
- 顧客IDとその他の情報をデータベースに保存。
- 顧客に再度請求するときは、顧客IDを取得し請求を行なう。
https://api.stripe.com/v1/charges
請求にメタデータを追加する †
https://stripe.com/docs/charges#storing-information-inmetadata
- 以下のパラメタにメタデータを追加可能。
metadata[order_id]=XXXX
- メタデータは、
- カスタマーに対しては表示されない。
- ダッシュボードに表示エクスポート可能(審査プロセスを迅速化可能)
次のステップ †
支払いの失敗への対応 †
- 支払いはさまざまな理由で失敗する可能性がある。
- 特定の失敗は実際には予防手段で、紛争原因の詐欺行為を最小限に抑える。
- 支払いの失敗の理由は以下で通知される。
- APIが返すChargeオブジェクトの一部
- ダッシュボード内の支払いの詳細内
銀行決済の失敗 †
- 失敗する理由
消費習慣、残高、有効期限やCVCなどのカード情報など
様々な理由により銀行やカード発行会社が支払いを拒否した場合
- カード番号、有効期限が間違っている。残高が不足している。
- 銀行は、具体的な理由の1つを、拒否コードで明らかにできる。
- 失敗を減らす方法
- CVCと郵便番号により、不承認数を大幅に減らすことができる。
- また、以下の何れかを顧客に提案する。
- 不正なカード情報(不正なカード番号や有効期限など)を修正する
- 別のカードや、別の支払い方法を使用する。
- 支払失敗への自動対応
- API例外を正常に処理するコードを作成する。
- API例外にアクセスする方法は以下の2通り。
- APIが返すChargeオブジェクトを処理する。
- WebhooksによりChargeオブジェクトを含むcharge.failedイベントが通知される。
支払いのブロック †
- Stripeの自動詐欺防止ツールセット・レーダは、
高リスクであると判断したすべての支払いをブロックする。
- レーダは、CVCまたは郵便番号が一致しない場合に支払いを
ブロックする機能を使用して、詐欺に最も効果的に対処する。
無効なAPI呼び出し †
- 良くテストされていれば、問題は摘出されているため、本番環境での問題発生は稀。
- 通常、無効なAPI呼び出しでは、ダッシュボードに支払いが表示されない。
- ただし、いくつかのケースでは、支払いが表示されることがある。
Subscriptions(定期購読) †
https://stripe.com/docs/subscriptions/quickstart
3ステップで定期購読が可能。
秘密鍵を使用して、以下の順序でREST APIを呼出し請求を行なう。
- プランを定義する
- 顧客を作成する。
- 顧客を計画に登録する
一度プランを作成したら後は、2・3のステップを繰り返せばイイ。
定期購読を行なう。 †
プランを定義する。 †
以下のAPIを使用して、プラン(原価、通貨、請求サイクル)を定義する。
https://api.stripe.com/v1/plans
顧客を作成する。 †
- ココで説明したように、顧客を作成する。
- ただし、費用の掛からない基本プラン等、
支払い方法無し(メアドのみ等)で顧客を作成できる。
顧客を計画に登録する。 †
以下のAPIを使用して、顧客を計画に登録する。
https://api.stripe.com/v1/subscriptions
- Stripeは、Billing Cycle毎に請求書を作成。
- 請求書には以下の情報が記録される。
- 顧客の支払い義務の概要
- 料金の請求時期、支払い状況を追跡します。
- 請求書に項目を追加し、一括請求を考慮できる。
- Subscriptionactivity自動的に行われるため、
Event通知のWebフックを確立する必要がある。
次のステップ †
Recipes †
Managing your Stripe account(Stripeアカウントの管理) †
https://stripe.com/docs/dashboard
テスト・モードとライブ・モード †
- テスト・モードとライブ・モードは≒。
- テスト・モードとライブ・モードのデータは分離されている。
- ダッシュボードで、テスト・モードとライブ・モードの表示切換が可能。
- テスト・モードの特徴
- 実際のカード・ネットワークを使用しない(テスト用カードを使用)。
- Test mode allows you to fake having a Stripe balance in order to test (fake) transfers.(having a Stripe balanceって何よ?)
- DisputeやBitcoinの微妙なフローがテスト・モードには存在しない。
- テスト・モードで使用する値はコチラを参照。
アカウントの有効化 †
https://dashboard.stripe.com/account/details
上記URLの画面で、以下の様な情報を入力する。
- あなたの所在地は?
- サービスについて
- 運用者情報
- 個人情報
- 明細書表記情報
- 銀行口座情報
アカウントを安全に保つ †
- パスワードは秘密にする。また、再利用しない。
- コンピュータとブラウザを定期的にOS X、Windowsアップデート
- フィッシング詐欺によるパスワード漏洩に注意(特に電子メールのリンクに注意)
- 携帯電話番号を使用した、2要素認証を活用する。
Connect †
https://stripe.com/docs/connect
Stripeアカウントを支払先単位に作成し、支払元と支払先を接続できる。
Stripeアカウント †
Stripeには以下の2つの支払先アカウント種類が存在する。
Standalone Account †
- Stripeにサインアップ & ログインし、オンボードで処理できる支払先ユーザ。
- オンボーディングフローでは、OAuth 2.0により、WebAPIで支払先ユーザのオンボード処理代行が可能。
Managed Account †
- Stripeにログインしない、APIで作成・処理される支払先ユーザ。
テスト †
カード番号 †
テスト用のカード番号 †
テストモードで使用するテストカード情報
国際テストのカード番号 †
- 発行国毎のテストカード番号
- 国際価格設定が異なる場合、国際レートで計算される。
応答のテスト用のカード番号 †
特定の応答、エラー応答のテストのためのカード番号
紛争のテスト用のカード番号 †
https://en.wikipedia.org/wiki/Dispute_(credit_card)
Bitcoin †
・・・
以下を使用してデバッグ。
管理アカウント †
- 特定のイベントをトリガする管理アカウントを作成・更新する。
- テストモードの管理アカウント作成・更新APIでのみ使用できる。
- スタンドアロンのStripeアカウントの場合
- テストモードでは、有効な銀行詳細を使用する。
- テストモードは、ライブ転送を模倣(銀行では処理されない)。
Routing numbers †
米国における銀行コード
Account numbers †
送金の失敗。
Debit card numbers †
- デビットカードへの転送テスト
- テスト秘密鍵でのみ使用可能
Tax IDs †
- 納税者番号(SSNまたはEINの両方として有効)
- 希望の検証動作に対応するDIを渡す。
レート制限 †
Bug、Bulk dataのFetch、極端な負荷テストで、429 HTTPを受け取ることがある。
Webhooks †
- アカウント設定内で、Webhooksをエンドポイントに送信できる。
- テストモードでAPI実行し、Webhooks が送信されるようにする。
- 結果のイベントデータは、APIを使用して確認する。
参考 †
公式 †
Stripe API Reference †
https://stripe.com/docs/api
Guides †
This is the Stripe dashboard, where you view and manage
all your payments, customers, transfers and more.
We've put together some guides to help get you started:
- Collecting your customer's cards
- Making payments from your server
- Billing your users periodically
- Managing your Stripe account
- Go straight to your dashboard
その他 †