目次一覧
状態:-
閲覧数:816
投稿日:2019-04-13
更新日:2019-04-27
初めに / 支払いは「回数」や「タイミング」の違いだけでこんなにたくさんある / PaymentIntentによる「1回限りの支払」は2種類
PaymentIntentで支払を実装する場合の選択肢 /「Payment Intents API」使用によるカードの支払確認方法は2種類 / PaymentMethodオブジェクトは歴史的経緯により3種類ある
Checkout (new) はどこで実行するかにより2種類に分かれる
PaymentIntentで支払を実装する場合の選択肢 /「Payment Intents API」使用によるカードの支払確認方法は2種類 / PaymentMethodオブジェクトは歴史的経緯により3種類ある
Checkout (new) はどこで実行するかにより2種類に分かれる
初めに / 支払いは「回数」や「タイミング」の違いだけでこんなにたくさんある / PaymentIntentによる「1回限りの支払」は2種類
初めに
このページでは
・「SCA(Strong Consumer Authentication)に対応した実装」における選択肢の違いを提示している
・旧仕様も含んだ「選択肢の一覧」については「旧 Stripe 内の選択肢」を参考にしてくれ
※違いを一目で確認することが目的なので、詳細解説を行っていない
支払いは「回数」や「タイミング」の違いだけでこんなにたくさんある
1回限りの支払
・1回限りの支払いであれば、通常Customerオブジェクトを作成する必要はない
※(本来は不要だが、)Customerオブジェクトを作成して、1回限りの支払いを実行することも出来る
結果的に「1回限りの支払い」
・今後の支払のため、購入時にカード情報を登録したが、結局1回しか購入しなかったケース
※カード情報を登録するためには、Customerオブジェクト作成が必要
複数回の支払
・不定期タイミングで何回か購入するケース
・「1回限りの支払」ではないし、「定期支払い」でもない
・対応としては、(カード情報を登録しない)1回限りの支払を繰り返しても良いし、不定期タイミングで「登録したカード情報」から支払いを選択しても良い
定期支払い(継続的に決まった周期で支払いが発生する)
PaymentIntentによる「1回限りの支払」は2種類
A.Customerオブジェクトを作成せずに、1回限りの支払いを実行
・推奨
※1回限りの支払いであれば、Customerオブジェクトを作成する必要はない
B.Customerオブジェクトを作成して、1回限りの支払いを実行
・本来は不要だが、Customerオブジェクトを作成して、1回限りの支払いを実行できる
・考えられるケースとしては、結果的に「1回限りの支払い」となるケースなど
PaymentIntentで支払を実装する場合の選択肢 /「Payment Intents API」使用によるカードの支払確認方法は2種類 / PaymentMethodオブジェクトは歴史的経緯により3種類ある
PaymentIntentで支払を実装する場合の選択肢
A.Customerオブジェクトを作成せずに、支払いを実行
・「1回限りの支払」では推奨される
B.Customerオブジェクトを作成して、PaymentIntentオブジェクトに関連付け、支払いを実行
・ダッシュボードで該当顧客のカード欄に、カード情報は表示されない
・「1回限りの支払」でも使用可
・https://dashboard.stripe.com/test/customers/cus_ExCvsa7yW5YEZ3
C.Customerオブジェクトを作成して、PaymentIntentオブジェクトに関連付け、支払い方法も関連付け、支払いを実行
・PaymentIntentの支払い方法(sourceまたはpayment_method)を関連する顧客に保存する
・ダッシュボードで該当顧客のカード欄に、カード情報が表示される
→ Customerオブジェクトの「sourcesプロパティ」内にある「dataプロパティ」内に、Cardオブジェクトがリスト構造化されて配置される
・「1回限りの支払」でも使用可
・https://dashboard.stripe.com/test/customers/cus_ExBtKF9cWBjqFV
「Payment Intents API」使用によるカードの支払確認方法は2種類
「Payment Intents API」を使用してカードの支払いを受け取る方法は、大きく2種類に分かれる
自動確認フロー
・支払いの収集に必要な操作を自動的に処理する
・Payment Intents API を使用するための最も早い方法だ
・クライアントでの支払いを確認し、支払いが成功したときにWebフックを使用して通知する
・カードの3Dセキュア認証など、一部の支払い方法には非同期フローがあるため、自動確認システムでは、支払い後ロジックを処理するためにWebフックを使用する必要がある
手動確認フロー
・サーバーでの支払いが確認され、支払いが成功した直後にサーバーで支払いを実行できる
比較一覧表
- | 自動確認フロー | 手動確認フロー |
---|---|---|
支払いを確認する場所 | クライアント | サーバ |
支払いが成功した後の処理 | 非同期 | 同期 |
Webhook | 使用 | 未使用 |
この方式が推奨されるケース | Webhookに慣れている場合 | 既存のカードとCharges API システム から移行する場合 |
PaymentMethodオブジェクトは歴史的経緯により3種類ある
PaymentMethod オブジェクトとして作成した内容
・idプロパティの値が'pm_xxxx'
※下記はただ作成しただけのPaymentMethod オブジェクト。customerに関連付けていないため意味がない
Stripe\PaymentMethod Object
(
[id] => pm_xxxx
[object] => payment_method
[billing_details] => Stripe\StripeObject Object
(
[address] => Stripe\StripeObject Object
(
[city] =>
[country] =>
[line1] =>
[line2] =>
[postal_code] =>
[state] =>
)
[email] =>
[name] =>
[phone] =>
)
[card] => Stripe\StripeObject Object
(
[brand] => visa
[checks] => Stripe\StripeObject Object
(
[address_line1_check] =>
[address_postal_code_check] =>
[cvc_check] => unchecked
)
[country] => JP
[exp_month] => 4
[exp_year] => 2020
[fingerprint] => sNhI3DvKnpKlOtqH
[funding] => credit
[generated_from] =>
[last4] => 0003
[three_d_secure_usage] => Stripe\StripeObject Object
(
[supported] => 1
)
[wallet] =>
)
[created] => 1556325087
[customer] =>
[livemode] =>
[metadata] => Stripe\StripeObject Object
(
)
[type] => card
)
PaymentMethod APIを介して取得したカード
・idプロパティの値が'card_xxxx'
Stripe\PaymentMethod Object
(
[id] => card_xxxx
[object] => payment_method
[billing_details] => Stripe\StripeObject Object
(
[address] => Stripe\StripeObject Object
(
[city] =>
[country] =>
[line1] =>
[line2] =>
[postal_code] =>
[state] =>
)
[email] =>
[name] =>
[phone] =>
)
[card] => Stripe\StripeObject Object
(
[brand] => mastercard
[checks] => Stripe\StripeObject Object
(
[address_line1_check] =>
[address_postal_code_check] =>
[cvc_check] =>
)
[country] => US
[exp_month] => 3
[exp_year] => 2020
[fingerprint] => nVED1M937tLxoMHR
[funding] => credit
[generated_from] =>
[last4] => 4444
[three_d_secure_usage] => Stripe\StripeObject Object
(
[supported] => 1
)
[wallet] =>
)
[created] => 1552873331
[customer] => cus_EhrAhwK7W4OB41
[livemode] =>
[metadata] => Stripe\StripeObject Object
(
)
[type] => card
)
・idプロパティの値が'src_xxxx'
Stripe\PaymentMethod Object
(
[id] => src_xxxx
[object] => payment_method
[billing_details] => Stripe\StripeObject Object
(
[address] => Stripe\StripeObject Object
(
[city] =>
[country] =>
[line1] =>
[line2] =>
[postal_code] => 22222
[state] =>
)
[email] =>
[name] =>
[phone] =>
)
[card] => Stripe\StripeObject Object
(
[brand] => visa
[checks] => Stripe\StripeObject Object
(
[address_line1_check] =>
[address_postal_code_check] => pass
[cvc_check] => pass
)
[country] => US
[exp_month] => 4
[exp_year] => 2024
[fingerprint] => LMqocVHP8RNDkMLj
[funding] => credit
[generated_from] =>
[last4] => 4242
[three_d_secure_usage] => Stripe\StripeObject Object
(
[supported] => 1
)
[wallet] =>
)
[created] => 1552701396
[customer] => cus_EhrAhwK7W4OB41
[livemode] =>
[metadata] => Stripe\StripeObject Object
(
)
[type] => card
)
Checkout (new) はどこで実行するかにより2種類に分かれる
Checkout (new) はどこで実行するかにより2種類に分かれる
Checkout (new)の方法は、大きく2種類に分かれる
・client
・server
比較一覧表
- | client | server |
---|---|---|
一言で言うと? | Stripe.js で処理する | Checkout Sessions API で処理する |
「https://js.stripe.com/v3」読込が必要か | 〇 | × |
課金対象や金額をどこで設定するか | Stripeダッシュボードで生成する | プログラムで生成する |
「支払い」を「既存の顧客」に関連付けすることが出来るか? | × | 〇 |
支払の「作成」と「完了」を分離できるか? | × 支払いが成功しました 4月12日 午後1:37 支払いが作成されました 4月12日 午後1:37 |
〇 支払いが作成されました 4月13日 午前9:15 |
支払完了判定 | Webhook使用。「checkout.session.completed」イベントを監視 | Webhook使用。「checkout.session.completed」イベントを監視 |
Connectサポート | × | 〇 |
カスタマイズ性 | 低。決済画面はStripe.jsに依存 | 高。決済画面を自前で構築する必要がある |
2019/4/13 時点の バージョン指定書式 | betas: ['checkout_beta_4'] | stripe_version' => '2018-11-08; checkout_sessions_beta=v1' |