Я получил строку PaymentMethodNonce с Braintree, но я не могу найти ее на стороне сервера.Любая подсказка? - PullRequest
0 голосов
/ 22 февраля 2019

Я использую клиент 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 получает пустой словарь, но код ответа success.Не совсем уверен, что происходит, что PaymentMethodNonce.find () не совсем работает.Спасибо за помощь.

1 Ответ

0 голосов
/ 22 февраля 2019

Я понял это.Это было потому, что мой метод оплаты не был защищен от 3D.

...