Checkout Purchase Fulfillment / チェックアウト購入フルフィルメント

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

カテゴリー: documentation  閲覧数:399 配信日:2019-04-10 12:00


docs


Payments > PREPARING FOR SCA > Checkout (new) > Checkout Purchase Fulfillment
Checkout Purchase Fulfillment
チェックアウト購入フルフィルメント
・Checkoutで商品を購入する方法を学ぼう

Checkoutで商品を購入する方法


顧客がCheckoutを使用して支払いを正常に完了すると?
・StripeはsuccessUrlパラメーターで指定した宛先に顧客をリダイレクトする
・通常、支払いが成功したことを顧客に通知するページ

あなたは購入完了確認をsuccessUrlページへのリダイレクトに頼るべきではない
次のように、購入を達成するためにsuccess_urlへのリダイレクトだけに頼らないでくれ
・悪意のあるユーザーは、支払いをせずにsuccessUrlに直接アクセスして、商品やサービスにアクセスする可能性がある
・顧客は、支払いが成功した後に必ずしもsuccessUrlに到達するとは限らない。 リダイレクトが発生する前にブラウザのタブを閉じる可能性がある

ダッシュボードで購入を実現


ユーザーが支払いを正常に完了すると?
・ダッシュボードの支払いリストに新しいエントリとして記録される

リストのエントリをクリックすると?
・支払い詳細ページへ移動する

[ Checkout サマリ ]セクション
・顧客の請求先情報と購入した商品のリストを確認できる
・この情報を使用して、顧客の購入を手動で履行することができる

注意事項
・ダッシュボードの履行(手動によるフルフィルメント)は通常、電子メールで顧客に送信できるデジタル商品に対​​してのみ実用的だ
・実際の商品を含む購入品を処理する予定の場合は、あなたのアプリケーションで出荷詳細を収集する必要がある

!Stripeは、顧客が支払いを正常に完了したときにEメール通知を送信することで、入金についていくのに役立つ。 ダッシュボードを使用して電子メール通知を設定する

Webhookで商品を購入する


Webhookイベント
・StripeはWebhookイベントをあなたのサーバーへ送信して、顧客が支払いを完了したときに通知することができる
・イベント用のハンドラを作成し、それを使用して顧客の購入を履行するために必要なコードをすべて実行できる
・Webフックイベントを処理するには、あなたのサーバー上にHTTPエンドポイントを作成し、ダッシュボードで Webフックエンドポイントを設定する

Checkoutの支払いが成功すると?
・Stripeはcheckout_beta.session_succeededイベントを送信する
・Stripeはcheckout.session.completedイベントを送信する
・Webhookペイロードには、顧客が購入したSKUまたはプランの配列、Checkoutによって作成されたPaymentIntentオブジェクトのID 、およびredirectToCheckout呼び出しで指定されている場合はオプションのclientReferenceIdが含まれている
・clientReferenceIdは、成功した支払いを購入に関連付けるために使用される
・Webhookペイロードには、Customer、PaymentIntent、またはSubscriptionに関する情報を含むCheckout Sessionオブジェクト、およびクライアントでredirectToCheckoutを呼び出すときに指定した場合はオプションでclient_reference_idが含まれる

▼Checkout (new) betaバージョンではなくなった-server デモ1-2
・handle_checkout_session()はユーザ定義関数なので、関数を作成しないと「Uncaught Error: Call to undefined function handle_checkout_session()」エラーが発生する
// 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");

// 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();
}

// Handle the checkout.session.completed event
if ($event->type == 'checkout.session.completed') {
   $session = $event->data->object;

   // Fulfill the purchase...
   //handle_checkout_session($session);
   var_dump($session);
}

http_response_code(200); // PHP 5.4 or greater


Webhook のテストのエラー: Timed out
・しばらく時間を置いて、再度試す

受取例
stdClass::__set_state(array(
  'id' => 'evt_1E6I74JiXAQvfxv3iGbGoRcu',
  'object' => 'event',
  'api_version' => '2019-02-19',
  'created' => 1550757682,
  'data' =>
 stdClass::__set_state(array(
    'object' =>
   stdClass::__set_state(array(
      'object' => 'checkout_beta',
      'client_reference_id' => NULL,
      'display_items' =>
     array (
       0 =>
       stdClass::__set_state(array(
          'currency' => 'jpy',
          'amount' => 10000,
          'type' => 'sku',
          'quantity' => 1,
          'sku' => 'sku_EYUuveVPe61SrH',
       )),
     ),
      'line_items' => NULL,
      'livemode' => false,
      'payment_intent' => 'pi_1E6I6eJiXAQvfxv3IMxgerR9',
   )),
 )),
  'livemode' => false,
  'pending_webhooks' => 1,
  'request' =>
 stdClass::__set_state(array(
    'id' => NULL,
    'idempotency_key' => NULL,
 )),
  'type' => 'checkout_beta.session_succeeded',
))


・Webhookペイロードのpayment_intentプロパティを取得し、PaymentIntentのsource.ownerプロパティを調べることで、顧客の電子メールアドレスと請求先情報を取得できる
・Webhookペイロードのcustomer 、 payment_intent 、およびsubscriptionプロパティで参照されるCustomer、PaymentIntent、またはSubscriptionの各オブジェクトを取得することで、顧客、支払い、または購読に関する情報を取得できる

イベントのポーリングによる購入の実現


