我正在按照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的账单明细?
答案 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'] });