ios - 我通过 Braintree 获得了 PaymentMethodNonce 字符串,但我似乎无法在服务器端找到它。有什么线索吗?

标签 ios swift braintree braintree-sandbox

我使用的是 iOS 客户端,并且成功获取 paymentMethodNonce:

let dropInController = BTDropInController(authorization: client, request: request)
    { [unowned self] (controller, result, error) in
        if let error = error {
            print(error.localizedDescription)
            UIAlertController.presentAlert(title: "Uh oh!", message: "Your payment credentials could not be registered. Try again or contact us if you keep having issues.", viewController: parent)
        } else if (result?.isCancelled == true) {
            print("Transaction Cancelled")
        } else if let paymentNonce = result?.paymentMethod?.nonce {
            self.credentialsAdded = true
            print("NONCE: \(paymentNonce)")
            QuAPI.Payment.getPaymentInfo(paymentNonce: paymentNonce){(paymentInfo) in

                print(paymentInfo)
            }

        }

        controller.dismiss(animated: true, completion: {
            if self.credentialsAdded {
                self.getPaymentInfo()
                UIAlertController.presentAlert(title: "Alright!", message: "Your payment credentials have been successfully registered.", viewController: parent)
            }
        })
    }

QuApi的方法在这里:

static func getPaymentInfo(paymentNonce: String, completion: @escaping([String: Any]?)->Void)
    {
        guard var paymentsUrl = URLComponents(string: Constants.BASE_URL + Constants.PAYMENTINFO_URL) else {
            completion(nil)
            return
        }
        paymentsUrl.queryItems = [URLQueryItem(name: Constants.PAYMENTINFO_PARAMS[0], value: paymentNonce)]

        if let url = paymentsUrl.url {
            let request = NSMutableURLRequest(url: url)
            request.setValue("text/plain", forHTTPHeaderField: "Accept")

            URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
                guard let data = data, error == nil else { return }
                do{
                    let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:Any]
                    completion(json)
                }
                catch _ as NSError{
                    completion(nil)
                }
                }.resume()
        }
    }

成功返回 paymentMethodNonce,但是当我传递到服务器端代码时:

app.get('/payment_info', (request, response) => {
var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
var payment_nonce = query["payment_nonce"];
gateway.paymentMethodNonce.find(payment_nonce, function (err, paymentMethodNonce) {
    var info = paymentMethodNonce.threeDSecureInfo;
        if (info) {
            info.enrolled;
            info.status;
            info.liabilityShifted;
            info.liabilityShiftPossible;
            response.send(paymentMethodNonce);
        }       
        else {
            // This means that the nonce was not 3D Secured
            console.log("err: " + err);
            response.send(err);
        }
});

});

iOS 得到一个空字典,但有一个成功响应代码。不完全确定 PaymentMethodNonce.find() 不完全工作是怎么回事。感谢您的帮助。

最佳答案

我明白了。这是因为我的 paymentMethodNonce 没有 3D 安全。

关于ios - 我通过 Braintree 获得了 PaymentMethodNonce 字符串,但我似乎无法在服务器端找到它。有什么线索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54816632/

相关文章:

ios - 如何知道我的数组是否包含字典?

iphone - 无法从其他类调用实例方法

xml - 如何在 Swift 3 中显示带有 XML 解析变量的 Web View ?

braintree - 为什么 transaction_disbursed webhook 被弃用?

ruby-on-rails - 更新 Braintree 交易的订单 ID

ios - 在初始运行时打开不同的 View

ios - Xcode Storyboard 警告 : Constraint referencing items turned off in current configuration. 在当前配置中关闭此约束

ios - 禁用文本字段触摸但仍接受编辑?

ios - 当我按下按钮时,我的游戏崩溃(因 NSException 类型的未捕获异常而终止)

java - Paypal REST API 中的 Braintree 计费协议(protocol) ID 查找