#firebase #flutter #stripe-payments
#firebase #flutter #stripe-платежи
Вопрос:
У меня возникли некоторые проблемы с настройкой и отправкой на сервер Stripe платежного адреса клиента моего приложения для карты, которую они выбрали для оплаты.
Приведенный ниже код — это то, что я пробовал, но потерпел неудачу:
Future<PaymentMethod> createPaymentMethod(BuildContext context,
Map<String, String> billingAddress, String name, String phoneNumber) async {
StripePayment.setStripeAccount(null);
// Here to add the credit Card
PaymentMethod paymentMethod = PaymentMethod();
print('This is in paymentMethod: ${paymentMethod.toJson()}');
paymentMethod = await StripePayment.paymentRequestWithCardForm(
CardFormPaymentRequest(),
).then((PaymentMethod paymentMethod) {
paymentMethod.billingDetails = BillingDetails(
address: BillingAddress(
line1: billingAddress['Address'],
city: billingAddress['City'],
state: billingAddress['State'],
postalCode: billingAddress['Zip Code']),
name: name,
phone: phoneNumber);
return paymentMethod;
}).catchError((e) {
print('Error Card: ${e.toString()}');
});
paymentMethod != null
? print('Success')
: AwesomeDialog(
context: context,
title: 'Uh oh! A wild error has appeared!',
desc:
'Seems like we cant process this card. Please double check your input or try a different card',
animType: AnimType.SCALE,
dialogType: DialogType.WARNING,
btnOkOnPress: () {})
.show();
return paymentMethod;
}
Все способы оплаты и намерения оплаты выполнены успешно, но в Response Body
from Stripe я все еще получаю только:
"billing_details": {
"address": {
"city": null,
"country": "US",
"line1": null,
"line2": null,
"postal_code": null,
"state": null
},
"email": null,
"name": null,
"phone": null
},
В теле сообщения моего ответа у меня только:
{
"amount": "5178",
"currency": "usd",
"payment_method": "some_payment_method_here",
"confirm": "true",
"confirmation_method": "manual",
"off_session": "false"
}
Как я должен настроить свой код таким образом, чтобы у меня, наконец, был платежный адрес пользователя в теле ответа, чтобы я мог иметь:
"billing_details": {
"address": {
"city": "Sesame Town",
"country": "US",
"line1": "123 Sesame Street",
"line2": null,
"postal_code": 12345,
"state": "Sesame State"
},
"email": "mayorOfSesameStreet@email.com",
"name": "Mayor Sesame",
"phone": 8889990000
},
Заранее спасибо
Комментарии:
1. Помните, что firestore чувствителен к регистру, не могли бы вы попытаться получить данные, используя нижний регистр в вашем коде? например, «адрес» вместо «Адрес»
2. Тело ответа и СООБЩЕНИЕ отправлены из Stripe и в Stripe, а не в firestore.
Ответ №1:
Я предполагаю, что вы используете пакет stripe_payment (https://pub.dev/packages/stripe_payment )? Если у вас уже есть платежный адрес клиента, вы можете предварительно заполнить его, установив CardFormPaymentRequest.prefilledInformation.billingAddress
(https://pub.dev/documentation/stripe_payment/latest/stripe_payment/CardFormPaymentRequest-class.html). Вот как это будет выглядеть в вашем коде:
PaymentMethod paymentMethod = PaymentMethod();
CardFormPaymentRequest req = CardFormPaymentRequest(
prefilledInformation: PrefilledInformation (
billingAddress: BillingAddress(
line1: billingAddress['Address'],
city: billingAddress['City'],
state: billingAddress['State'],
postalCode: billingAddress['Zip Code'],
name: name)));
paymentMethod = await StripePayment.paymentRequestWithCardForm(req).then((PaymentMethod paymentMethod) {
return paymentMethod;
}).catchError((e) {
print('Error Card: ${e.toString()}');
});
Комментарии:
1. Привет, Аманда! Спасибо за ответ. Однако я попробовал ваше решение, я все еще получаю тот же результат: {создано: 1601000055.0, идентификатор: pm_something_here_that_is_replaced, livemode: false, тип: карта, реквизиты для выставления счетов: {адрес: {страна: США}}, карта: {Адресная строка 1: нулевая, адресная строка 2: нулевая, марка: visa, страна: США, срок действия: 4, Срок действия: 2024, финансирование: кредит, last4: 4242}}
2. Немного покопался — вы случайно не используете Android? Похоже, настройка
prefilledInformation
ограничена только iOS github.com/jonasbark/flutter_stripe_payment/issues/1853. Это полезная информация, которую нужно знать! На данный момент я действительно использую симулятор iOS на своем компьютере для тестирования
4. Хм .. у меня совсем нет идей. Единственное, что я могу попробовать, это убедиться
billingAddress
, что карта, которую вы передаете своейcreatePaymentMethod()
функции, соответствует вашим ожиданиям