Verifying Payment Status / 支払い状況の確認

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

カテゴリー: documentation  閲覧数:535 配信日:2019-04-23 09:38


docs


Payments > PREPARING FOR SCA > Payment Intents > Usage > Verifying Payment Status
Verifying Payment Status
支払い状況の確認
・PaymentIntentのステータスを確認し、それをWebフックで監視する方法を学ぶ
・PaymentIntentsは、顧客または支払方法によって実行されたアクションに応じて更新される
・システムによってPaymentIntentを検査して、支払いプロセスの「status」を判別し、さらに介入が必要な「status」に対応することが出来る

クライアントでPaymentIntentのステータスを確認する


自動確認でhandleCardPayment関数を使用してクライアントで支払いを完了すると
・返されたPaymentIntentを調べて現在のステータスを確認できる

await stripe.handleCardPayment(clientSecret);
・PaymentIntentsデモ4-2に下記コードも含まれる
(async () => {
 let {paymentIntent, error} = await stripe.handleCardPayment(clientSecret);
 if (error) {
   // Handle error here
 } else if (paymentIntent && paymentIntent.status === 'succeeded') {
   // Handle successful payment here
 }
})();


handleCardPaymentによって返された "promise"は、支払いプロセスが完了したとき、またはエラーで失敗したときに解決される
・正常に完了し、PaymentIntentを返した場合、ステータスは常に「成功」または「require_capture」の何れかだ
・支払いに認証などの追加の手順が必要な場合、その手順が完了するかタイムアウトするまで「promise」は解決されない

handleCardPayment関数を使用せずにPaymentIntentのステータスを確認したい場合
・retrievePaymentIntent関数を使用してクライアントシークレットを渡すことで、それを個別に取得できる
(async () => {
 let {paymentIntent, error} = await stripe.retrievePaymentIntent(clientSecret);
 if (error) {
   // Handle error here
 } else if (paymentIntent && paymentIntent.status === 'succeeded') {
   // Handle successful payment here
 }
})();

Stripe Q36。What is the difference between “stripe.handleCardPayment (clientSecret)” and “stripe.retrievePaymentIntent (clientSecret)”?

サーバーでPaymentIntentのステータスを確認する


手動確認を使用してサーバーで支払いを完了するとき
・PaymentIntentのstatusプロパティを調べて支払いが正常に完了したかどうかを判断できる

支払いが3Dセキュア認証などの追加のアクションを必要とする場合
・PaymentIntentのステータスはrequire_actionに設定される
・支払いが成功すると、ステータスは「成功」に設定され、支払いは完了する
・支払いが失敗した場合、ステータスはneeds_payment_methodに設定される

Webhookを使ってPaymentIntentを監視する


Webhookイベントをサーバーへ送信
・Stripeは、 PaymentIntentのstatusが変化したときに通知するために、 Webhookイベントをサーバーに送信できる
・これは、 自動確認を使用するときに顧客が購入した商品およびサービスをいつ履行するかを決定するなどの目的に役立つ

非同期で完了を処理
・顧客は支払いが完了した後、フルフィルメントプロセスが開始される前にページを離れる可能性があるため、システムではクライアント側で注文のフルフィルメントを処理しないでくれ
・代わりに、Webフックを使用してpayment_intent.succeededイベントを監視し、クライアント側で履行を開始するのではなく非同期でその完了を処理することを強くお勧めする

ポーリング使用は注意が必要
・非同期操作による変更を監視するためにwebhookの代わりにポーリングを使用してPaymentIntentを繰り返し取得し、そのステータスを確認することは技術的には可能だが、これは信頼性が著しく低く、大規模で使用すると問題が生じる可能性がある
・StripeはAPIリクエストにレート制限を強制するため、ポーリングを使用することにした場合は注意が必要だ

Webフックイベントを処理するには
・サーバー上にルートを作成し、ダッシュボードで対応するWebフックエンドポイントを設定する
・支払いが成功した場合、Stripeはpayment_intent.succeededイベントを送信し、支払いが成功しなかった場合はpayment_intent.succeededイベントを送信する

Webhookペイロードには
・PaymentIntentオブジェクトが含まれている

次の例は、両方のイベントを処理する方法を示している
・PaymentIntentsデモ9-1
// You can find your endpoint's secret in your webhook settings
$endpoint_secret = 'whsec_...';

$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = null;

