Confirmation Tokensに移行する
PaymentMethod の代わりに ConfirmationToken を使用して、サーバーで支払いを確定します。
このガイドを使用して、PaymentMethod ではなく、ConfirmationToken を使用してサーバーで支払いを確定し、クライアントから収集したデータを自社のサーバーに送信する方法をご覧ください。
ConfirmationToken
は、配送先情報など、PaymentMethod
で見つかったデータのスーパーセットを保持し、Stripe が構築した新しい機能を有効化します。
確認トークンを作成するクライアント側
stripe.createPaymentMethod を呼び出すのではなく、stripe.createConfirmationToken を呼び出して、ConfirmationToken
オブジェクトを作成します。この ConfirmationToken をサーバーに渡して PaymentIntent を確定します。
stripe.
メソッドは、(params.payment_method_data を介して) stripe.
と同じパラメーターを受け付けます。このほか、shipping と return_url パラメーターも受け付けます。
// Create the PaymentMethod using the details collected by the Payment Element. const {error, paymentMethod} = await stripe.createPaymentMethod({ elements, params: { billing_details: { name: 'Jenny Rosen', } } }); if (error) { // This point is only reached if there's an immediate error when creating the PaymentMethod. // Show the error to your customer (for example, payment details incomplete) handleError(error); return; } // Create and confirm the PaymentIntent const res = await fetch("/create-confirm-intent", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ paymentMethodId: paymentMethod.id, }), });
// Create the ConfirmationToken using the details collected by the Payment Element and additional shipping information. Provide shipping and return_url if you don't want to provide it when confirming the intent on the server const {error, confirmationToken} = await stripe.createConfirmationToken({ elements, params: { payment_method_data: { billing_details: { name: 'Jenny Rosen', } }, // Remove shipping if you're collecting it using Address Element or don't require it shipping: { name: 'Jenny Rosen', address: { line1: '1234 Main Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94111', }, }, return_url: 'https://example.com/order/123/complete', } }); if (error) { // This point is only reached if there's an immediate error when creating the ConfirmationToken. // Show the error to your customer (for example, payment details incomplete) handleError(error); return; } // Create and confirm the PaymentIntent const res = await fetch("/create-confirm-intent", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ confirmationTokenId: confirmationToken.id, }), });
決済を作成して Stripe に送信するサーバー側
以前のように PaymentMethod ではなく、ConfirmationToken をサーバーに渡してPaymentIntent を確定します。ConfirmationToken
に保存されたプロパティは、確定時に ID が confirmation_token パラメーターに指定されたときに、Intent に適用されます。
注
ConfirmationToken にすでに shipping と return_url を指定している場合、 PaymentIntent を確定する際に、これらのフィールドを再度指定する必要はありません。
app.post('/create-confirm-intent', async (req, res) => { try { const intent = await stripe.paymentIntents.create({ confirm: true, amount: 1099, currency: 'usd', // In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. automatic_payment_methods: {enabled: true}, use_stripe_sdk: true, // the PaymentMethod ID sent by your client payment_method: req.body.paymentMethodId, return_url: 'https://example.com/order/123/complete', mandate_data: { customer_acceptance: { type: "online", online: { ip_address: req.ip, user_agent: req.get("user-agent"), }, }, }, shipping: { name: 'Jenny Rosen', address: { line1: '1234 Main Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94111', }, } }); res.json({ client_secret: intent.client_secret, status: intent.status }); } catch (err) { res.json({ error: err }) } });
app.post('/create-confirm-intent', async (req, res) => { try { const intent = await stripe.paymentIntents.create({ confirm: true, amount: 1099, currency: 'usd', // In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. automatic_payment_methods: {enabled: true}, use_stripe_sdk: true, // the ConfirmationToken ID sent by your client that already has the shipping, mandate_data, and return_url data confirmation_token: req.body.confirmationTokenId, }); res.json({ client_secret: intent.client_secret, status: intent.status }); } catch (err) { res.json({ error: err }) } });
確定時に PaymentIntent または SetupIntent に直接指定されるパラメーター (shipping
など) は、ConfirmationToken の対応するプロパティーを上書きします。