我正在切换付款方式,并试图重复使用已保存的卡。 (reactive-stripe-elements)
此操作现在效果很好,而不是
stripe.handleCardPayment(intentData.client_secret);
(如文档中所建议),我正在使用以下内容,因为这可行。
stripe.confirmPaymentIntent(intentData.client_secret)
第一个错误总是出现,卡号没有填写-好像总是以同一页面上的react-elements-forms作为基础。
工作正常,直到现在我都可以用保存的卡付款,但是现在我用“需要所有交易进行身份验证”卡进行了测试:4000002760003184
当我使用confirmPaymentIntent时,它只会停留在以下状态:[状态] => require_source_action
如果需要,我将如何处理和显示“确认”对话框,就像使用handleCardPayment方法一样?
所有交易均发生在页面上,并通过react-stripe-elements触发。
答案 0 :(得分:0)
每当您初始化了一个表单(我在同一页上拥有该表单)并且使用了Elements
道具时,好像react-stripe-elements似乎总是采用stripe
表单上下文。 >
当您填写表格以添加新的信用卡时,这很整洁,但是当您不想使用表格数据,而要使用保存的卡时,这确实很烦人。
我请条带支持,他们告诉我,没有办法解决这个问题,所以我四处张望,发现react-stripe-elements只是使用普通的Stripe JS SDk,因此window.Stripe
对象应该是可用的(不在内容之内)以方便地完成此操作。
这就是我为我们解决的方法:
const { stripe } = this.props;
// if we use a saved payment method and the Stripe obj is available
if (isSavedPaymentMethod && typeof Stripe !== 'undefined') {
// don't use the context bound stripe from react-stripe-elements, but the uninitialized Stripe and pass your key
const stripeOutofBound = Stripe(STRIPE_API_KEY);
await stripeOutofBound.handleCardPayment(
intentData.client_secret,
);
} else {
// otherwise use the react-stripe-elements prop directly, that passes the new credit card form data
await stripe.handleCardPayment(
intentData.client_secret,
);
}