将来の PayPal 支払いを設定する
Stripe ダッシュボードから継続支払いのサポートを有効にする
継続支払いへのアクセスは、Stripe ダッシュボードから直接リクエストできます。そのためには、決済手段の設定ページから PayPal を探し、継続支払いセクションの横にある有効にするをクリックします。PayPal の継続支払いにアクセスするには、通常 5 営業日ほどかかるため、保留中のステータスが表示されます。アクセスが許可されると、PayPal の設定ページに継続支払いが表示されます。
Stripe Checkout を使用して、事前に PayPal 支払いの詳細を収集し、後から最終的な金額や支払い日を決定します。この機能が役立つ用途を紹介します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する。
- サービスの提供後に追加料金を回収する。
- サブスクリプションの無料トライアルを開始する。
Stripe を設定するサーバー側
まず、Stripe アカウントが必要です。今すぐご登録ください。
アプリケーションから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。
設定前に Customer を作成または取得するサーバー側
以降の支払いに PayPal の支払い方法を再利用するには、Customer に関連付ける必要があります。
顧客がお客様のビジネスでアカウントを作成するときに、Customer オブジェクトを作成する必要があります。Customer オブジェクトの ID を、自社の内部的な顧客の表記に関連付けることにより、保存された決済手段の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
curl -X POST https://api.stripe.com/v1/customers \ -u "
:"sk_test_4eC39HqLyjWDarjtT1zdp7dc
Checkout セッションを作成するクライアント側サーバー側
PayPal 支払いを受け付ける前に、顧客は、お客様が Stripe Checkout を通じて今後の支払いに PayPal アカウントを使用することを承認する必要があります。
Web サイトにサーバー側のエンドポイントを呼び出す決済ボタンを追加して Checkout セッションを作成します。
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
setup
モードで Checkout セッションを作成して、必要な情報を収集します。Checkout セッションを作成したら、レスポンスで返された URL に顧客をリダイレクトします。
curl https://api.stripe.com/v1/checkout/sessions \ -u
: \ -d "payment_method_types[]"="paypal" \ -d mode=setup \ -d customer=sk_test_4eC39HqLyjWDarjtT1zdp7dc\ -d success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}" \ -d cancel_url="https://example.com/cancel"{{CUSTOMER_ID}}
顧客は決済手段の詳細を指定すると、success_url
にリダイレクトされます。これはお客様のウェブサイト上にあり、決済手段が正常に保存されたことを顧客に知らせるページです。上記の例のように、success_url
に {CHECKOUT_SESSION_ID}
テンプレート変数を含めて、成功ページでセッション ID を使用できるようにします。
顧客が支払い方法の詳細を提供せずに Checkout セッションでお客様のロゴをクリックすると、Checkout は、cancel_url
に移動して、顧客をお客様の Web サイトにリダイレクトします。このページは通常、顧客が Stripe Checkout にリダイレクトされる前に表示していた Web サイトのページです。
注意
次に挙げる理由により、支払い開始の検出時には、success_url
へのリダイレクトのみに依存しないでください。
- 悪意を持つユーザが、支払いをせずに
success_url
に直接アクセスし、商品やサービスにアクセスできるようになる可能性があります。 - 顧客が支払いの成功後に
success_url
に到達するとは限りません。リダイレクトが発生する前に、顧客がブラウザタブを閉じることがあります。
支払い方法を取得するサーバー側
顧客が支払いの詳細を送信した後に、PaymentMethod オブジェクトを取得します。PaymentMethod は、顧客のPayPal account情報を保存して今後の支払いに利用できるようにします。PaymentMethod は、success_url
を使用して同期的に取得することも、Webhook を使用して非同期的に取得することもできます。
顧客が支払いの成功後に必ず success_url
に到達するとは限らないため (たとえば、リダイレクトが行われる前に顧客がブラウザータブを閉じることもあります)、PaymentMethod を同期的に取得するか非同期的に取得するかは、ドロップオフの許容度によって異なります。Webhook を使用すると、組み込みでこの種のドロップオフを防止できます。
Session オブジェクトを含む checkout.session.completed
Webhook を処理します。詳細については、Webhook を設定するをご覧ください。以下は、checkout.session.completed
レスポンスの例です。
{ "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "cancel_url": "https://example.com/cancel", "client_reference_id": null, "customer": null, "customer_email": null, "display_items": [], "mode": "setup", "setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" }
Checkout セッションで作成された SetupIntent の ID である setup_intent
キーの値を書き留めます。SetupIntent は、今後の支払いに利用できるように顧客のPayPal account情報を設定するために使用されるオブジェクトです。この ID を使用して SetupIntent オブジェクトを取得します。
curl https://api.stripe.com/v1/setup_intents/seti_1EzVO3HssDVaQm2PJjXHmLlM \ -u "
:"sk_test_4eC39HqLyjWDarjtT1zdp7dc
設定後のイベントを処理するサーバー側
顧客が請求契約を正常に承認したことを確認するには、顧客が支払いステータスページに戻るのを期待するのではなく、Webhook などの方法を使用します。利用者が請求契約を正常に承認すると、SetupIntent は setup_intent.succeeded Webhook イベントを送信します。請求契約の承認が正常に行われなかった場合、SetupIntent は setup_intent.setup_failed Webhook イベントを送信し、requires_payment_method
ステータスに戻ります。利用者が PayPal アカウントから請求契約を取り消すと、mandate.updated が送信されます。
構築したシステムをテストする
テスト API キー を使用して PayPal の組み込みをテストするには、リダイレクトページを表示します。リダイレクトページで支払いを認証することにより、支払い成功のケースをテストできます。PaymentIntent は requires_action
から succeeded
に移行します。
ユーザが認証に失敗するケースをテストするには、テスト API キーを使用してリダイレクトページを表示します。リダイレクトページで テスト支払い失敗 をクリックします。PaymentIntent は、requires_action
から requires_payment_method
に移行します。
支払い方法を将来の支払いに使用するサーバー側
オフセッションで顧客に請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent を作成します。
請求する paypal
の手段を見つけるには、Customer に関連付けられた PaymentMethod をリスト表示します。
curl -G https://api.stripe.com/v1/payment_methods \ -u "
:" \ -d customer={{CUSTOMER_ID}} \ -d type=paypalsk_test_4eC39HqLyjWDarjtT1zdp7dc
Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。その他のいくつかのパラメーターを設定して、オフセッション支払いを行います。
- off_session を
true
に設定して、支払いの実行時に顧客が決済フローに存在しないことを示します。これにより、認証が必要な場合は PaymentIntent からエラーが返されます。 - PaymentIntent の confirm プロパティの値を
true
に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method は PaymentMethod の ID に、customer は Customer の ID に設定します。
curl https://api.stripe.com/v1/payment_intents \ -u "
:" \ -d amount=1099 \ -d currency=eur \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]"=paypal \ -d payment_method={{PAYMENT_METHOD_ID}} \ -d off_session=true \ -d confirm=truesk_test_4eC39HqLyjWDarjtT1zdp7dc
ユーザー主導の決済手段のキャンセルサーバー側
利用者は、PayPal アカウントからサブスクリプション (請求契約) をキャンセルできます。その場合、Stripe は mandate.updated Webhook を送信します。保存された決済手段を使用する以降の Payment Intents はすべて、有効な同意書を持つ決済手段に変更されるまで失敗します。サブスクリプションの支払いが失敗すると、ステータスが自動請求設定で設定されたサブスクリプションステータスに変わります。この場合、顧客に失敗を通知して、別の決済手段で請求する必要があります。