繁体   English   中英

如何在条带中更新信用卡付款

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM