PayPal による支払いを受け付ける
ヨーロッパの企業に広く普及しているデジタルウォレットである PayPal の決済を受け付ける方法をご紹介します。
PaymentIntent を作成するサーバー側
Stripe では、PaymentIntent (支払いインテント) と呼ばれる支払いオブジェクトを使用して、支払いの完了まですべてのステータスを追跡および処理します。サーバーで PaymentIntent
を作成し、回収する金額と通貨を指定します。すでに Payment Intents API を使用したシステムがある場合は、paypal
を PaymentIntent の決済手段タイプリストに追加します。
返される PaymentIntent には client secret が含まれます。これを使用することで PaymentIntent オブジェクト全体を渡すことなく安全に支払いプロセスを完了できます。以降のステップで使用できるように、クライアントに client secret を送り返します。
カスタムの説明を含める
デフォルトでは、PayPal ユーザの購入アクティビティページの注文詳細には、注文金額が表示されます。description
プロパティでカスタムの説明を指定することで、これを変更することができます。
利用するロケールをカスタマイズする
デフォルトで PayPal のオーソリページは、加盟店の国などの変化する要素に基づいて現地化されますが、preferred_
プロパティを使用することで、これを顧客の利用するロケールに設定できます。この値は、小文字 2 文字の言語コード、ハイフン (-
)、大文字 2 文字の国コードの順で構成されている必要があります。たとえば、ベルギー在住のフランス語ユーザーの値は、fr-BE
になります。詳細については、サポート対象のロケールをご覧ください。
PayPal での明細書表記
買い手の銀行明細書に表示される表記は PayPal によって設定され、デフォルトでは PAYPAL *YOUR_
になります。PaymentIntent
の作成時に statement_
を設定した場合、合計 22 文字を上限として、その値が PayPal によって設定された値に付加されます。
たとえば、PayPal のビジネス名が BUSINESS
であり、statement_
に order_
を設定する場合、買い手の銀行口座明細書には PAYPAL *BUSINESS order
と表示されます。
Stripe に支払いを送信するクライアント側
顧客が PayPal での支払いをクリックしたときに、Stripe.js を使用してその支払いを Stripe に送信します。Stripe.js は、決済フローを構築するための基本的な JavaScript ライブラリです。このライブラリにより、以下で説明するリダイレクトなどの複雑な処理が自動的に行われ、他の決済手段にも対応できるように実装を拡張できます。Stripe.js スクリプトを決済ページに含めるには、HTML ファイルの head
にこのスクリプトを追加します。
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>
決済ページで以下の JavaScript を使用して、Stripe.js のインスタンスを作成します。
// Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe(
);'pk_test_TYooMQauvdEDq54NiTphI7jx'
クライアント側で支払いを作成するには、ステップ 2 で作成した PaymentIntent
オブジェクトの client secret を渡します。client secret は、 Stripe API リクエストを認証する API キーとは異なります。client secret は支払いを完了できるため、慎重に取り扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。
PayPal 支払いを確定する
stripe.confirmPayPalPayment を呼び出し、顧客を PayPal にリダイレクトして支払いを完了します。return_
を追加して、支払いを完了した後に Stripe が顧客をリダイレクトする場所を示します。
// Redirects away from the client const {error} = await stripe.confirmPayPalPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { return_url: 'https://example.com/checkout/complete', } ); if (error) { // Inform the customer that there was an error. }
PayPal の売上を PayPal で処理する場合、支払いに関連付けられた取引残高の金額は、支払い額に関係なくゼロになります。取引は Stripe 残高における入出金を表すものですが、PayPal では、売上が PayPal 残高で処理され、Stripe 残高に資金が移動しません。この場合の取引残高には、取引に伴う手数料も含まれます。売上処理の設定に関するその他の重要事項については、こちらで詳細をご覧ください。
リダイレクトを処理する
Stripe が顧客を return_
にリダイレクトする際に、以下の URL クエリパラメータが提供されます。
パラメータ | 説明 |
---|---|
payment_ | PaymentIntent の一意の識別子。 |
payment_ | PaymentIntent オブジェクトの client secret。 |
return_
を指定する際に、独自のクエリパラメータを追加することもできます。このクエリパラメータは、リダイレクトプロセスの始めから終わりまで存続します。return_
は、支払いのステータスを提供する Web サイトのページと一致している必要があります。戻りページをレンダリングするときに、PaymentIntent
のステータスを確認してください。確認するには、Stripe.js の retrievePaymentIntent
関数を使用し、payment_
を渡します。
(async () => { const url = new URL(window.location); const clientSecret = url.searchParams.get('payment_intent_client_secret'); const {paymentIntent, error} = await stripe.retrievePaymentIntent(clientSecret); if (error) { // Handle error } else if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment } })();
payment_method_details プロパティには、支払い者の氏名、メールアドレス、支払人 ID、取引 ID が含まれています。
フィールド | 値 |
---|---|
payer_ | PayPal アカウントの支払人のメールアドレス。 |
payer_ | PayPal アカウントの支払人の名前。 |
payer_ | 支払人の PayPal アカウントの一意の ID。 |
transaction_ | PayPal によって生成された一意の取引 ID。 |
{ "charges": { "data": [ { "payment_method_details": { "paypal": { "payer_id": "H54KFE9XXVVYJ", "payer_email": "jenny@example.com", "payer_name": "Jenny Rosen", "transaction_id": "89W40396MK104212M" }, "type": "paypal" }, "id": "src_16xhynE8WzK49JbAs9M21jaR", "object": "source", "amount": 1099, "client_secret": "src_client_secret_UfwvW2WHpZ0s3QEn9g5x7waU", "created": 1445277809, "currency": "eur", "flow": "redirect",