Payment Intents Usage Guide / Payment Intents 使用ガイド

「決済」及び「開発」関連用語集

カテゴリー: documentation  閲覧数:1258 配信日:2019-04-10 09:31


docs


Payments > PREPARING FOR SCA > Payment Intents > Usage
Payment Intents Usage
Payment Intents 使用ガイド
・Payment Intents APIのすべての機能の使い方を学ぶ

非同期支払いフロー
・アプリケーションの外部で発生するユーザー操作に依存するため、管理が複雑だ
・Payment Intents APIは、PaymentIntentオブジェクト内で支払いのスstatusプロパティを追跡することによってこれを簡素化する
・これは、ペイメントライフサイクルの中で唯一の真実のsourceとして機能する

PaymentIntent オブジェクト内にある status プロパティの概要


PaymentIntentの目的
・成功ステータスを取得することだ
・そこに着くためにあなたは3つのことをする必要がある
・PaymentIntentを作成する
・有効な支払い方法を添付してくれ
・PaymentIntentを確認する

PaymentIntentでは
・資金不足や支払いの詳細が正しくない場合に、追加の認証手順または新しい支払い方法が必要になる場合がある
・この状態は、PaymentIntent オブジェクトの status プロパティに反映される

status プロパティには(取り得る)7つの値がある
PAYMENTINTENT STATUS 説明
requires_payment_method PaymentIntentを作成すると、支払い方法を添付するまでステータスはrequire_payment_methodになる
requires_confirmation 「支払い方法を指定したPaymentIntent」を確認する準備が整った
requires_action PaymentIntentを確認すると、Stripeは免除を利用してユーザーを認証せずに支払いを完了する。 支払い方法で追加の認証が必要な場合、PaymentIntentのステータスはrequire_actionになる
processing 必要なアクションが処理されると、PaymentIntentは処理に移る
requires_capture カードを保留にするために承認とキャプチャを別々に行う場合は、PaymentIntentを作成するときにcapture_methodをmanualに設定する。 それから、カードを認証するためにconfirmを呼び出し、資金を獲得する準備ができたら捕捉する
canceled あなたは成功する前にいつでもPaymentIntentをキャンセルすることができる
succeeded 成功のステータスを持つPaymentIntentは、支払いが完了し、資金があなたのアカウントにあることを意味する。 PaymentIntentが成功した後、顧客に返金する必要がある場合はRefunds APIを使用してくれ
ダッシュボードで PaymentIntentのステータスを確認できる

例1:一時支払いの作成


クイックスタートでは
・Payment Intents APIを使用して1回限りの支払いを処理する方法について説明する
・1回限りの支払いは、「支払いの詳細を収集して直ちに請求することを必要とする」eコマース注文または寄付のようなものだ
・注文をどのように満たすかに応じて、選択する2つのフローがある

自動確認
・クライアントでPaymentIntentを確認する
・これを実行するには、Webフックなどの非同期プロセスを使用する必要がある

手動確認を使用すると
・サーバー上のPaymentIntentを確認してすぐに注文を処理できる

例2:後で請求するためにカードを保存する


以前に保存した支払い方法の請求を処理する方法
・2つある

支払い方法の詳細を収集して後で請求するには、「Payment Intents API」オフセッションフローを使用する
・PaymentIntentがrequire_actionを要求したときに、電子メールまたはアプリの通知を送信して、ユーザーに認証を手動で依頼する必要がある

Stripe BillingのSubscription APIを使用する
・これは、PaymentIntentがrequire_actionステータスになったときにカスタマイズ可能なEメールを自動的に送信することによって、追加認証をユーザーに求めることを処理する

例3:PaymentIntentsのキャンセルと返金


顧客からの支払いを集めるためにPaymentIntentを使用する予定がなくなった場合
・PaymentIntentをキャンセルできる
・PaymentIntentのキャンセルはオプションだ
・PaymentIntentをrequire_confirmationやrequire_payment_methodのような不完全な状態にしても大丈夫だ
・不完全なPaymentIntentsは、チェックアウト時のコンバージョン率を理解するのに役立つ
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

