[英]How to update credit card payment in stripe
我有一个使用 nodejs 和 reactjs 的流程,让用户订阅我的网站。 所以当用户登录时,他可以看到一些包。 当用户选择一个包并输入卡详细信息时,我执行以下操作:
1 - 根据用户详细信息(姓名、电子邮件等,自用户登录后获取)创建新客户
2 - 根据选择的 price_id 为新创建的客户创建订阅
3 - 在前端收集卡号/cvc/到期日期:
const cardElement = elements.getElement(CardElement);
4 - 从前端调用条带:
const { error, paymentIntent } = await stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: cardElement,
billing_details: {
name: name,
}
}
});
我不确定这是否是最好的流程。 但是,它正在起作用。 我还设法更新订阅并取消订阅。 但是,我很难更改信用卡详细信息。 我从文档中了解到,我应该使用与创建卡付款时相同的调用。 所以我再次收集信用卡号并再次调用相同的函数:
const { error, paymentIntent } = await stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: cardElement,
billing_details: {
name: name,
}
}
});
但是,调用是为了:
https://api.stripe.com/v1/payment_intents/pi_XXXX/confirm
并返回带有此信息的 400:
type: "invalid_request_error", code: "payment_intent_unexpected_state", doc_url: "https://stripe.com/docs/error-codes/payment-intent-unexpected-state"
我应该使用其他东西来更新信用卡信息吗? 还是我用错误的方式调用它?
您调用confirmCardPayment()
初始流程是正确的,这也是 Stripe 文档中推荐的内容: https : confirmCardPayment()
。
很难更改信用卡详细信息。 我从文档中了解到,我应该使用与创建卡付款时相同的调用。
要仅收集卡详细信息并创建 PaymentMethod,您应该从 Stripe.js 调用createPaymentMethod()
[0]。 这会将客户的卡转换为像 pm_123 这样的 PaymentMethod。
然后,您将该 PaymentMethod 发送到您的后端服务器,在那里(使用您的服务器端 Stripe API 库,如 stripe-node),您将其附加到 Stripe 客户 [1] 并更新为客户的默认 PaymentMethod 以进行定期付款[ 2]。
[0] https://stripe.com/docs/js/payment_methods/create_payment_method
[1] https://stripe.com/docs/api/payment_methods/attach
[2] https://stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.