Flutter Stripe как установить платежный адрес пользователя и отправить его для создания метода оплаты?

#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/185

3. Это полезная информация, которую нужно знать! На данный момент я действительно использую симулятор iOS на своем компьютере для тестирования

4. Хм .. у меня совсем нет идей. Единственное, что я могу попробовать, это убедиться billingAddress , что карта, которую вы передаете своей createPaymentMethod() функции, соответствует вашим ожиданиям