$intent = \Stripe\PaymentIntent::retrieve("pi_xxxx");
$intent->cancel();


paymentIntentは
・require_payment_method、require_capture、require_confirmation、require_actionの何れかのステータスがある場合にのみキャンセルできる
・PaymentIntentは、アクティブに処理されている間、または成功した後でキャンセルすることはできない

PaymentIntentがキャンセルされると
・追加料金を支払うためにそれを使用することはできなくなる
・キャンセルされたPaymentIntentに対してアプリケーションが実行しようとした操作はすべてエラーで失敗する

成功ステータスに達した後にPaymentIntentを返金するには
・Refunds APIを使用する

例4:課金せずにカードを保留にする


Stripeは2段階のカード支払いをサポートしているので、最初にカードを認証してから、後で資金を獲得するのを待つことができる
・支払いが承認されると、資金はカード発行者によって保証され、その金額は最大7日間、顧客のカードに保持される
・支払いがこの時間内に取得されない場合、PaymentIntentと承認は両方ともキャンセルされ、資金が解放される

別々の認証と取得が必要であることを示すには
・PaymentIntentを作成するときにcapture_methodオプションの値をmanualに設定する必要がある
・これにより、ストライプは顧客のカードの金額のみを承認するようになる
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 'amount' => 1099,
 'currency' => 'jpy',
 'payment_method_types' => ['card'],
 'capture_method' => 'manual',
]);


承認された資金を取得するには
・PaymentIntentcapture要求を行う
・合計承認額はデフォルトで取り込まれ、これ以上取り込むことはできない
・最初の金額(例えば、10ドルの承認に対して8ドル)より少ない金額を取得するには、amount_to_captureオプションを渡す
・部分的にキャプチャすると自動的に残りの金額が解放される

次の例は、承認された支払いから資金を集める方法を示している
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

$intent = \Stripe\PaymentIntent::retrieve('pi_xxxx');
$intent->capture(['amount_to_capture' => 750]);


承認をキャンセルする必要がある場合
・PaymentIntentをキャンセルできる

一部の発行者からのカード明細書では
・承認と取得(決済)された支払いが区別されていないため、顧客に混乱を招くことがある
・また、承認された支払いは1回しかキャプチャできない
・支払いの一部を取得した場合は、その差に対して別の取得を実行できない
・必要に応じて、後で顧客のカードの詳細を保存し、必要に応じて将来の支払いを作成することで、よりよいサービスを受けることができる

さらに、顧客が手動取得でPaymentIntentの支払い処理を完了すると
・payment_intent.amount_capturable_updatedイベントが発生する
・PaymentIntentのamount_capturableプロパティを調べて、PaymentIntentから取得できる合計金額を確認できる

カードによる支払いのみが
・個別の承認とキャプチャをサポートする
・他の支払い方法(例えば、ACHまたはiDEAL)は、最初に許可されてから捕捉されることはできない

例5:Apple PayとGoogle Payで Payment Intents を使用する


Payment Intents APIを使用して、 Apple PayやGoogle Payなどのモバイルカードウォレットを受け取ることができる
・Web上では、Apple Pay、Google Pay、Microsoft Pay、およびPayment Request APIのための単一のシステムを提供するPayment Requestボタンを使用してくれ

例6:Connectedアカウントに代わって請求する


Stripeは、 接続アカウントに代わって料金を作成するためのいくつかのアプローチをサポートしている

1つのアプローチは直接請求だ
・そこでは接続されたアカウントは、Stripe料金、払い戻し、およびチャージバックの費用に対して責任がある
・PaymentIntentを使って直接請求を行うには、PaymentIntentを作成するときに接続アカウントのIDを指定する
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "payment_method_types" => ["card"],
], ["stripe_account" => "{{CONNECTED_ACCOUNT_ID}}"]);


さらに、Payment Intents APIは
・自動的に接続アカウントへの転送を作成し、接続アカウントを支払いの記録として使用することをサポートする

