Having a weird issue here. Following the docs, I am attaching the PaymentMethod to an existing customer, but it's not working. Roughly, I:
The code:
stripe.Customer.create(email=user.email, name=user.full_name)
stripe.PaymentIntent.create(amount=amount, currency="aud", customer=user.stripe_customer_id)
Stripe('{{ stripe_publishable_key }}').elements().create("card");
stripe.confirmCardPayment('{{ clientSecret }}', {
payment_method: {
card: card,
billing_details: {
// name: 'Jenny Rosen'
},
}
}).then(function (result) {
if (result.error) {
// Show error to your customer (e.g., insufficient funds)
console.log(result.error.message);
var displayError = document.getElementById('card-errors');
displayError.textContent = result.error.message;
} else {
// The payment has been processed!
if (result.paymentIntent.status === 'succeeded') {
// Show a success message to your customer
// There's a risk of the customer closing the window before callback
// execution. Set up a webhook or plugin to listen for the
// payment_intent.succeeded event that handles any business critical
// post-payment actions.
$('#fake-submit').click();
}
}
});
stripe.PaymentMethod.attach(stripe.PaymentIntent.retrieve(intent_id).payment_method, customer=user.stripe_customer_id)
Request req_request_id: This PaymentMethod was previously used without being attached to a Customer or was detached from a Customer, and may not be used again.
Visit the Manage payment methods for your connected accounts page in your Dashboard to configure which payment methods your connected accounts accept. Changes to default settings apply to all new and existing connected accounts. Your connected accounts accept this payment method during checkout.
It looks like there is an issue with the Stripe documentation.
On https://stripe.com/docs/payments/save-after-payment#web-collect-card-details they have:
setup_future_usage: 'off_session'
But on https://stripe.com/docs/payments/save-and-reuse#web-collect-card-details they are missing this critical line.
But in your case, does the user select if they want to save their card on the frontend? Then you don't need to save the card on the backend and can save it in the confirmCardPayment
call: https://stripe.com/docs/js/payment_intents/confirm_card_payment#stripe_confirm_card_payment-data-save_payment_method :
save_payment_method
booleanIf the
PaymentIntent
is associated with a customer and this parameter is set totrue
, the provided payment method will be attached to the customer. Default isfalse
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With