-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_Stripe
- 戻る(オンライン決済サービス)
Stripeについて調査してみた。
- 日本企業が130以上の通貨でビジネスできる。
- 『Connect機能』で、代理店販売事務作業などを一気に無人化可能。
- フィンテック企業ではもっとも企業価値が高いユニコーン企業
- もっとも重要な世界インフラの1つであるオンライン決済を構築。
- PayPalと異なり、個人間取引でなく、企業間オンライン決済インフラを目標としている。
- 25カ国で事業展開、毎年数10億ドルの成長、約3億ドルの資金調達、企業価値は50億ドル。
- Bitcoin決済に対応、Apple Payの決済プラットフォームパートナーに選定。
-
FinTechユニコーンのストライプ(Stripe)が、
PaypalやSquare並みに評価される理由 |ビジネス+IT
http://www.sbbit.jp/article/cont1/32143 -
米国Fintechを代表する「Stripe」がいよいよ日本で本格展開を開始 | NP通信
https://np-news.netprotections.com/post/4984/ -
打倒PayPalの決済サービスStripeが目指すもの | Tech Babies
http://techbabies.net/blog/payment-stripe-valuation-billion/ -
間もなく日本で正式開始、「Stripe」はどんな決済サービス・企業か? | マイナビニュース
http://news.mynavi.jp/articles/2015/05/20/stripe/ -
Stripeが日本で正式ローンチ、三井住友カードが資本参加を発表 | TechCrunch Japan
http://jp.techcrunch.com/2016/10/07/20161003stripe-debuts-payments-in-japan-with-new-investor-sumitomo-mitsui-card-company/
大枠は、WebPayと同じと思われる。
| 項番 | API | 説明 |
|---|---|---|
| 1 | Account | アカウント管理 |
| 2 | Customers | 顧客情報/カード情報 |
| 3 | Charges | 課金情報 |
| 4 | Subscriptions | 定期課金 |
| 5 | Events | イベント |
| 6... | ..., etc. | ..., etc. |
http://qiita.com/akinrt/items/06e54683f6a6d07e8c1e#api%E6%AF%94%E8%BC%83%E8%A1%A8
が、しかし、WebPay、PAY.JPなどと比べて、
『Connect機能』など、Stripeの方が多機能。
以下が、WebAPIの認証機構(基本的に基本認証を使用する)。
- Your account -> Account settings -> API Keys
https://dashboard.stripe.com/account/apikeys
で、以下の4つの鍵を取得可能。
-
テスト・モード
- Test Secret Key(sk_test_xxx...)
- Test Publishable Key(pk_test_xxx...)
-
ライブ・モード
- Live Secret Key(sk_live_xxx...)
- Live Publishable Key(pk_live_xxx...)
基本的に、
- Secret Keyは、サーバー側で使用する。
- Publishable Keyは、露見しうる、クライアント側で使用する。
(Publishable Keyには、トークン化する権限しか無い)
- Stripe API Reference - authentication
https://stripe.com/docs/api#authentication
基本認証か、Bearer Tokenを使用した認証ヘッダを使用して認証を行う。
https://stripe.com/docs/quickstart
どのようなケースでも、始めに、以下のステップが必要。
- カード情報をトークン化して安全に支払情報を収集する。
- 課金要求に支払情報を含めるか、一時的に保存する。
以下の2通りの方法で、カード情報をトークン化できる。
-
ざっくり、
-
checkout.jsを使用し、カード情報をトークン化する。
-
checkout.jsの使用には公開鍵が必要になる。
-
トークンは、stripeTokenというHidden要素に格納される。
tok_XXXXXXXXXXXXXXXXXXXXXXXX -
これを、FormからサーバにPOST、サーバは請求処理を行なう。
-
郵便番号収集することを強く推奨(・・・日本ではあまり見ないが)
-
-
ざっくり、
-
支払いFormの外観を完全に管理したい場合は、
HTMLとStripe.jsを使用して、カスタム支払いFormを実装可能。 -
Stripe.jsの使用には公開鍵が必要になる。
-
支払いFormの要素にはname属性を付与しない(サーバに送信されない)
-
data-stripeを付与して、Stripe.jsによって処理を行う。
-
Stripe.jsはStripeでカード情報をトークン化する。
tok_XXXXXXXXXXXXXXXXXXXXXXXX -
stripeResponseHandlerでトークンをstripeTokenというHidden要素に格納する。
-
これを、FormからサーバにPOST、サーバは請求処理を行なう。
-
郵便番号収集することを強く推奨(・・・日本ではあまり見ないが)
-
-
checkout.jsのリファレンス
https://stripe.com/docs/checkout -
stripe.jsのリファレンス
https://stripe.com/docs/stripe.js
https://stripe.com/docs/charges
シンプルに、秘密鍵を使用して、以下のCharges APIで請求を行なう。
https://stripe.com/docs/charges#saving-credit-card-details-for-later
クレジットカード情報を顧客IDに変換・保存し、後で請求する。
秘密鍵を使用して、以下の順序で、各 REST API を呼出し、請求を行なう。
-
顧客を作成する:
https://api.stripe.com/v1/customerscus_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 -
メタデータは、
- カスタマーに対しては表示されない。
- ダッシュボードに表示・エクスポート可能(審査プロセスを迅速化可能)
-
ストライプを使用したサンプルプロジェクト
https://stripe.com/docs/examples -
独自のクーポンシステムを導入
https://stripe.com/docs/recipes/coupons-for-charges
-
支払いはさまざまな理由で失敗する可能性がある。
-
特定の失敗は予防手段で、紛争の原因となる詐欺行為を予防する。
-
支払いの失敗の理由は以下で通知される。
- Charges APIが返すChargeオブジェクトの一部
- ダッシュボード内の支払いの詳細内
自動詐欺防止ツールセット・レーダによる。
-
失敗する理由
消費習慣、残高、有効期限やCVCなどのカード情報など
様々な理由により銀行やカード発行会社が支払いを拒否した場合- カード番号、有効期限が間違っている。残高が不足している。
- 銀行は、具体的な理由の1つを、
拒否コードで明らかにできる。
-
失敗を減らす方法
- CVCと郵便番号により、不承認数を大幅に減らすことができる。
- また、以下の何れかを顧客に提案する。
- 不正なカード情報(不正なカード番号や有効期限など)を修正する。
- 別のカードや、別の支払い方法を使用する。
-
失敗への自動対応
- 良くテストされていれば、問題は摘出されているため、本番環境での問題発生は稀。
- 通常、無効なAPI呼び出しでは、ダッシュボードに支払いが表示されない。
- ただし、いくつかのケースでは、支払いが表示されることがある。
-
顧客の1人が銀行やクレジットカード会社に請求したときに発生する。
-
銀行は通常、顧客に紛争の理由を尋ねる。
- 顧客の苦情に続いて、ほとんどの銀行は追加の調査をせずに紛争を起こす傾向がある。
- 多くの場合、紛争解決プロセスで、その請求が有効であることを証明できる。
-
紛争に応答して証拠を提出するつもりがない場合、紛争に同意する。
-
Stripeは紛争の詳細を提供し、紛争の解決のために協力する。
-
顧客に連絡する場合
- 顧客の連絡先に連絡して、紛争の理由を理解する。
- 顧客が単にトランザクションを認識しなかった可能性がある。
- 紛争が誤解の結果である場合、顧客は銀行に紛争の撤回を依頼できる。
-
顧客に連絡しない場合
-
紛争のページにアクセスし、
http://dashboard.stripe.com/disputes -
紛争カテゴリに適した証拠を提示する。
-
Disputes API経由で証拠を提出することもできる。
https://stripe.com/docs/api#update_dispute -
Stripeが顧客のクレジットカード会社に情報を提出する。
-
-
適切な証拠を提供することが重要
https://support.stripe.com/questions/my-customer-withdrew-the-dispute-do-i-still-need-to-provide-evidence-
勝つことを望む紛争においては適切な証拠を提供することが重要。
- 顧客からの撤回メールはなりすましの疑念を抱かせる。
- しかし、顧客から銀行に撤回を通知するのは期待できない。
- 従って、署名付きの手紙をPDF添付ファイルとして証拠として提供する。
(手数料額、手数料の日付、銀行の名前、カード番号の最後の4桁)
-
顧客が撤回したとしても、銀行間通信のため証拠を提供する。
-
-
紛争解決に要する日数。
- アメリカン・エキスプレスでは、顧客によって撤回された紛争は迅速に解決する。
これは、アメリカン・エキスプレスが取得銀行と発行銀行の両方として機能するため。 - しかし、他のカードでは、払い戻しに銀行間通信が必要なため、プロセスは60日間かかる。
- より迅速な解決策が必要な場合。
https://support.stripe.com/questions/my-customer-withdrew-the-dispute-so-i-could-provide-a-refund-what-should-i-do-next
- アメリカン・エキスプレスでは、顧客によって撤回された紛争は迅速に解決する。
-
紛争発生の防止。
https://stripe.com/docs/disputes/faq#how-can-i-prevent-disputes- 事業ごとに別のStripeアカウントを使用する。
- 明確な返品と払い戻しポリシーを用意する。
- 顧客サービスの連絡先情報を目立つように掲示。
- 顧客に最新のプロセス状態と配送時間を提供する。
- オンライン追跡と配信確認を使用する。
- https://support.stripe.com/questions/how-does-stripe-handle-chargebacks
- https://support.stripe.com/questions/what-is-the-difference-between-a-chargeback-and-an-inquiry-or-retrieval
https://stripe.com/docs/orders
ダッシュボードやOrders APIで商品の注文を実装すると下記を実現できる。
-
価格設定や在庫管理
-
配送コストと税金の自動計算
https://stripe.com/docs/orders#shipping-and-taxes
商品の注文は、3つの主要なオブジェクト・APIに基づいている。
-
Products:
- 販売するアイテムの包括的表現
- https://stripe.com/docs/api#products
-
Skus:
- 属性とコスト(サイズ、色、通貨、コスト)
などを組合せた特定の製品バリエーション。 - https://stripe.com/docs/api#skus
- 属性とコスト(サイズ、色、通貨、コスト)
-
Orders:
- 顧客情報と購入したいSKUの組み合わせ。
- https://stripe.com/docs/api#orders
注文を使用すると、請求に加え以下の機能を追加できる。
- 自動計算
- 税金の自動計算
- 送料の自動計算
- 達成された注文を把握し、リターンをシームレスに処理
- GoogleまたはLinkShare製品フィードから商品をインポート
使い分け(Orders APIと他のStripe機能)
-
以下のケースでOrders APIが推奨される。
- 税金や送料を計算する必要がある。
- 顧客が出荷および返品できる物品を販売
- Relay経由で製品を売りたい。
-
一方、他のStripe機能が使い易い場合もある。
- 定期的に顧客に請求したい場合、定期購読を使用する。
- 変動料金サービス(Uber, Lyftのライドシェアサービス)を販売している場合
- 在庫、税金、配送システムを既にお持ちの場合。
- ダッシュボードか、Products APIで商品を生成する。
https://stripe.com/docs/orders/tax-integration
- 実際の注文には、商品の費用だけでなく、配送コストと税金が含まれる。
- Stripeはこれらを自動的かつ動的に注文に追加できる。
配送コストと税金の設定
-
配送の設定
-
税金の設定:
-
Callbackによる、配送コストと税金の動的な計算
- 既存システム利用、若しくはTwitter経由のRelayで販売する場合。
- https://stripe.com/docs/orders/dynamic-shipping-taxes
- 顧客は1つ以上の商品(SKU)を選択。
- 税金と送料を計算し、注文を作成。
- 顧客に請求書を提供する。
上記の2・3のステップを、Orders APIで処理する。
-
Orders APIに、商品(SKU)と配送先住所を指定。
- https://api.stripe.com/v1/orders
- Stripeは以下のアクションを実行する。
- SKUの在庫を確認し、現在の価格を取得。
- 税額を取得し、税金明細を追加
- 送料を取得し、配送方法を追加。
- 集計し、Orderオブジェクトにパック
-
Orderオブジェクトが表示される。
- オーダーIDをデータベースに格納
- 顧客に注文総額を提示する。
- 顧客に問題がなければ請求に進む。
- TokenをStripeに渡して注文を支払う。
https://stripe.com/docs/subscriptions/quickstart
3ステップで定期購読が可能。
秘密鍵を使用して、以下の順序で、各 REST API を呼出し、定期購読を行なう。
- プランを定義する
- 請求額の設定
- 請求間隔の設定
- 顧客を作成する。
- 顧客を定期購読のプランに登録する
一度プランを作成したら後は、2・3のステップを繰り返せばイイ。
以下のPlans APIを使用して、プラン(原価、通貨、請求サイクル)を定義する。
https://api.stripe.com/v1/plans
- ココで説明したように、顧客を作成する。
- ただし、費用の掛からない基本プラン等、
支払い方法無し(メアドのみ等)で顧客を作成できる。
以下のSubscriptions APIを使用して、顧客を定期購読のプランに登録する。
https://api.stripe.com/v1/subscriptions
-
Stripeは、Billing Cycle毎に請求書を作成。
-
請求書には以下の情報が記録される。
- 顧客の支払い義務の概要
- 料金の請求時期、支払い状況を追跡します。
- 請求書に項目を追加し、一括請求を考慮できる。
-
Subscription activity は自動的に行われるため、
Event通知のWebフックを確立する必要がある。
- 定期購読プランの管理
https://stripe.com/docs/subscriptions/plans - ライフサイクル&イベント
https://stripe.com/docs/subscriptions/lifecycle - 定期購読のテスト
https://stripe.com/docs/subscriptions/testing - Subscriptions API
https://stripe.com/docs/api#subscriptions
- 定期購読まで顧客に署名する
https://stripe.com/docs/recipes/subscription-signup- より高度なCheckout統合
https://stripe.com/docs/recipes/variable-amount-checkout - checkout.jsを使用してウェブサイトでの顧客カードの更新を処理する方法
https://stripe.com/docs/recipes/updating-customer-cards
- より高度なCheckout統合
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要素認証を活用する。
https://stripe.com/docs/connect
Connect用のアカウントを支払先単位に作成し、支払元と支払先を接続できる。
Connect用のアカウントに以下の2つの支払先アカウント種類が存在する。
- =Stripeアカウント
Stripeにサインアップ & ログインし、オンボードで処理できる支払先ユーザ。 -
オンボーディングフローでは、
OAuth 2.0により、WebAPIで支払先ユーザの一部のオンボード処理代行が可能。 - 支払いの受け取りなどは、支払先ユーザがオンボード処理で行なう。
- Stripeにログインしない、APIで作成・処理される支払先ユーザ。
- Testing
https://stripe.com/docs/testing
テストモードで使用するテストカード情報
- 発行国毎のテストカード番号
- 国際価格設定が異なる場合、国際レートで計算される。
特定の応答、エラー応答のテストのためのカード番号
- 紛争のテスト用のカード番号
・・・
以下を使用してデバッグ。
- Chrome Web Inspector
- stripe-debug.js
-
特定のイベントをトリガする管理アカウントを作成・更新する。
-
テストモードの管理アカウント作成・更新APIでのみ使用できる。
-
スタンドアロンのStripeアカウントの場合
- テストモードでは、有効な銀行詳細を使用する。
- テストモードは、ライブ転送を模倣(銀行では処理されない)。
米国における銀行コード
送金の失敗。
- デビットカードへの転送テスト
- テスト秘密鍵でのみ使用可能
- 納税者番号(SSNまたはEINの両方として有効)
- 希望の検証動作に対応するIDを渡す。
Bug、Bulk dataのFetch、極端な負荷テストで、429 HTTPを受け取ることがある。
-
Webhook(IFTTTの該当節を参照)
-
アカウント設定内で、Webhookをエンドポイントに送信できる。
-
テストモードでAPI実行し、Webhook が送信されるようにする。
-
結果のイベントデータは、APIを使用して確認する。
-
Stripeの自動詐欺防止ツールセット・レーダは、
高リスクであると判断したすべての支払いをブロックする。- CVCまたは郵便番号が一致しない場合に支払いをブロックする。
- その他、高度な機械学習と詳細なコントロールを使用し、不正行為、紛争を予防する。
-
クレジットカード会員がクレジットカードの不正使用による損害を受けないためのルールの1つ。
-
顧客がクレジットカード不正使用による利用代金の支払に同意しない場合、
クレジットカード会社がその代金の売上を取消す。 -
販売元はクレジットカード会社に利用代金を返金しなければならず、
さらに商品も戻ることはないため、損害が発生する。 -
ビジネス運用費用の中にチャージバックによる損失分も想定して計上するのが一般的。
-
銀行による調査
カード保有者の銀行がチャージバックの前に苦情の調査を開始する場合がある。- 用語
- American Express : inquiry という用語を使う。
- MasterCard, Visa, Discover : retrieval という用語を使う。
- 用語
-
クレジットカード情報の漏洩・流出による不正使用
- スキミング
- フィッシング詐欺
- ウイルスやスパイウェア
-
クレジットカード本体の盗難・紛失による不正使用
ECサイトではPIN入力やサインによるカード会員の本人確認が不要のためハードルが低い。 -
クレジットマスターによる不正使用
プログラムを利用して利用可能なクレジットカード番号を割り出し、不正使用する手法
高額商品や現金への還元をしやすい商材
-
セキュリティコード
- CVCなどカード会社により異なる名称
- 文字列なので、スキミングなどで情報が盗まれにくい。
-
3Dセキュア(認証サービスの該当節を参照)の利用
-
不正使用検知の利用
会社によって仕組みが違う。
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
- Card Payments Quickstart
https://stripe.com/docs/quickstart
- Card Payments Quickstart
-
Making payments from your server
- Creating Charges
https://stripe.com/docs/charges
- Creating Charges
-
Billing your users periodically
- Subscriptions Quickstart
https://stripe.com/docs/subscriptions/quickstart
- Subscriptions Quickstart
-
Managing your Stripe account
- Managing Your Account
https://stripe.com/docs/dashboard
- Managing Your Account
-
Go straight to your dashboard
- [Test] Dashboard
https://dashboard.stripe.com/test/dashboard
- [Test] Dashboard
-
[Blog] オンライン決済 Stripe を試してみた - Questetra BPM Suite
http://www.questetra.com/ja/blog/cat-ambitions-ja/cloud-payment-stripe/ -
日本正式リリースしたStripeを使ってサブスクリプション型決済システムを実装する - Qiita
http://qiita.com/tady/items/7617e62b2a5402ebd0fb -
【日本上陸】オンライン決済サービスStripeによる円決済の実装 入門 - Qiita
http://qiita.com/hayashier/items/02fd691e5896b9864298 -
遂に正式リリースされた決済サービス「Stripe」を学ぼう!勉強会 - 資料一覧 - connpass
https://nad.connpass.com/event/45402/presentation/- WebPayからStripeに移行した話
http://www.slideshare.net/TakuroNiitsuma/daddly-stripe-20161130-69708112 - [daddly] Stripe勉強会 運用編 2016/11/30
http://www.slideshare.net/naoswave/daddly-stripe-20161130
- WebPayからStripeに移行した話
-
オンライン決済「Stripe」、JCBのカード決済に対応--グローバルで提携 - CNET Japan
https://japan.cnet.com/article/35119284/
移行メモ
PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、
- 同一ページ内のアンカは、見出しから生成されるアンカに張り替え、
- 他ページのアンカを指すリンクは「〜(
ページ名の該当節を参照)」の形に置き換えた。同名の見出しが複数あり GitHub Wiki ではアンカが衝突するため、 括弧で文脈を補って一意にした (「次のステップ(トークン化)」「次のステップ(請求)」「次のステップ(定期購読)」、 「参考(概要)」「概要(チャージバック)」「その他(参考)」)。
元 Wiki で見出しそのものがリンクになっていた箇所 (「チャージバックへの対応」「紛争のテスト用のカード番号」「API keys」「Webhook」)は、 GitHub Wiki では見出しからアンカが生成されるため、 見出しをプレーン・テキストとし、リンクは直下の箇条書きに置いた。
元 Wiki の行頭空白によるプレフォーマット・ブロックは、 フェンス付きコードブロックまたはインライン・コードにした。
元ページの誤記を修正した。 「紛争の原因となるの詐欺行為」→「紛争の原因となる詐欺行為」、 「PDF添付ファイルを証拠として」→「PDF添付ファイルとして証拠として」、 「顧客が撤退したとしても」→「顧客が撤回したとしても」、 「表示エクスポート可能」→「表示・エクスポート可能」、 「現在の価格を取得。。」→「現在の価格を取得。」、 「Subscriptionactivity自動的に」→「Subscription activity は自動的に」、 「希望の検証動作に対応するDIを渡す」→「…対応するIDを渡す」。
本ページは 2016〜2017 年頃の調査記録であり、 Stripe の API(Checkout / Orders / Relay など)や料金・企業情報は 現在では大きく変更されている点に注意。
Tags: 移行, Stripe, オンライン決済, 決済, カード決済, 定期購読, Connect, チャージバック, FinTech
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。