transfer_data [destination]
・転送を受け取るべき接続アカウントのIDだ

on_behalf_ofパラメータ
・支払いの記録上の取引先として使用する接続アカウントのIDだ
・設定すると、自動的にストライプが(下記を)処理する
・指定されたアカウントの国で料金を決済し、それにより減少を最小限に抑え、通貨換算を回避する
・接続先アカウントの国の料金体系を使用する
・アカウントがプラットフォームと異なる国にある場合は、接続されたアカウントのアドレスと電話番号が(プラットフォームではなく)顧客のクレジットカード明細書に表示される

transfer_groupパラメータ
・PaymentIntentによって作成されたすべての請求に伝播され、同じように動作する
・最後に、application_fee_amountパラメータを指定して、申請料を差し控えることができる

// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "application_fee_amount" => 200,
 "payment_method_types" => ["card"],
 "on_behalf_of" => "{{CONNECTED_ACCOUNT_ID}}",
 "transfer_data" => [
   "destination" => "{{CONNECTED_ACCOUNT_ID}}"
 ]
]);




















※以下は、(2019年4月前半)以前に掲載されていた内容の日本語訳

Payment Intents APIを使用して構築されたStripeシステム


通常、次の4つのステップに従う
・1.顧客がチェックアウトプロセスを開始したら、サーバー上に新しいPaymentIntentを作成する
・2.クライアントサイドでPaymentIntentのクライアントシークレットを利用できるようにする
・3.クライアント側でStripe.jsを使用して支払い情報を収集し、課金を開始し、必要な次のアクションを処理する
・4.必要に応じて、Webフックを使用して課金の成否を監視および処理する

Payment Intents APIを使用する場合、課金の作成はクライアント側で開始され、Stripeのサーバーで行われる
・ある意味では、プロセスは非同期だ
・成功または失敗を示す応答がサーバーにすぐに送信されることはない
・そのため、顧客が購入した商品およびサービスをいつ履行する必要があるかを判断するには、Webフックを利用する必要がある

Payment Intents APIが必要とするアプローチ
・クライアント側でStripe.jsを使用して顧客の支払い情報をトークン化し、それをサーバーに送信して課金を作成する、より伝統的なStripeモデルの逆だ
・このAPIと直接課金の作成との違いの詳細については、 移行ガイドを参照してくれ。
・Payment Intents APIとの完全なStripeシステムを構築する方法を示すステップバイステップの説明については、 支払いのクイックスタートを参照してくれ

PaymentIntentのライフサイクル


各PaymentIntentは、使用中に複数の状態に遷移するオブジェクトだ
・PaymentIntentは、1回の課金が成功した時点で最終ステータス( succeeded )になる
・PaymentIntentで実行された課金が失敗した場合は、同じPaymentIntentを使用して、顧客が正常に完了するまで追加の課金を試行することができる

以下は、PaymentIntentが通常トランザクション中に進行する段階だ
・1.新しいPaymentIntentを作成すると、require_payment_methodステータスから始まる。これは、(顧客が入力する)支払い方法情報を待っていることを示す
・2.顧客が支払い方法情報を提供すると、アプリケーションが課金の実行を試みることを確認するまで、PaymentIntentのステータスはrequires_confirmationに進む
・3.追加の認証情報の入力を求めるなど、追加の手順を含む支払い方法を顧客が使用する場合、PaymentIntentはそれを追跡してそのステータスをrequire_actionに更新し、next_actionプロパティに、顧客が次の作業を完了するのに役立つ関連情報を入力する
・4.課金の試行が確認され、実行するアクションがそれ以上残っていない場合、課金が続行され、PaymentIntentのステータスがprocessingに進む
・5.課金が正常に完了すると、PaymentIntentは満たされ、そのステータスはsucceededに変わる。PaymentIntentが1回の成功した課金を完了した後は、PaymentIntentによるこれ以上の課金は試行できない

