通过 Braintree PayPal 付款总是失败 iOS
Posted
技术标签:
【中文标题】通过 Braintree PayPal 付款总是失败 iOS【英文标题】:Payment via Braintree PayPal always fails iOS 【发布时间】:2018-11-20 11:36:27 【问题描述】:我已经在Braintree ios's GITHub. 上开了一张关于这个的票,只是希望能快速得到一些帮助。问题来了:
正如标题所说,我的付款(在 iOS 中)总是失败。虽然显然,我同事的工作(android)中的付款成功。
我从这里彻底遵循了示例代码和指南:https://developers.braintreepayments.com/guides/paypal/client-side/ios/v4
在 iOS 中,经过所有过程(来自我们服务器的客户端令牌 --> BT SDK --> PayPal 浏览器 --> 应用程序 --> 将 nonce 发送到我们的服务器),我从我们的服务器得到的错误总是:
不支持 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 浏览器过早关闭,这就是为什么我得到的 nonce 总是无效的。这是为什么呢?
【问题讨论】:
【参考方案1】:全面披露:我在 Braintree 工作。如果您还有其他问题,请随时联系 support.
根据您在问题中发布的付款方式 nonce,我能够查看我们的服务器端日志以了解问题所在。
在不提供任何特定API Credentials 的情况下,您的设置中负责generating a client token 的服务器似乎传递了一个与负责使用该付款方式nonce 创建交易的服务器不同的沙箱merchant ID,即导致错误。
您的服务器负责生成客户端令牌,其中包含您的客户端初始化客户端 SDK 所需的授权和配置详细信息。创建付款方式随机数时,它与客户端令牌授权中指定的商家 ID 相关联。 merchant ID passed during the Transaction Sale call or other API Calls 必须与与该特定付款方式 nonce 相关联的商家 ID 匹配,因此您需要在后端代码中修复此差异。
【讨论】:
非常感谢您的回答。我正在检查这个答案是否真的回答/帮助了这个问题......尽管在我的应用程序中与我的两个项目的 Android 等效项相比,我观察到的是 BT SDK 打开的 Safari 浏览器关闭得太早。在 Android 中,还有最后一个屏幕(稍后我会截图)。 Android 中出现的最后一个屏幕看起来像一个电子邮件确认页面,它也出现在 iOS 中,但只有一秒钟。这会导致问题吗? 赏金将给你,莱伦。感谢您抽出宝贵时间回答这个问题。【参考方案2】:为了其他遇到相同问题的人的利益,请查看我在 Braintree 的 Github 上提交的已关闭票证(上面的链接或此链接:https://github.com/braintree/braintree_ios/issues/405)
这是我的同事,我发现了:
-
我们可以使用这种信用社付款方式成功付款。
但我们无法使用 PAYPAL BALANCE 付款。
以下错误发生在 PayPal 余额选项中。
不支持 PayPal 待付款
所以这个问题的答案是:确保您的客户端中的所有内容都正常工作,并且您使用正确且相同的帐户来存放 clientToken 和您用来支付的 PayPal 帐户。
【讨论】:
以上是关于通过 Braintree PayPal 付款总是失败 iOS的主要内容,如果未能解决你的问题,请参考以下文章