カテゴリー:
documentation
閲覧数:434 配信日:2019-04-09 08:53
docs
Payments > PREPARING FOR SCA > Payment Intents API > Migration Guide > Automatic Confirmation
・Migrating to Payment Intents with Automatic Confirmation
・自動確認による Payment Intents への移行
・自動確認を使用して、既存のカードとCharges APIのシステムをPayment Intents APIへ移行する方法を学ぶ
従来の Charges API システムとの比較
Elementsを使用してカードでの支払いを受け付ける従来のトークンベースのStripeシステムには、通常次の手順が含まれる
・Elementsを使用してブラウザで顧客の支払い情報を集める
・Stripe.jsで支払い情報をトークン化する
・サーバーにトークンを送信するためのリクエストを実行する
・トークンを使用して、希望する金額と通貨でサーバーに請求を作成する
・支払いが成功したら、顧客の注文を履行する
比較すると、自動確認を使用したPayment Intents API システムには通常、次の手順が含まれる
・希望する金額と通貨でPaymentIntentを(あなたの)サーバー上に作成する
・PaymentIntentのクライアントシークレットをクライアントサイドに送信する
・Elementsを使用してブラウザで顧客の支払い情報を集める
・Stripe.jsまたはモバイルSDKを使用してダイナミック3Dセキュアを実行し、クライアント側で支払いを完了する
・支払いが成功した場合は、サーバーのWebフックを使用して顧客の注文を処理する
移行のための戦略
あなたの支払いフローを移行するのは大変なことだ
・Payment Intents APIを徐々に採用し、Charges APIと並行して使用するのが安全だ
・そのために、移行を次の手順に分割することをお勧めする
・1.APIのバージョンとクライアントライブラリを更新する
・2.該当する場合は、Charges APIとPayment Intents APIによって作成された請求書の間に一貫した読み取りパスができるように、 請求書から読み取るコードを移行する
・3.Payment Intents APIを使用するために、 Web 、 iOS 、およびAndroid上の既存のCharges APIシステムを移行する
・4.「Customerオブジェクトにカードを保存するシステム」を移行する
・5.アップグレードされたシステムが3D Secure認証を処理することを確認するために、3D Secureテストカードでテスト
APIのバージョンとクライアントライブラリを更新する
Payment Intents APIはすべてのAPIバージョンで機能するが
・最新のAPIバージョンにアップグレードすることをお勧めする
2019-02-11よりも古いAPIバージョンを使用する場合
・コード例を見ながら次の2つの変更点に注意してくれ
requires_source
・require_payment_methodに改名された
requires_source_action
・require_actionに改名された
また、Stripe社のAPIライブラリの何れかを使用している場合
・Payment Intents APIを使用するために最新バージョンのライブラリにアップグレードしてくれ
Webシステムを移行する / Elements
Stripe.js&Elementsを使用して構築されたシステムは、以下のステップで構成されている
・1.サーバー側で支払いを回収するintentを登録する
・2.クライアント側で支払いの詳細を集める
・3.支払いの作成を開始する
・4.サーバー側で顧客の注文を処理する
ステップ | 処理内容 | BEFORE | AFTER |
---|---|---|---|
1 | サーバー側で支払いを回収するintentを登録する 顧客の支払いを処理するには、まずサーバー上にPaymentIntentを作成し、それをクライアント側からアクセスできるようにする |
以前は不可能だった | Stripe::PaymentIntent.create({ |
2 | クライアント側で支払い詳細を収集する handleCardPayment関数を使用して、支払い情報を収集し、それをStripeへ直接送信する |
const {token} = |
const {paymentIntent, error} = |
3 | 支払いの作成を開始する 既存のシステムでは、最後のステップはトークン化された支払い情報を使用してサーバーに課金を作成することだ。前の手順で呼び出されたhandleCardPayment関数によって課金の作成が開始されるため、これは不要になった |
$charge = \Stripe\Charge::create([ |
前のステップで完了 |
4 | サーバー側で顧客の注文を処理する 自動確認では、クライアント側での顧客の行動に基づいて料金が非同期で自動的に作成されるため、Webフックを監視して支払いが正常に完了した時期を判断する必要が必要がある。 顧客の支払いが成功した後で注文履行などの手順を実行するには、Webhookのサポートを実装し、payment_intent.succeededイベントを監視する |
課金が成功したら、履行してくれ | payment_intent.succeeded Webhookイベントを監視し、Webhookハンドラーを実行する |
Webシステムを移行する / 支払いリクエストボタン
Stripe.js paymentRequest API
・従来のPaymentRequestシステムで取得されたトークンを使用してそれをPaymentIntentに添付することによって、Payment Intents APIと連携する
PaymentRequestを使用して構築されたシステムは、以下のステップで構成されている
・サーバー側で支払いを回収するintentを登録する
・クライアント側で支払いの詳細を集める
・支払いの作成を開始
・サーバー側で顧客の注文を処理する
ステップ | 処理内容 | BEFORE | AFTER |
---|---|---|---|
1 | サーバー側で支払いを回収するintentを登録する 顧客の支払いを処理するには、まずサーバーにPaymentIntentを作成し、それをクライアント側からアクセスできるようにする必要がある |
Not possible before | Stripe::PaymentIntent.create({ |
2 | クライアント側で支払い詳細を収集する PaymentRequestオブジェクトのtokenイベントをリッスンする。これは、支払いプロセスがいつ完了したかを示すために使用できるトークンとコールバック関数を提供する。 このシステムをPayment Intents APIをサポートするように調整するには、サーバーにトークンを送信するのではなく、handleCardPayment関数を使用してトークンIDを渡す。 handleCardPayment関数によって返されたpromiseが解決したら、完了コールバックを呼び出す |
paymentRequest.on( |
paymentRequest.on( |
3 | 支払いの作成を開始する 既存のシステムでは、最後のステップはトークン化された支払い情報を使用してサーバーに課金を作成することだ。前の手順で呼び出されたhandleCardPayment関数によって課金の作成が開始されるため、これは不要になった |
$charge = \Stripe\Charge::create([ |
前のステップで完了 |
4 | 顧客の注文を処理する 自動確認では、クライアント側での顧客の行動に基づいて料金が非同期で自動的に作成されるため、Webフックを監視して支払いが正常に完了した時期を判断する必要がある。 顧客の支払いが成功した後で注文履行などの手順を実行するには、Webhookのサポートを実装し、payment_intent.succeededイベントを監視する |
課金が成功したら、履行してくれ | payment_intent.succeeded Webhookイベントを監視し、Webhookハンドラーを実行する |
Webシステムを移行する / Legacy Checkout
従来のバージョンのCheckoutを使用している場合
・新しいCheckoutへアップグレードする
・これは、Stripeで支払いを受け取る最も早い方法だ
・それを使うと、あなたは一度限りの支払いと購読を受け入れることができる
・サーバーでStripe APIを使用せずにCheckoutを使用することもできる
・ Checkoutの移行ガイドに従って、既存の統合を移行する
代わりに独自のチェックアウトフローを作成したい場合
・Elementsに切り替えてくれ
Elementsにアップグレードしたと仮定すると
・(上記の)Elements移行ガイドを使用してPayment Intents API統合を構築できる
「顧客オブジェクトにカードを保存するシステム」の移行
ヨーロッパに拠点を置き、強力な顧客認証の準備をしている場合、7月1日以降では
・次回のオフセッション支払いのためにカードを保存するとき、認証を実行して、オフセッション免除の資格を得る必要がある
・このAPIは7月1日までに利用可能になるだろう
チェックアウトフローでカードを保存する
チェックアウトフローでカード情報を収集するPayment Intents APIシステムは、次の手順で構成されている
・1.サーバー側で支払いを回収する intentを登録する
・2.クライアント側で支払い詳細を収集する
・3.支払いの作成を開始する
・4.サーバー側で顧客の注文を処理する
ステップ | 処理内容 | BEFORE | AFTER |
---|---|---|---|
1 | サーバー側で支払いを回収するintentを登録する 顧客の支払いを処理するには、まずサーバー上にPaymentIntentを作成し、支払い方法を保存する顧客のIDを設定する。 次に、PaymentIntentをクライアント側でアクセス可能にする |
以前は不可能だった | Stripe::PaymentIntent.create({ |
2 | クライアント側で支払い詳細を収集する 「支払い情報を収集してStripeへ直接送信するhandleCardPayment関数」と「提供された支払い方法を顧客に添付するsave_payment_method」を使用する |
const {token} = |
const {paymentIntent, error} = |
2 | クライアント側で支払い詳細を収集する 既存のシステムでは、支払方法を顧客に添付するには別の手順が必要だ。 handleCardPayment関数が提供された支払い方法を顧客に添付するので、これはもう必要ない |
$card = \Stripe\Customer::createSource( |
handleCardPayment関数で完了した |
3 | 支払いの作成を開始する 既存のシステムでは、最後のステップはトークン化された支払い情報を使用してサーバーに請求を作成することだ。前の手順で呼び出されたhandleCardPayment関数が請求の作成を開始するため、これは不要になった |
$charge = \Stripe\Charge::create([ |
前のステップで完了 |
4 | サーバー側で顧客の注文を処理する 自動確認では、クライアント側での顧客の行動に基づいて料金が非同期で自動的に作成されるため、Webフックを監視して支払いが正常に完了した時期を判断する必要が必要がある。 顧客の支払いが成功した後で注文履行などの手順を実行するには、Webhookのサポートを実装し、payment_intent.succeededイベントを監視する |
課金が成功したら、履行してくれ | payment_intent.succeeded Webhookイベントを監視し、Webhookハンドラーを実行する |
チェックアウトフロー外でのカードの保存
チェックアウトフローの外でカードを保存する場合
・既存のシステムとPayment Methods APIのシステムとの間には2つの違いがある
クライアント側
・createTokenまたはcreateSourceの代わりにcreatePaymentMethod関数を使用してくれ
BEFORE
const {token} =
await stripe.createToken(
// or stripe.createSource
cardElement
);
AFTER
const {paymentMethod} =
await stripe.createPaymentMethod(
'card',
cardElement
);
サーバー側
・Customers APIの代わりにPayment Methods APIを使用して、Customerオブジェクトに支払い方法を添付する
BEFORE
$card = \Stripe\Customer::createSource(
'{{CUSTOMER_ID}}',
[
'source' => '{{TOKEN_FROM_STEP_1}}',
]
);
AFTER
$payment_method = \Stripe\PaymentMethod::retrieve('{{PAYMENT_METHOD_ID}}'))
$payment_method->attach(['customer' => '{{CUSTOMER_ID}}']);
保存したカードで支払う
顧客がチェックアウトフローで支払う「保存済みの支払方法を選択できるようにするシステム」は、次の手順で構成されている
・1.サーバー側で支払いを回収する intentを登録する
・2.クライアント側で顧客の保存した支払い方法から支払い詳細を収集する
・3.支払いの作成を開始する
・4.サーバー側で顧客の注文を処理する
ステップ | 処理内容 | BEFORE | AFTER |
---|---|---|---|
1 | サーバー側で支払いを回収するintentを登録する 以前に保存した支払い方法で支払いをするときは、CustomerオブジェクトのIDでPaymentIntentを作成する |
以前は不可能だった | Stripe::PaymentIntent.create({ |
2 | クライアント側で顧客の保存した支払い方法から支払い詳細を収集する handleCardPayment関数を使用して、支払い情報を収集し、それをStripeへ直接送信する |
顧客の選択した保存済みソースIDをサーバーに送信してくれ | const {paymentIntent, error} = |
3 | 支払いの作成を開始する 既存のシステムでは、最後のステップはトークン化された支払い情報を使用してサーバーに請求を作成することだ。前の手順で呼び出されたhandleCardPayment関数が請求の作成を開始するため、これは不要になった |
$charge = \Stripe\Charge::create([ |
前のステップで完了 |
4 | サーバー側で顧客の注文を処理する 自動確認では、クライアント側での顧客の行動に基づいて料金が非同期で自動的に作成されるため、Webフックを監視して支払いが正常に完了した時期を判断する必要が必要がある。 顧客の支払いが成功した後で注文履行などの手順を実行するには、Webhookのサポートを実装し、payment_intent.succeededイベントを監視する |
課金が成功したら、履行してくれ | payment_intent.succeeded Webhookイベントを監視し、Webhookハンドラーを実行する |
保存した支払い方法にアクセスする
顧客の以前に保存されたCards、Sources、およびPaymentMethodsを表示するには
・customerオブジェクトのsourcesプロパティを読み取る代わりに支払い方法を一覧表示する
・顧客に追加された新しいPaymentMethodsが顧客オブジェクトのsourcesプロパティに重複しないため、これが必要だ
BEFORE
customer->sources
AFTER
\Stripe\PaymentMethod::all(['customer' => '{{CUSTOMER_ID}}', 'type' => 'card']);