プロセスの途中で支払いが失敗した場合
・PaymentIntentのステータスはneeds_payment_methodにリセットされる
・初期状態に戻ったときに、顧客にもう一度やり直すように促すことができる
・必要に応じて、別の支払い方法で行うこともできる
・PaymentIntentによって試行された課金の全履歴は、PaymentIntentのchargesプロパティに格納される

特定の状況下で発生する可能性がある2つの追加の状態がある
・PaymentIntentをキャンセルすると、そのステータスはcancelledに変わる
・キャンセル後は、PaymentIntentに追加料金を課金することはできない
・システムで2段階のカード支払いを別々の承認ステップと取得ステップで使用している場合、課金を承認した後、PaymentIntentの状態はrequire_captureに変わる
・あなたは7日以内に料金を課金しなければならない、さもなければPaymentIntentはキャンセルされる

Stripe.jsとElements
・Payment Intents APIと緊密に統合されており、各段階でPaymentIntentの進行を管理することの複雑さを大幅に軽減している
・通常、確認などのステップは舞台裏でStripe.jsによって実行されるため、アプリケーションでそれらを処理する必要はない
・課金プロセスをもっと細かく制御したい場合は、より実践的な方法を選択することをお勧めする

クライアント側で支払いを完了する


Payment Intents APIはStripe.jsと統合され、Elementsを使用してクライアント側で安全に支払い情報を収集する
・購入を完了するには、PaymentIntentのクライアントシークレットを取得し、それをStripe.jsのstripe.handleCardPayment関数へ渡す
・この関数を呼び出すと、目的の要素から顧客の支払い情報を収集し、それをStripeに安全に送信して取引を完了する
・正常に完了した場合、結果オブジェクトのerrorプロパティはnullだ
▼PaymentIntentデモ4-1
const stripe = Stripe('pk_test_xxxx', {
 betas: ['payment_intent_beta_3']
});

(async () => {
 const {paymentIntent, error} = await stripe.handleCardPayment(clientSecret, cardElement);
 if (error) {
   // Display error.message in your UI.
 } else {
   // The payment has succeeded. Display a success message.
 }
})();


一部の支払い方法では、3Dセキュア認証などの追加手順が必要だ
・あなたが支払いを完了するためにStripe.jsのhandle関数の1つを使用するとき、それは必要な次の行動を通して自動的に顧客を案内する
・それはまたあなたのためのPaymentIntentをconfirmsする

ソースと顧客


収集された支払い情報
・保存され、後で再利用するためにcustomerオブジェクトに関連付けられる
・PaymentIntentを作成するときに、save_payment_methodの値をtrueに設定し、希望のcustomerソースを指定する

・次の例は、顧客の支払い情報を保存するPaymentIntentを作成する方法を示している
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "payment_method_types" => ["card"],
 "save_payment_method" => true,
 "customer" => "cus_DyA7gideDWXNOX",
 "source" => "src_1DWaarHgsMRXo4MtXrvYGoMZ",
]);


クライアントサイドのhandleCardPayment関数にはsave_payment_methodパラメーターもある
・これはオプションで、顧客から提供された支払い情報を保存するために使用できる
・これは、チェックアウトプロセス中に顧客の支払い情報を保存するかどうかを選択するオプションを顧客に提供したい場合に役立つ
・このパラメータは、現在提供されている支払い情報にのみ適用される
・顧客が後で別の支払い情報を提供した場合は、新しい情報を保存するためにsave_payment_method再度指定する必要がある

保存したソースを使う


保存されているソースを使用
・ PaymentIntentを作成するときに、関連するIDにcustomerパラメータとsourceパラメータを指定して、保存されているソースを使用するように指示することができる
・PaymentIntentがsourceパラメータで確認されると、すぐに指定されたソースで支払いを完了しようとする
・PaymentIntentが保存されたソースで支払いを正常に完了できる場合は、PaymentIntentをクライアント側に渡す必要はない
・次の例は、保存されたソースを使用するPaymentIntentを作成する方法を示している
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "payment_method_types" => ["card"],
 "source" => "src_1DWDnvHgsMRlo4Mtl1GO25qW",
 "customer" => "cus_DyA7gideDWXNOX",
 "confirm" => true,
 "return_url" => "https://your-app-domain.com/complete",
]);


