Оплата через Braintree PayPal всегда терпит неудачу iOS - PullRequest
0 голосов
/ 11 июня 2018

Я открыл тикет об этом на GITHub Braintree iOS. Просто надеюсь быстро получить некоторую помощь.Здесь возникает вопрос:

Как видно из названия, мой платеж (в iOS) всегда терпит неудачу.Хотя, по-видимому, платеж в работе моего коллеги (Android) успешен.

Я тщательно следовал образцам кодов и инструкциям отсюда: https://developers.braintreepayments.com/guides/paypal/client-side/ios/v4

В iOS после всего процесса (Client Tokenс нашего сервера -> BT SDK -> браузер PayPal -> приложение -> отправить одноразовый номер на наш сервер), ошибка, которую я получаю с нашего сервера, всегда:

PayPal ожидающие платежине поддерживается.

Мой бэкэнд-парень тоже не знает причину этого, он только показал и дал мне этот журнал:

{
   "errors": {},
   "params": {
       "transaction": {
           "type": "sale",
           "amount": "1",
           "merchantAccountId": "USD",
           "paymentMethodNonce": "80823f63-5ea9-0b8b-67da-0710bd7d9ff1",
           "orderId": "333",
           "descriptor": {
               "name": "company name*myurl.com"
           },
           "options": {
               "submitForSettlement": "true",
               "paypal": {
                   "customField": "custom",
                   "description": "description"
               }
           }
       }
   },
   "message": "Unknown or expired payment_method_nonce.",
   "creditCardVerification": null,
   "transaction": null,
   "subscription": null,
   "merchantAccount": null,
   "verification": null
}

И вот что я делаю при настройкемой SDK:

private func processPayPalClientToken(_ clientToken: String) {
        SVProgressHUD.show(withStatus: "Please wait...")

        self.braintreeClient = BTAPIClient(authorization: clientToken)

        let payPalDriver = BTPayPalDriver(apiClient: self.braintreeClient)
        payPalDriver.viewControllerPresentingDelegate = self
        payPalDriver.appSwitchDelegate = self

        let request = BTPayPalRequest(amount: self.bookingViewModel.getTotalAmount())
        payPalDriver.requestOneTimePayment(request) { (nonce, error) in
            SVProgressHUD.dismiss(completion: {
                if let error = error {
                    self.showAlert(title: "title...", message: "Error: \(error.localizedDescription).", okayButtonTitle: "OK") { _ in }
                    return
                }

                guard let nonce = nonce else { return }

                self.processNonceToServer(nonce)
            })

        }
    }

Итак ... есть идеи, в чем причина этого?Спасибо!

РЕДАКТИРОВАТЬ: Дополнительная информация, которую я нашел некоторое время назад.Браузер SFSafari закрывается слишком рано, поэтому одноразовый номер всегда недействителен.Почему это так?

Ответы [ 2 ]

0 голосов
/ 20 июня 2018

Чтобы воспользоваться преимуществами тех, кто испытывает ту же проблему, ознакомьтесь с моим закрытым билетом, который я подал на Github Брэйнтри (ссылка выше или эта: https://github.com/braintree/braintree_ios/issues/405)

Вот мой коллега и я обнаружил:

  1. Мы можем оплатить успешно, используя этот способ оплаты CREDIT UNION.
  2. НО мы не можем оплатить, используя PAYPAL BALANCE.
  3. Ошибки, подобные приведенным ниже, происходят в опции PayPal Balance.

Ожидающие платежи PayPal не поддерживаются

Поэтому ответ в этом вопросе будет таким: убедитесь, что все в вашем клиенте работает, и выиспользуя правильные и одинаковые учетные записи для clientToken и учетной записи PayPal, которую вы используете для оплаты.

0 голосов
/ 15 июня 2018

Полное раскрытие: я работаю в Braintree.Если у вас есть какие-либо дополнительные вопросы, свяжитесь со службой поддержки .

. В зависимости от того, какой метод оплаты вы указали в своем вопросе, я смог ознакомиться с нашимижурналы на стороне сервера, чтобы увидеть, в чем проблема.

Не выдавая никаких конкретных учетных данных API , создается впечатление, что сервер, ответственный за генерацию клиентского токена в вашей настройке, передает другого продавца Sandbox ID чем сервер, отвечающий за создание транзакции с этим одноразовым способом оплаты, что приводит к ошибке.

Ваш сервер отвечает за генерацию токена клиента, который содержит данные авторизации и конфигурации, которые вашклиент должен инициализировать клиентский SDK.Когда создается одноразовый метод оплаты, он привязывается к идентификатору продавца, указанному в авторизации токена клиента.* Идентификатор продавца , переданный во время вызова транзакции продажи или других вызовов API , должен совпадать с идентификатором продавца, привязанным к этому конкретному методу оплаты, поэтому вам необходимо исправить это несоответствие в коде вашего бэкенда.

...