Migration zu Bestätigungstoken
Schließen Sie Zahlungen auf dem Server mithilfe eines ConfirmationToken anstelle einer PaymentMethod ab.
In diesem Leitfaden erfahren Sie, wie Sie Zahlungen auf dem Server abschließen, indem Sie ein ConfirmationToken anstelle einer PaymentMethod verwenden, um von Ihrem Client erfasste Daten an Ihren Server zu übertragen.
Ein ConfirmationToken
enthält eine Obermenge der auf einer PaymentMethod
gefundenen Daten, wie zum Beispiel Versandinformationen, und ermöglicht neue Funktionen, während wir diese entwickeln.
Bestätigungstoken erstellenclientseitig
Rufen Sie anstatt stripe.createPaymentMethod den Parameter stripe.createConfirmationToken auf, um ein ConfirmationToken
-Objekt zu erstellen. Übergeben Sie dieses ConfirmationToken an den Server, um den PaymentIntent zu bestätigen.
Die Methode stripe.
akzeptiert die gleichen Parameter wie stripe.
(über params.payment_method_data) sowie zusätzliche Parameter für shipping und die 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, }), });
Zahlung erstellen und an Stripe übermittelnserverseitig
Sie übergeben nun das ConfirmationToken an den Server, um den PaymentIntent zu bestätigen. Dies ersetzt die vorherige Methode, bei der Sie die PaymentMethod übergeben haben. Die im ConfirmationToken
gespeicherten Eigenschaften werden auf den Intent angewendet, wenn ihre ID dem Parameter confirmation_token zum Zeitpunkt der Bestätigung zur Verfügung gestellt wird.
Notiz
Wenn Sie shipping und return_url bereits auf dem ConfirmationToken angeben, müssen Sie diese Felder nicht erneut angeben, wenn Sie den PaymentIntent bestätigen.
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 }) } });
Alle Parameter, die zum Zeitpunkt der Bestätigung direkt dem PaymentIntent oder SetupIntent zur Verfügung gestellt werden, wie zum Beispiel shipping
überschreiben die entsprechenden Eigenschaften des ConfirmationToken.