Payment Intents API への移行 Stripe Billing、Stripe Tax や割引、配送、通貨換算の使用をご希望の場合 サブスクリプション、税金、割引、配送、通貨換算を管理する Payment Element のシステムを開発しています。詳細については、決済ページを構築する ガイドをご覧ください。
既存のカードと Charges API 組み込みを移行する方法は以下のとおりです。
決済フローの移行は非常に煩雑な場合があります。Payment Intents API を段階的に採用し、それを Charges API と並行して使用するのが安全です。この目的のために、移行を次のステップに分割できます。
API バージョンとクライアントライブラリを更新 します。該当する場合は、支払いプロパティから読み取るコードを移行 して、Charges API によって作成された支払いと Payment Intents API によって作成された支払いの間の読み取りパスの整合性を確保します。これにより、読み取り側のシステムが支払いの古いシステムと新しいシステムの両方で機能するようになります。 Web 、iOS 、および Android の既存の Charges API の実装を、Payment Intents API を使用するように移行します。Customer オブジェクトにカードを保存 する組み込みを移行します。規制用テストカードでテスト して、アップグレードしたシステムが認証を正しく処理することを確認します。API バージョンとクライアントライブラリを更新する Payment Intents API はすべての API バージョンで機能しますが、最新の API バージョンにアップグレード することをお勧めします。2019-02-11 より古い API バージョンを使用する場合は、コード例を確認しながら、以下の 2 つの変更点に注意します。
requires_ source
は requires_ payment_ method
に名前が変更されていますrequires_ source_ action
は requires_ action
に名前が変更されていますさらに、Stripe の SDK のいずれかを使用している場合、Payment Intents API を使用するには、最新バージョンのライブラリにアップグレードする必要があります。
1 回限りの支払いフローを移行 Stripe.js および Elements を使用して構築された組み込みは、以下のステップで構成されます。
サーバ側で支払いを回収する Intent を登録する クライアント側で支払いの詳細を収集する 支払いの作成を開始する サーバ側で顧客の注文のフルフィルメントを実行する ステップ 1: サーバ側で支払いを回収する Intent を登録する サーバーで PaymentIntent を作成 し、クライアント側でアクセスできる ようにします。
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "amount" = 1099 \
-d "currency" = "usd"
ステップ 2: クライアント側で支払いの詳細を収集する confirmCardPayment 関数を使用して、支払い情報を収集し、Stripe に直接送信します。
stripe . createToken (
cardElement
) . then ( function ( token ) {
} ) ;
stripe . confirmCardPayment (
INTENT_SECRET_FROM_STEP_1 ,
{
payment_method : { card : cardElement }
}
) . then ( function ( result ) {
if ( result . error ) {
} else {
}
} ) ;
ステップ 3: 支払いの作成を開始する 既存の組み込みでは、最後のステップでトークン化された支払い情報を使用してサーバで支払いを作成していますが、このステップは不要になりました。これは、前のステップで呼び出される confirmCardPayment
関数が支払いの作成を開始するためです。
curl https://api.stripe.com/v1/charges \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{FROM_PREVIOUS_STEP}}" \
-d "amount" = 1099 \
-d "currency" = "usd"
ステップ 4: 顧客の注文のフルフィルメントを実行 自動確認では、クライアント側での顧客のアクションに基づいて非同期で支払いが作成されるため、Webhook を監視して 支払いが正常に完了するタイミングを判断する必要があります。顧客の支払いが成功した後に注文のフルフィルメントなどのステップを実行するには、Webhook のサポートを実装して、payment_ intent. succeeded
イベントを監視します。
支払いが成功した場合は、フルフィルメントを実行します。
payment_ intent. succeeded
Webhook に登録し、Webhook ハンドラでフルフィルメントを実行します。
移行が完了できました。次のセクションではテストカードを使用して、アップグレードした組み込みが 3D セキュア認証を処理することを確認します。
Customer オブジェクトにカードを保存する組み込みに移行する 決済フローでカード情報を収集する Payment Intents API 組み込みは、次のステップで構成されます。
サーバ側で支払いを回収する Intent を登録する クライアント側で支払いの詳細を収集する 支払いの作成を開始する サーバ側で顧客の注文のフルフィルメントを実行する ステップ 1: サーバ側で支払いを回収する Intent を登録する サーバーに PaymentIntent を作成 します。ユーザーがアプリケーションの外部にいるときに主にユーザーに請求する予定の場合は、setup_future_usage を off_ session
に設定し、アプリケーションでユーザに請求する予定の場合は on_ session
に設定します。オンセッションとオフセッションの両方の支払いにカードを使用する場合は、off_ session
を使用します。Customer ID とともに setup_ future_ usage
パラメーターを指定すると、PaymentIntent が確定され、顧客による必要な操作が完了した後、結果の PaymentMethod がその Customer に保存されます。次に、PaymentIntent にクライアント側でアクセスできる ようにします。
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "setup_future_usage" = "off_session" \
-d "amount" = 1099 \
-d "currency" = "usd"
ステップ 2: クライアント側で支払いの詳細を収集する confirmCardPayment 関数を使用して、支払い情報を収集し、Stripe に直接送信します。
stripe . createToken (
cardElement
) . then ( function ( token ) {
} ) ;
stripe . confirmCardPayment (
'{{INTENT_SECRET_FROM_STEP_1}}' ,
{
payment_method : { card : cardElement } ,
}
) . then ( function ( result ) {
if ( result . error ) {
} else {
}
} ) ;
最後に、支払い方法 (paymentIntent. payment_ method
) を顧客に関連付けます。
curl https://api.stripe.com/v1/customers/ { { CUSTOMER_ID } } /sources \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{TOKEN_OR_SOURCE}}"
curl https://api.stripe.com/v1/payment_method/ { { PAYMENT_METHOD_ID } } /attach \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "customer" = "{{CUSTOMER_ID}}"
ステップ 3: 支払いの作成を開始する 既存の組み込みでは、最後のステップでトークン化された支払い情報を使用してサーバで支払いを作成していますが、このステップは不要になりました。これは、前のステップで呼び出される confirmCardPayment
関数が支払いの作成を開始するためです。
curl https://api.stripe.com/v1/charges \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{FROM_PREVIOUS_STEP}}" \
-d "customer" = "{{CUSTOMER_ID}}" \
-d "amount" = 1099 \
-d "currency" = "usd"
ステップ 4: 顧客の注文のフルフィルメントを実行 自動確認では、クライアント側での顧客のアクションに基づいて非同期で支払いが作成されるため、Webhook を監視して 支払いが正常に完了するタイミングを判断する必要があります。顧客の支払いが成功した後に注文のフルフィルメントなどのステップを実行するには、Webhook のサポートを実装して、payment_ intent. succeeded
イベントを監視します。
支払いが成功した場合は、フルフィルメントを実行します。
payment_ intent. succeeded
Webhook に登録し、Webhook ハンドラでフルフィルメントを実行します。
移行が完了できました。次のセクションではテストカードを使用して、アップグレードした組み込みが 3D セキュア認証を処理することを確認します。
保存された支払い方法にアクセスする 以前に保存した顧客のカード、ソース、PaymentMethods を表示するには、Customer オブジェクトの sources プロパティを読み取る代わりに、支払い方法をリストアップ します。顧客に追加された新しい PaymentMethod は Customer オブジェクトの sources プロパティに複製されないため、このようにする必要があります。
curl https://api.stripe.com/v1/payment_methods?customer= { { CUSTOMER_ID } } & type = card \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
:
組み込みをテストする 実装内容を十分にテストして、追加の認証が必要なカードと不要なカードが正しく処理されることを確認します。将来の日付の有効期限と 3 桁のセキュリティコードとともに、これらのカード番号をテスト環境 で使用し、認証が必要な場合と不要な場合について、システムを検証します。
番号 認証 説明 4000 0025 0000 3155 設定時または最初の取引時に必要 このテストカードは、1 回限りの支払い の認証が必要です。ただし、Setup Intents API を使用してこのカードを設定し、それ以降の支払いに保存したカードを使用する場合は、追加の認証の必要はありません。 4000 0027 6000 3184 必須 このテストカードは、すべての取引で認証を必要とします。 4000 0082 6000 3178 必須 このテストカードには認証が必要ですが、認証の成功後に、支払いは insufficient_ funds
エラーコードで拒否されます。 4000 0000 0000 3055 対応可能 このテストカードは、3D セキュア 2 による認証に対応していますが、必須ではありません。テスト環境の Radar ルール によって認証が要求されない限り、このカードを使用する支払いには、テスト環境での追加認証は必要ありません。
これらのカードをアプリケーションまたは支払いデモ で使用して、さまざまな動作を確認します。
参照情報