Connectを使う


Stripeは、 接続アカウントに代わって課金を作成するためのいくつかのアプローチをサポートしている
1つのアプローチは直接請求だ
・そこでは、接続されたアカウントはStripe手数料、払い戻し、およびチャージバックの費用に対して責任がある
・PaymentIntentを使って直接請求を行うには、PaymentIntentを作成するときに接続アカウントのIDを指定する
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "payment_method_types" => ["card"],
], ["stripe_account" => "{CONNECTED_ACCOUNT_ID}"]);


さらに、Payment Intents APIは、自動的に接続アカウントへの転送を作成し、接続アカウントを支払いの記録として使用することをサポートする
・transfer_data[destination]は、転送を受け取るべき接続アカウントのIDだ
・on_behalf_ofパラメータは、支払いの記録上の取引先として使用する接続アカウントのIDだ。※Creating Separate Charges and Transfers における設定なので以下省略
・transfer_groupパラメータは、PaymentIntentによって作成されたすべての課金に伝播され、 同じように動作する。※Creating Separate Charges and Transfers における設定

・最後に、 application_fee_amountパラメータを指定して、 application feeを差し控えることができる
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey("sk_test_xxxx");

\Stripe\PaymentIntent::create([
 "amount" => 1099,
 "currency" => "jpy",
 "application_fee_amount" => 200,
 "payment_method_types" => ["card"],
 "on_behalf_of" => "{CONNECTED_ACCOUNT_ID}",
 "transfer_data" => [
   "destination" => "{CONNECTED_ACCOUNT_ID}"
 ]
])


週間人気ページランキング / 3-12 → 3-18
順位 ページタイトル抜粋 アクセス数
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 6
2 サブスクリプション | 課金 4
3 支払い 2
3 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 2
3 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 2
3 EPUB | ファイルフォーマット(電子書籍) 2
3 SHOWROOM | ライブ配信サービス(課金販売できるプラットフォーム) 2
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 2
4 Stripe Q35。「Payment Intents API」で、3Dセキュアなどの認証手順を(顧客が)使用しないことは出来ますか? | QA(Stripe) 1
4 Stripe Q15。PaymentIntent でエラー。カード番号に不備があります。 | QA(Stripe) 1
4 トークンとは? / トークン決済 / トークン決済を導入するメリット 1
4 EMVCo | クレジットカード仕様(仕様) 1
4 Coiney | 「支払」機能を有する決済系サービス(決済サービス) 1
4 プリペイドカードとは?/ 現金として出金できるの?/ プリペイドカードの具体例 1
4 Stripe Q46。Direct Charges で手数料聴取する場合、'payment_intent_data'の「有り」「無し」の違いは? | QA(Stripe) 1
4 普通送金とは? / 処理の流れ 1
4 トークナイゼーション / トークナイゼーションとは? / トークン化されたデータ 1
4 「払い戻し」と「チャージバック」の違い | 違い 1
4 質問履歴16 / 質問履歴16-2 1
4 クレジットカード決済 | 課金 1
2024/3/19 1:01 更新
指定期間人気ページランキング / 2020-5-28 → 2024-3-18
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2005
2 EMVCo | クレジットカード仕様(仕様) 1248
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 935
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 896
5 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 875
6 クレジットカード決済 | 課金 871
7 決済用語 851
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 821
9 Omise | 「支払」機能を有する決済系サービス(決済サービス) 760
10 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 753
11 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 735
12 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 733
13 EMVレベル1 / EMVレベル2 / EMVCo とは? 704
14 YouTube | 動画サービス(課金販売できるプラットフォーム) 635
15 プリペイドカード | カード 634
16 EPUB | ファイルフォーマット(電子書籍) 584
17 サブスクリプション | 課金 563
18 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 541
19 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 535
20 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/3/19 1:01 更新