将来の PayPal 支払いを設定する
PayPal 詳細を保存し、後で顧客に請求する方法を紹介します。
Stripe ダッシュボードから継続支払いのサポートを有効にする
継続支払いへのアクセスは、Stripe ダッシュボードから直接リクエストできます。そのためには、支払い方法の設定ページから PayPal を探し、継続支払いセクションの横にある有効にするをクリックします。PayPal の継続支払いにアクセスするには、通常 5 営業日ほどかかるため、保留中のステータスが表示されます。アクセスが許可されると、PayPal の設定ページに継続支払いが表示されます。テスト環境では、継続支払いがデフォルトで有効になります。
Stripe Checkout を使用して、事前に PayPal 支払いの詳細を収集し、後から最終的な金額や支払い日を決定します。この機能の用途を紹介します。
- 支払い方法をウォレットに保存して、以降の購入を効率化する
- サービスの提供後に追加料金を回収する
- サブスクリプションの無料トライアルを開始する
設定前に Customer を作成または取得するサーバー側
以降の支払いに PayPal の支払い方法を再利用するには、Customer に関連付ける必要があります。
顧客がお客様のビジネスでアカウントを作成するときに、Customer オブジェクトを作成する必要があります。Customer オブジェクトの ID を、自社の内部的な顧客の表記に関連付けることにより、保存された支払い方法の詳細を後で取得して使用できます。顧客がアカウントを作成していない場合でも、すぐに Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントの内部表記に関連付けることができます。
Checkout セッションを作成するクライアント側サーバー側
PayPal 支払いを受け付ける前に、顧客は、お客様が Stripe Checkout を通じて今後の支払いに PayPal アカウントを使用することを承認する必要があります。
サーバー側のエンドポイントを呼び出す決済ボタンをウェブサイトに追加して Checkout Session (セッション) を作成します。
<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 に顧客をリダイレクトします。
顧客は支払い方法の詳細を指定すると、success_
にリダイレクトされます。これはお客様のウェブサイト上にあり、支払い方法が正常に保存されたことを顧客に知らせるページです。上記の例のように、success_
に {CHECKOUT_
テンプレート変数を含めて、成功ページでセッション ID を使用できるようにします。
顧客が支払い方法の詳細を提供せずに Checkout セッションでお客様のロゴをクリックすると、Checkout は、cancel_
に移動して、顧客をお客様の Web サイトにリダイレクトします。このページは通常、顧客が Stripe Checkout にリダイレクトされる前に表示していた Web サイトのページです。
注意
次に挙げる理由により、支払い開始の検出時には、success_
へのリダイレクトのみに依存しないでください。
- 悪意を持つユーザが、支払いをせずに
success_
に直接アクセスし、商品やサービスにアクセスできるようになる可能性があります。url - 顧客が支払いの成功後に
success_
に到達するとは限りません。リダイレクトが発生する前に、顧客がブラウザタブを閉じることがあります。url
支払い方法を取得するサーバー側
顧客が支払いの詳細を送信した後に、PaymentMethod (決済手段) オブジェクトを取得します。PaymentMethod は、顧客のPayPal account情報を保存して今後の支払いに利用できるようにします。PaymentMethod は、success_
を使用して同期的に取得することも、Webhook を使用して非同期的に取得することもできます。
顧客が支払いの成功後に必ず success_
に到達するとは限らないため (たとえば、リダイレクトが行われる前に顧客がブラウザータブを閉じることもあります)、PaymentMethod を同期的に取得するか非同期的に取得するかは、ドロップオフの許容度によって異なります。Webhook を使用すると、組み込みでこの種のドロップオフを防止できます。
設定後のイベントを処理するサーバー側
顧客が請求契約を正常に承認したことを確認するには、顧客が支払いステータスページに戻るのを期待するのではなく、Webhook などの方法を使用します。利用者が請求契約を正常に承認すると、SetupIntent は setup_intent.succeeded Webhook イベントを送信します。請求契約の承認が正常に行われなかった場合、SetupIntent は setup_intent.setup_failed Webhook イベントを送信し、requires_
ステータスに戻ります。利用者が PayPal アカウントから請求契約を取り消すと、mandate.updated が送信されます。
構築したシステムをテストする
テスト API キー を使用して PayPal の実装をテストするには、リダイレクトページを表示します。リダイレクトページで支払いを認証することにより、支払い成功のケースをテストできます。PaymentIntent は requires_
から succeeded
に移行します。
ユーザが認証に失敗するケースをテストするには、テスト API キーを使用してリダイレクトページを表示します。リダイレクトページで テスト支払い失敗 をクリックします。PaymentIntent は、requires_
から requires_
に移行します。
支払い方法を将来の支払いに使用するサーバー側
オフセッションで顧客に請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent (支払いインテント) を作成します。
請求する paypal
の手段を見つけるには、Customer に関連付けられた PaymentMethod をリスト表示します。
Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。その他のいくつかのパラメーターを設定して、オフセッション支払いを行います。
- off_session を
true
に設定して、支払いの実行時に顧客が決済フローに存在しないことを示します。これにより、認証が必要な場合は PaymentIntent からエラーが返されます。 - PaymentIntent の confirm プロパティの値を
true
に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。 - payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
ユーザー主導の支払い方法のキャンセルサーバー側
利用者は、PayPal アカウントからサブスクリプション (請求契約) をキャンセルできます。その場合、Stripe は mandate.updated Webhook を送信します。保存された支払い方法を使用する以降の Payment Intents はすべて、有効な同意書を持つ支払い方法に変更されるまで失敗します。サブスクリプションの支払いが失敗すると、ステータスが自動請求設定で設定されたサブスクリプションステータスに変わります。この場合、顧客に失敗を通知して、別の支払い方法で請求する必要があります。