/v1/eventsエンドポイントをポーリング
・新しいcheckout.session.completedイベントについて/v1/eventsエンドポイントをポーリングすることで、Checkoutを介して行われた新しい支払いを定期的に確認できる
・その後、新しいcheckout.session.completedイベントを検出したときに顧客の購入を満たすために必要なコードを実行できる

Checkoutの支払いが成功すると
・Stripeはcheckout.session.completedイベントを生成する
・Webhookペイロードには、Customer、PaymentIntent、またはSubscriptionに関する情報を含むCheckout Sessionオブジェクト、およびクライアントでredirectToCheckoutを呼び出すときに指定した場合はオプションでclient_reference_idが含まれる

次の例
・過去24時間のcheckout.session.completedイベントをすべて取得する方法を示している
※2019/4/18時点でコピペするとエラー発生するため、以下修正
・名前空間区切り文字を追加
・"created"パラメータの値は、オブジェクトではなく配列に格納
・$sessionオブジェクトに対するアクセス書式を修正
$events = \Stripe\Event::all([
"type" => "checkout.session.completed",
"created" => [
"gte" => time() - 24 * 60 * 60
]
]);

foreach ($events->autoPagingIterator() as $event) {
$session = $event->data->object;

// Fulfill the purchase...
//handle_checkout_session($session);
var_dump($session);
}



次の表は、 checkout_beta.session_succeeded Webフックに存在するキーと値をまとめたもの
キー 内容 備考
subscription プランが使用された場合は、作成されたサブスクリプションのID -
payment_intent 顧客の支払いに使用された確認済みPaymentIntentのID -
client_reference_id チェックアウトセッションを参照するための一意の文字列。 これは、顧客ID、カートIDなど。 これは購入を履行するために使用することができる オプション。redirectToCheckout呼び出しで指定されている場合のみ、含まれている
display_items 顧客が購入した商品を表すオブジェクトの配列。下表参照 -
Purchase Fulfillment

週間人気ページランキング / 4-19 → 4-25
順位 ページタイトル抜粋 アクセス数
1 YouTube | 動画サービス(課金販売できるプラットフォーム) 7
2 EMVCo | クレジットカード仕様(仕様) 6
3 EMVレベル1 / EMVレベル2 / EMVCo とは? 5
4 クレジットカード決済 | 課金 4
5 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 3
5 Squareは、デジタルコンテンツ(デジタル情報)の配信利用が認められないサービス | 「支払」機能を有する決済系サービス(決済サービス) 3
6 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2
6 Off-session Payments with Payment Intents / Payment Intents を使用したオフセッション支払 2
6 Stripe Q32。Webhook のエンドポイントから適切な値を返さなかったときの停止措置について | QA(Stripe) 2
6 「支払」と「送金」の違い | 違い 2
6 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 2
6 プリペイドカード | カード 2
7 振込 | 送金 1
7 IBAN | 海外送金(送金) 1
7 Stripe Q11。テストAPIで、実際のカード番号を入力したらどうなりますか? | QA(Stripe) 1
7 Stripe Q53.Checkout\Sessionの1回限りの支払いで、決済完了したユーザにだけページ表示させたい | QA(Stripe) 1
7 ツイキャスとは?/ 特徴 / キートスとは? 1
7 note | 課金販売できるプラットフォーム 1
7 Stripe webhook 配信の問題 / 実際に受け取った警告メールの受信例 1
7 Stripe webhook 配信の問題 | その他エントリー(Stripe) 1
2024/4/26 1:02 更新
指定期間人気ページランキング / 2020-5-28 → 2024-4-25
順位 ページタイトル抜粋 アクセス数
1 Stripeアカウントへログインする際、モバイル端末で受信したコード入力を求められる理由は? | その他エントリー(Stripe) 2010
2 EMVCo | クレジットカード仕様(仕様) 1268
3 Stripe Q13。決済成功時に、「請求に紐づけられたメールアドレス」に対して、メール送信したいのですが、 | QA(Stripe) 943
4 Stripe Q16。PaymentIntentの支払いで郵便番号入力を求められる。Radar rules の ZIP code を無効にしているのに | QA(Stripe) 901
5 クレジットカード決済 | 課金 880
6 Twitch | ゲーム実況配信サービス(課金販売できるプラットフォーム) 876
7 決済用語 855
8 Stripe Q50。 Connect 「Standardアカウント」で、自身に連結された子アカウントを、ダッシュボードから削除するには? | QA(Stripe) 824
9 Omise | 「支払」機能を有する決済系サービス(決済サービス) 767
10 Stripe Q1。Stripeにおける個人事業主の定義 | QA(Stripe) 761
11 pixivFANBOX | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 741
12 Stripe Q31。ダッシュボードでの「支払い作成」の見方について | QA(Stripe) 738
13 EMVレベル1 / EMVレベル2 / EMVCo とは? 727
14 YouTube | 動画サービス(課金販売できるプラットフォーム) 670
15 プリペイドカード | カード 645
16 EPUB | ファイルフォーマット(電子書籍) 587
17 サブスクリプション | 課金 563
18 Stripeで"No such token: src"と表示されたら、最初にAPIキーを確認する | Stripe エラー(Stripe) 544
19 Stripe Q74.「お客様のビジネスの詳細」とは何ですか? | Stripe 542
20 ファンティア | クリエイター支援プラットフォーム(課金販売できるプラットフォーム) 482
2024/4/26 1:02 更新