try {
 $event = \Stripe\Webhook::constructEvent(
   $payload, $sig_header, $endpoint_secret
 );
} catch(\UnexpectedValueException $e) {
 // Invalid payload
 http_response_code(400); // PHP 5.4 or greater
 exit();
} catch(\Stripe\Error\SignatureVerification $e) {
 // Invalid signature
 http_response_code(400); // PHP 5.4 or greater
 exit();
}

if ($event->type == "payment_intent.succeeded") {
 $intent = $event->data->object;
 printf("Succeeded: %s", $intent->id);
 http_response_code(200);
 exit();
} elseif ($event->type == "payment_intent.payment_failed") {
 $intent = $event->data->object;
 $error_message = $intent->last_payment_error ? $intent->last_payment_error->message : "";
 printf("Failed: %s, %s", $intent->id, $error_message);
 http_response_code(200);
 exit();
}

Stripe Q37。PaymentIntentで支払いを行った後、成功画面を表示させるためにはどうすれば良いですか?
Stripe Q38。Difference between “paymentIntent.status === 'succeeded'” and “payment_intent.succeeded event of Webhook”

支払いが失敗した場合
・PaymentIntentのlast_payment_errorプロパティを調べることで詳細を確認できる
・支払いが完了していないことを顧客に通知し、別の支払い方法でやり直すように促すことができる
・同じPaymentIntentを再利用して、顧客の購入の追跡を続ける

特定のWebhookイベントを処理する


次のリストは、Webhookイベントを処理する方法を説明している
イベント 何が起こった 期待される統合
succeeded 顧客の支払いは成功した 顧客が購入した商品またはサービスを履行する
amount_capturable_updated 顧客の支払いは承認され、回収の準備ができている 支払いに利用できる資金を集める
payment_failed 顧客の支払いがカードネットワークによって拒否されたか、その他の方法で期限が切れた Eメールまたはプッシュ通知で顧客に連絡を取り、別の支払い方法を提供するように促す

PaymentIntentでchargeを特定する


PaymentIntentが顧客から支払いを回収しようとすると、chargeオブジェクトが作成される
・PaymentIntentのchargeプロパティを調べて、試みられたchargeの完全なリストを取得できる

PaymentIntentデモ5
// 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");
$charges = $intent->charges->data;


chargeは時系列の逆順にリストされているため、最新のchargeが配列の先頭になる
・この配列には、最後の成功したcharge金額に加えて、支払い処理中に発生した失敗したcharge額も含まれている

次のアクションを処理する


・省略

リダイレクトによる3D Secure認証の手動処理


・省略

週間人気ページランキング / 4-13 → 4-19
順位 ページタイトル抜粋 アクセス数
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 8
2 Saving Payment Methods / 支払い方法を保存する 3
2 支払い 3
2 「払い戻し」と「チャージバック」の違い | 違い 3
2 EMVCo | クレジットカード仕様(仕様) 3
2 EMVレベル1 / EMVレベル2 / EMVCo とは? 3
3 IBAN | 海外送金(送金) 2
3 プリペイドカード | カード 2
3 ログイン 2
3 振込 | 送金 2
3 Stripe Q73.CheckoutのSessionオブジェクトをcreateする際、'payment_intent_data'内の'metadata'として渡したデータを、webhookで受け取る件について | QA(Stripe) 2
3 Stripe Q55.Checkout\Session::createする際の、'client_reference_id'パラメータと'payment_intent_data.metadata'パラメータの違いについて | QA(Stripe) 2
4 「支払」と「送金」の違い | 違い 1
4 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 1
4 Stripe Payments > Quickstart / クイックスタート | documentation(Stripe) 1
4 資金決済に関する法律(資金決済法)とは?/(1)前払式支払手段 /(2)資金移動業 1
4 Visa Global Security Summits | セキュリティ 1
4 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 1
4 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 1
4 SHOWROOM | ライブ配信サービス(課金販売できるプラットフォーム) 1
2024/4/20 1:01 更新
指定期間人気ページランキング / 2020-5-28 → 2024-4-19
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2009
2 EMVCo | クレジットカード仕様(仕様) 1263
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 942
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 899
5 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 876
5 クレジットカード決済 | 課金 876
6 決済用語 855
7 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 824
8 Omise | 「支払」機能を有する決済系サービス(決済サービス) 767
9 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 761
10 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 738
10 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 738
11 EMVレベル1 / EMVレベル2 / EMVCo とは? 722
12 YouTube | 動画サービス(課金販売できるプラットフォーム) 665
13 プリペイドカード | カード 643
14 EPUB | ファイルフォーマット(電子書籍) 587
15 サブスクリプション | 課金 563
16 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 544
17 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 541
18 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/4/20 1:01 更新