代码之家  ›  专栏  ›  技术社区  ›  Glenn Posadas

通过BealTrayPayPal付款总是失败的iOS

  •  3
  • Glenn Posadas  · 技术社区  · 6 年前

    我已经开了一张关于这件事的票 Braintree iOS's GITHub. 只是希望尽快得到帮助。问题来了:

    正如标题所说,我的支付(在iOS中)总是失败。虽然很明显,我同事的工作(android)中的付款成功了。

    我在这里完全遵循了样本代码和指南: https://developers.braintreepayments.com/guides/paypal/client-side/ios/v4

    在IOS中,在所有的进程(客户机令牌来自我们的服务器-GT;BT SDK)& GT;Paypal浏览器& & APP & gt;发送NoCe到我们的服务器),我从服务器得到的错误总是:

    不支持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 回复  |  直到 6 年前
        1
  •  5
  •   Lairen    6 年前

    全面披露:我在Braintree工作。如果您还有任何问题,请随时联系 support

    根据您在您的问题中发布的付款方法,我可以查看我们的服务器端日志,看看问题是什么。

    不透露任何细节 API Credentials ,似乎是负责 generating a client token 在您的设置中传递不同的沙盒 merchant ID 而不是负责使用该付款方式nonce创建事务的服务器,这将导致错误。

    服务器负责生成客户端令牌,其中包含客户端初始化客户端sdk所需的授权和配置详细信息。创建付款方法nonce时,它将绑定到客户端令牌授权中指定的商户ID。这个 merchant ID passed during the Transaction Sale call or other API Calls 必须与绑定到该特定支付方法nonce的商家id匹配,因此您将需要在后端代码中修复此差异。

        2
  •  2
  •   Glenn Posadas    6 年前

    为了让其他遇到同样问题的人受益,请查看我在Braintree的GitHub上提交的已关闭罚单(上面的链接或以下链接: https://github.com/braintree/braintree_ios/issues/405 )

    这是我的同事和我发现:

    1. 我们可以成功地使用这个信用合作社付款方式。
    2. 但我们不能支付贝宝余额。
    3. 下面的错误发生在贝宝平衡选项。

    PayPal未决付款不支持

    所以这个问题的答案是:确保你的客户机中的每件东西都在工作,并且你使用正确的和相同的帐户来为你使用的Client令牌和PayPal帐号支付费用。