使用已保存的卡进行React-Stripe-Elements handleCardPayment付款

时间:2019-08-22 22:59:14

标签: reactjs stripe-payments react-stripe-elements

我正在切换付款方式,并试图重复使用已保存的卡。 (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触发。

1 个答案:

答案 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,
  );
}