Я использую @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.info(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 },
});
Ранее я пытался объявить свойства billingDetails непосредственно в параметрах, но это не сработало. Но это сработало, как только я инициализировал BillingDetails в константе, прежде чем передавать их в параметрах, как вы предложили. Возможно, я сделал это неправильно, когда попробовал сначала. В любом случае, благодарю Вас!