カテゴリー:
Stripe
閲覧数:573 配信日:2019-02-19 15:50
docs
Payments > PREPARING FOR SCA > Checkout (new) > Checkout Server
・Checkout Server Quickstart
・チェックアウトサーバーのクイックスタート
・Checkout Sessions APIを使用して、新しいCheckoutをすばやく開始する方法を学ぶ
Checkout Sessions APIを使用すると
SKUやプランに関連付けられていない「動的な金額」や「この目的のための単位品目」を提供できる
・既存のプランを使用してSubscriptionを作成することもできる
・Checkoutサーバーシステムで、クライアント上でCheckoutを開始するためのセッションをサーバー上に作成する
1.サーバーにチェックアウトセッションを作成する
2.あなたのウェブサイトにチェックアウトを追加する
※Checkoutを使用するには、WebサイトまたはアプリケーションがHTTPS対応でなければならない
ステップ1:サーバーにチェックアウトセッションを作成する
セッションを作成するときに
・Checkoutに1回限りの支払いまたは subscriptions を作成するように指示できる
- | 1回限りの支払い | Subscription |
---|---|---|
渡すパラメータ | line_items | subscription_data |
・機能にアクセスするためにベータフラグ( checkout_sessions_beta=v1 )を追加する必要がある
Stripe-Versionヘッダを設定したら
・新しいCheckoutで使用するCheckoutセッションを作成する準備が整った
・line_itemsまたはsubscription_data 、 cancel_url 、 success_url 、payment_method_typesを提供する必要がある
・セッション作成に使用できるパラメータの完全なリストについてはAPIリファレンスを参照してくれ
1回限りの支払い
・セッションを作成するときにline_itemsパラメータを使用する
・サーバーにチェックアウトセッションを作成する
・「クライアント上でCheckoutを開始するためのセッション」をサーバー上に作成しただけ。「支払いが作成されました」
※支払いはまだ実行されていないから、当然画面遷移もしない
・POST /v1/checkout/sessions
※stripe-phpのバージョンが古いとエラーが発生するので要注意。「v6.28.0」では「Fatal error」発生
・betaバージョンではなくなった(2019/04/16以降)書き方
// 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\Checkout\Session::create([
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [[
'amount' => 500,
'currency' => 'jpy',
'name' => 'T-shirt',
'description' => 'Comfortable cotton t-shirt',
'images' => ['https://www.example.com/t-shirt.png'],
'quantity' => 1,
]]
]);
・betaバージョンの頃(2019/04/15以前)の書き方
▼Checkout (new) beta-server デモ1
// 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\Checkout\Session::create([
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [[
'amount' => 2000,
'quantity' => 2,
'name' => 'Blue banana',
'currency' => 'usd',
'images' => ['https://www.example.com/banana.png']
]]
], [
'stripe_version' => '2018-11-08; checkout_sessions_beta=v1'
]);
subscriptions
・作成するには、セッションを作成するときにsubscription_dataパラメータを使用する
・サブスクリプションの詳細は、基本となるプランによって最初に決定される
・プランは、単価、請求期間、および通貨を決定する
・プランはプランAPIまたはダッシュボードから作成できる
// 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\Checkout\Session::create([
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'subscription_data' => [
'items' => [
[
'plan' => 'plan_xyz',
],
],
],
]);
サーバーシステムによって作成されたセッション
・クライアントシステムによって作成されたセッションとは異なり、planレベルでtrial_period_daysが設定されたサブスクリプションの作成をサポートしない
・ 試用期間を設定するには、subscription_data.trial_period_days引数の値として希望の試用期間を渡してくれ
Stripe.jsシステムには
・session creation API レスポンスからのidフィールドが必要なので、 redirectToCheckoutを呼び出すJavaScriptまたはHTMLファイルでそれを利用できるようにしてくれ
ステップ2:あなたのウェブサイトにチェックアウトを追加する
WebサイトでCheckoutを使用するには
・前の手順で作成したセッションからのidフィールドを含むコードの断片を追加する必要がある
チェックアウトはStripe.jsに依存している
・始めるには、あなたのウェブサイトに次のscriptタグを含めてくれ
・これは常にhttps://js.stripe.comから直接ロードする必要がある
<script src="https://js.stripe.com/v3/"></script>
・次に、publishableなAPIキーを最初のパラメータとして指定して、Stripeオブジェクトのインスタンスを作成する
・betaバージョンではなくなった(2019/04/16以降)書き方
var stripe = Stripe('pk_test_xxxx');
・betaバージョンの頃(2019/04/15以前)の書き方
var stripe = Stripe(
'pk_test_xxxx',
{
betas: ['checkout_beta_4']
}
);
顧客が支払いの準備ができたら
・redirectToCheckoutを呼び出してチェックアウトプロセスを開始する
・これは、セッション作成からのIDをCheckoutのパラメータとして指定する場所だ
stripe.redirectToCheckout({
sessionId: '{{CHECKOUT_SESSION_ID}}'
}).then(function (result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
});
このコードは
・通常、支払いボタンのクリックなど、顧客が行った操作に応答してトリガーされるイベントハンドラーから呼び出される
支払いが成功したら
・あなたは顧客の購入を果たすべきだ
・checkout.session.completedイベントがトリガーされたときに、Webhookを使用して購入を完了できる
・Checkoutを使用した購入履行の処理に関する詳細については、 資料を参照してくれ
「Checkoutによる購入の実現」で説明されている戦略のいずれかを使用してくれ
・次のように、購入を達成するためにsuccess_urlへのリダイレクトだけに頼らないでくれ
・悪意のあるユーザーは、支払いをせずにsuccessUrlに直接アクセスして、商品やサービスにアクセスする可能性がある
・顧客は、支払いが成功した後に必ずしもsuccessUrlに到達するとは限らない。 リダイレクトが発生する前にブラウザのタブを閉じる可能性がある
オプション:顧客データの事前入力
顧客のメールアドレスを既に知っている場合
・顧客が自分の支払い情報を二度入力する必要性を避けるために、あなたは、チェックアウトページに事前に記入したい顧客についての情報をすでに集めているかもしれない
・チェックアウトセッションを作成するときにcustomer_emailを指定することで、チェックアウトページで顧客の電子メールを事前に入力できる
▼Checkout (new) betaバージョンではなくなった-server デモ1
・顧客データ(メールアドレス)を事前入力
\Stripe\Checkout\Session::create([
'customer_email' => 'customer@example.com',
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [
[
'amount' => 500,
'currency' => 'jpy',
'name' => 'T-shirt',
'description' => 'Comfortable cotton t-shirt',
'quantity' => 1,
],
],
]);
※2019/4/17、名前空間おかしいので修正。'currency' => 'jpy'の後の,も追加
既存の顧客を使用する
1回払いをするときに使用するCheckoutの既存のCustomerオブジェクトを指定できる(これはまだプランや subscriptionsでは機能しない)
・そうすると、Checkoutが作成したStripeオブジェクトはその顧客に関連付けられる
・顧客を指定すると、Stripeは顧客に保存されている電子メールもチェックアウトページの電子メールフィールドに入力するために使用する
・顧客が「チェックアウト」ページで自分のEメールを変更すると、支払いが成功した後にその顧客オブジェクトで更新される
・POST /v1/checkout/sessions
・betaバージョンではなくなった(2019/04/16以降)書き方
▼Checkout (new) betaバージョンではなくなった-server デモ2
・顧客データ(メールアドレスのみ)が事前入力される(カード情報は顧客が入力する必要あり)
・入力したカード情報は、顧客に紐づけられるが、デフォルトカード情報が書き換えられるわけではない
・また、何回も支払いを行った場合(しかも同じカード情報を入力して)、同じ顧客に同じカード番号情報による支払い履歴が追加されていく(但しIDは異なる。支払い明細みたいなもの)
\Stripe\Checkout\Session::create([
'customer' => 'cus_xxxx',
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [
[
'amount' => 500,
'currency' => 'jpy',
'name' => 'T-shirt',
'description' => 'Comfortable cotton t-shirt',
'images' => ['https://www.example.com/t-shirt.png'],
'quantity' => 1,
],
],
]);
※2019/4/17、名前空間おかしいので修正。'currency' => 'jpy'の後の,も追加
・betaバージョンの頃(2019/04/15以前)の書き方
▼Checkout (new) beta-server デモ2
\Stripe\\Checkout\\Session::create([
'customer' => 'cus_123123',
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [
[
'amount' => 2000,
'currency' => 'usd',
'name' => 'Blue banana',
'quantity' => 2,
],
],
], [
'stripe_version' => '2018-11-08; checkout_sessions_beta=v1'
]);
・存在しないcustomerを指定するとエラー発生。( ! ) Fatal error: Uncaught Stripe\Error\InvalidRequest: No such customer: cus_123123
※2019/4/11、名前空間おかしいので修正。'currency' => 'usd'の後の,も追加
オプション:許可とキャプチャーを別々にする
・省略