支払いリクエストボタン非推奨
Apple Pay、Google Pay、または Link を使用する顧客から支払い情報および住所情報を収集します。
レガシーの機能
このページの内容は、レガシーのElementを参照しています。代わりに Express Checkout Element を使用してください。すでに支払いリクエストボタンを実装している場合は、移行ガイドを使用して Express Checkout Element に切り替えてください。
支払いリクエストボタンには以下の制限があります。
デモ
注意
Payment Request Button Element により、購入時にウォレットオプションが動的に表示され、Apple Pay、Google Pay、および Link を一度に導入することができます。または、Express Checkout Element を使用して、複数のワンクリックの支払いボタンを顧客に提供できます。Express Checkout Element と支払いリクエストボタンの機能を比較してください。
顧客がデバイスで Apple Pay または Google Pay を有効にしている場合は、使用しているブラウザーに応じて Apple Pay または Google Pay が表示されます。Link が表示される場合は、次の理由が考えられます。
- Apple Pay または Google Pay をデバイスで有効にしていない。
- 認証済みのアクティブな Link セッションで Chrome を使用している。
ブラウザ + ウォレット | 支払いボタン |
---|---|
Safari + Apple Pay が有効 | Apple Pay |
Chrome + Link 認証済み | Link |
Chrome と Google Pay が有効で、Link が認証されていない | Google Pay |
iOS 16 の Chrome + Apple Pay および Google Pay が有効 | Apple Pay |
任意のブラウザ + 有効な Apple Pay または Google Pay がない | Link |
前提条件
開始前に次のことを実施する必要があります。
各支払いボタンタイプの要件を確認します。
- Apple Pay と Google Pay はインド国内の IP アドレスには表示されないため、それに応じて実装のテストを計画します。
- Apple Pay には、macOS 10.12.1 以降または iOS 10.1 以降が必要です。
- 互換性のあるデバイスは自動的に Google Pay に対応しています。
テスト環境と本番環境の両方で**ドメインを登録して確認**します。
ブラウザーに支払い方法を追加します。 たとえば、Chrome にカードを保存したり、Google Pay アカウントにカードを追加したり、Safari のウォレットにカードを追加したりできます。
HTTPS 経由でアプリケーションを提供します。 この要件は、開発環境と本番環境のいずれにも適用されます。開始するには、ngrok などのサービスを利用する方法もあります。
Stripe Elements を設定するクライアント側
Elements は Stripe.js の一部として利用できます。これをページに含めて、paymentRequestButton
Element に使用されるコンテナーを作成します。
<script src="https://js.stripe.com/v3/"></script> <div id="payment-request-button"> <!-- A Stripe Element will be inserted here. --> </div>
Web サイトを識別するための、Stripe 公開可能 API キーも必要です。
const stripe = Stripe(
, { apiVersion: "2024-11-20.acacia", });'pk_test_TYooMQauvdEDq54NiTphI7jx'
paymentRequest インスタンスを作成するクライアント側
Create an instance of stripe.paymentRequest with all required options.
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 1099, }, requestPayerName: true, requestPayerEmail: true, });
注
requestPayerName
パラメーターを使用して、Apple Pay と Link に関する支払人の請求先住所を収集します。請求先住所を使用して住所の確認を行い、不正な支払いをブロックできます。その他の支払い方法では、請求先住所が使用可能な場合に自動的に収集されます。
paymentRequestButton を作成しマウントするクライアント側
paymentRequestButton
Element を作成し、canMakePayment()
を使用して、顧客が有効な支払い方法を設定しているかを確認します。設定している場合は、Element をコンテナにマウントして、支払いリクエストボタンを表示します。設定していない場合は Element をマウントできないため、代わりに従来の決済フォームを表示することをお勧めします。
注
支払いリクエストボタンを使用して Apple Pay を受け付ける場合は、Apple のガイドラインに沿って、ご自身のウェブサイトで Apple Pay を主要な支払いオプションとして提示する必要があります。内部的には、支払いリクエストボタンでは、Apple Pay の canMakePaymentWithActiveCard
API が使用されます。
const elements = stripe.elements(); const prButton = elements.create('paymentRequestButton', { paymentRequest, }); (async () => { // Check the availability of the Payment Request API first. const result = await paymentRequest.canMakePayment(); if (result) { prButton.mount('#payment-request-button'); } else { document.getElementById('payment-request-button').style.display = 'none'; } })();
PaymentIntent を作成するサーバ側
Stripe は PaymentIntent (支払いインテント) オブジェクトを使用して、顧客から支払いを回収する意図を示し、プロセス全体を通して請求の実施と支払い状態の変化を追跡します。
サーバーで金額および通貨を指定して PaymentIntent
を作成します。支払い額は常に、クライアント側ではなく、信頼性の高い環境であるサーバー側で決定してください。これにより、悪意のある顧客が価格を操作できないようにすることができます。
返される PaymentIntent には client secret が含まれ、これを使用することで PaymentIntent オブジェクト全体を渡すことなく安全に支払いプロセスを完了できます。次のステップで使用するため、クライアントに client secret を送り返します。
支払いを完了するクライアント側
paymentmethod
イベントをリッスンして、PaymentMethod オブジェクトを受け取ります。PaymentMethod ID と PaymentIntent の client secret を stripe.confirmCardPayment に渡して、支払いを完了します。
paymentRequest.on('paymentmethod', async (ev) => { // Confirm the PaymentIntent without handling potential next actions (yet). const {paymentIntent, error: confirmError} = await stripe.confirmCardPayment( clientSecret, {payment_method: ev.paymentMethod.id}, {handleActions: false} ); if (confirmError) { // Report to the browser that the payment failed, prompting it to // re-show the payment interface, or show an error message and close // the payment interface. ev.complete('fail'); } else { // Report to the browser that the confirmation was successful, prompting // it to close the browser payment method collection interface. ev.complete('success'); // Check if the PaymentIntent requires any actions and, if so, let Stripe.js // handle the flow. If using an API version older than "2019-02-11" // instead check for: `paymentIntent.status === "requires_source_action"`. if (paymentIntent.status === "requires_action") { // Let Stripe.js handle the rest of the payment flow. const {error} = await stripe.confirmCardPayment(clientSecret); if (error) { // The payment failed -- ask your customer for a new payment method. } else { // The payment has succeeded -- show a success message to your customer. } } else { // The payment has succeeded -- show a success message to your customer. } } });
注意
ブラウザーによっては、支払いをオーソリした後でも、顧客は支払いインターフェイスを閉じることができます。そのため、paymentmethod
イベントを受け取った後に、PaymentRequest オブジェクトで cancel イベントを受け取る可能性があります。顧客の注文キャンセルのフックとして cancel
イベントを使用している場合は、直前に作成した支払いも必ず返金してください。
組み込みをテストする
実装をテストするには、HTTPS とサポート対象のブラウザーを使用する必要があります。iframe で paymentRequestButton
Element を使用している場合、iframe で allow 属性を =“payment *” に設定する必要があります。
各地域でのテストインド
Stripe Elements は、インドの Stripe アカウントと顧客に対して Google Pay および Apple Pay をサポートしていません。そのため、Stripe アカウントがインド以外を拠点にしていても、テスターの IP アドレスがインドにある場合は、Google Pay または Apple Pay の実装をテストできません。
また、それぞれの支払い方法とブラウザには固有の要件があります。
配送先情報を収集する
配送先情報を収集するには、支払いリクエストの作成時にまず requestShipping: true
を含めます。
配送オプションが顧客の住所に依存しない場合は、この時点で shippingOptions
の配列を指定することもできます。
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 1099, }, requestShipping: true, // `shippingOptions` is optional at this point: shippingOptions: [ // The first shipping option in this list appears as the default // option in the browser payment interface. { id: 'free-shipping', label: 'Free shipping', detail: 'Arrives in 5 to 7 days', amount: 0, }, ], });
次に、shippingaddresschange
イベントをリッスンして、顧客が配送先住所を選択した際にこれを検出します。この住所は、サーバーから有効な配送先オプションを取得したり、合計額を更新したり、その他のビジネスロジックを実行したりするために使用されます。shippingaddresschange
イベントの住所データは、送料計算に必要のない機密情報を公開しないようにするために、ブラウザーで匿名化することができます。
顧客がフローを続行するには、この時点で有効な shippingOptions
を指定する必要があります。
paymentRequest.on('shippingaddresschange', async (ev) => { if (ev.shippingAddress.country !== 'US') { ev.updateWith({status: 'invalid_shipping_address'}); } else { // Perform server-side request to fetch shipping options const response = await fetch('/calculateShipping', { data: JSON.stringify({ shippingAddress: ev.shippingAddress }) }); const result = await response.json(); ev.updateWith({ status: 'success', shippingOptions: result.supportedShippingOptions, }); } });
ラインアイテムを表示
Use displayItems to display PaymentItem objects and show the price breakdown in the browser’s payment interface.
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 2000, }, displayItems: [ { label: 'Sample item', amount: 1000, }, { label: 'Shipping cost', amount: 1000, } ], });
ボタンのスタイルを設定する
Element をカスタマイズするには、以下のパラメータを使用します。
elements.create('paymentRequestButton', { paymentRequest, style: { paymentRequestButton: { type: 'default', // One of 'default', 'book', 'buy', or 'donate' // Defaults to 'default' theme: 'dark', // One of 'dark', 'light', or 'light-outline' // Defaults to 'dark' height: '64px', // Defaults to '40px'. The width is always '100%'. }, }, });
独自のボタンの使用
paymentRequestButton
Element を使用するのではなく、独自のボタンをデザインする場合は、paymentRequest.canMakePayment() の結果に基づいてカスタムボタンを表示できます。この場合は、paymentRequest.show() を使用して、ボタンがクリックされたときにブラウザーインターフェイスを表示します。
自分のボタンを作成する際は、Apple Pay のヒューマンインターフェイスガイドライン、および Google Pay のブランドガイドラインに従ってください。
注意
Link はカスタムのボタン設定ではサポートされていないため、使用する場合、顧客に表示されません。
加盟店が開始した取引に Apple Pay マーチャントトークンを追加する
Apple Pay MPAN をリクエストするための支払いリクエストボタンを設定して、継続支払い、自動の再読み込み、または延べ払いに対する加盟店が開始する取引 (MIT) を円滑に行います。
- 支払いリクエストのインスタンスを作成します。
- MPAN ユースケースに関連する
applePay
オブジェクトを渡します (ドロップダウンから選択して、ユースケースのコードサンプルを確認します)。 - ユースケースに関連するパラメーターを含めます。
Stripe Connect で支払いリクエストボタンを使用する
連結アカウントの Customer に対してダイレクト支払いの作成や、トークンの追加を行う Connect プラットフォームでは、支払いリクエストボタンを使用する際に追加ステップを実行する必要があります。
- フロントエンドで、
PaymentRequest
インスタンスを作成する前に、Stripe インスタンスでstripeAccount
オプションを設定します。
const stripe = Stripe(
, { apiVersion: "2024-11-20.acacia", stripeAccount: 'CONNECTED_STRIPE_ACCOUNT_ID', });'pk_test_TYooMQauvdEDq54NiTphI7jx'
- 支払いリクエストボタンを表示する予定のすべてのドメインを登録します。
支払いリクエストボタンの Link
When new customers come to your site, they can use Link in the Payment Request Button to pay with their saved payment details. With Link, they don’t need to manually enter their payment information. Link requires domain registration.
Stripe について顧客に開示する
Stripe は顧客の Elements とのやり取りに関する情報を収集して、サービスを提供し、不正利用を防止し、サービスを向上します。これには、Cookie と IP アドレスを使用して、1 つの決済フローセッションで顧客に表示する Elements を特定することが含まれます。Stripe がこのような方法でデータを使用するために必要なすべての権利と同意について開示し、これらを取得することはお客様の責任です。詳細については、プライバシーセンターをご覧ください。