我正在使用@stripe/stripe-react-native,并且已经使用公钥将条带提供程序传递给我的
app.js
,到目前为止没有任何问题。
在我的组件中,我使用
CardField
,并使用 cardDetails
设置 useState
。
我想用这个获得
paymentMethodId
:
const {error, paymentMethod} = await stripe.createPaymentMethod({
paymentMethodType: 'Card',
paymentMethodData: {
cardDetails,
billingDetails: {
name: checkout.payment.fullName,
},
});
if (error) {
console.log(error);
return;
}
但是无法获取它,如日志所示:
LOG {"code": "Failed",
"declineCode": null,
"localizedMessage": "Card details not complete",
"message": "Card details not complete",
"stripeErrorCode": null,
"type": null}
cardDetails
等于:
LOG {"brand": "Visa",
"complete": true,
"expiryMonth": 5,
"expiryYear": 25,
"last4": "4242",
"validCVC": "Valid",
"validExpiryDate": "Valid",
"validNumber": "Valid"}
我尝试了多种方法来编写参数,但我看到
createPaymentMethod
正在等待这个:
export declare type CardParams = {
paymentMethodType: 'Card';
paymentMethodData?: {
token?: string;
billingDetails?: BillingDetails;
};
} | {
paymentMethodType: 'Card';
paymentMethodData: {
paymentMethodId: string;
cvc?: string;
billingDetails?: BillingDetails;
};
};
其中不包括卡详细信息。
我很困惑,错误告诉我要提供卡的详细信息,因为知道它不是由
await
createPaymentMethod
编辑的。
我还了解到我不需要提供银行卡详细信息,但我不明白如果不提供,我将如何获得
paymentMethodId
。无论如何我都尝试过,结果是相同的错误消息。
SDK 应自动从
CardField
收集卡详细信息,因此您不需要显式传递这些信息。相反,您只传递额外的 billingDetails
(例如地址)。请参阅使用 CardField
此处的示例:
const billingDetails: BillingDetails = {
email: '[email protected]',
phone: '+48888000888',
address: {
city: 'Houston',
country: 'US',
line1: '1459 Circle Drive',
line2: 'Texas',
postalCode: '77063',
},
}; // mocked data for tests
// 2. Create payment method
const { paymentMethod, error } = await createPaymentMethod({
paymentMethodType: 'Card',
paymentMethodData: { billingDetails },
});