如何使用“分条付款方式”提供符合SCA要求的帐单明细?

时间:2019-04-17 15:47:36

标签: javascript stripe-payments strong-customer-authentication

我正在按照Payment Intents Quickstart中的说明使用“分条付款方式”。如文档所述:

  

为确保集成可以进行SCA,请确保始终向srand()通话提供客户的姓名,电子邮件,账单地址和收货地址(如果有)。

#include <stdio.h>
#include<stdlib.h>
int main(){
int i,n;
time_t t;

n = 5;


srand((unsigned)time(&t)); 


for (i = 0; i < n; i++) {
    printf("%d\n", rand() % 50);
}
return(0);
}

the handleCardPayment doc in the link,我提供的是billing details in the format specified

stripe.handleCardPayment

但是const stripe = Stripe('pk_test_lolnothisisnotreal', { betas: ['payment_intent_beta_3'] }) 返回:

// https://stripe.com/docs/stripe-js/reference#stripe-handle-card-payment
const {paymentIntent, error} = await stripe.handleCardPayment(clientSecret, cardElement, {
  // https://stripe.com/docs/api/payment_methods/create#create_payment_method-billing_details
  payment_method_data: {
    billing_details: {
      address: {
        line1: cardholderAddressLine1.value,
        line2: cardholderAddressLine2.value,
        city: cardholderAddressCity.value,
        state: cardholderAddressState.value,
        country: cardholderAddressCountry.value,
        postal_code: cardholderAddressPostalCode
      },
      name: cardholderName.value,
      email: cardholderEmail.value,
      phone: cardholderPhone.value
    }
  }
})

如何使用Stripe Payment Intent提供符合SCA的账单明细?

1 个答案:

答案 0 :(得分:2)

代码正在传递payment_method_data[billing_details],这是您如何提供详细信息(例如持卡人的账单地址)以使其与创建的PaymentMethod资源相关联的。

但是问题是,这仅在您没有使用旧的beta标志初始化Stripe.js的情况下起作用,其中handleCardPayment会在幕后创建Source对象(src_123)而非{{ 1}}(pm_123)。

这样做时,库会将PaymentMethod转换为payment_method_data,然后导致发送source_data,但是API服务器端拒绝了它,因为它不是有效的参数服务器-侧。

为避免此错误,您需要确保在不带source_data[billing_details]标志的情况下初始化Stripe.js。所以转

betas

进入:

const stripe = Stripe('pk_test_123', {   betas: ['payment_intent_beta_3'] });