swift 中的 braintree 集成期间需要授权错误

Authorization required error during braintree integration in swift

我正在尝试将 braintree 付款方式集成到我的 swift 代码中,但我被困在这里,它因错误而中断

{"error":{"statusCode":401,"name":"Error","message":"Authorization Required","code":"AUTHORIZATION_REQUIRED"}}

我所做的与 braintree 文档中提到的完全相同。我不知道它需要哪个授权,我确实在 he/she 登录时为用户分配了一个授权令牌,我想知道它是否要求该授权令牌,但是我在这段代码中没有这样的参数应该放置该令牌以生成客户的付款方式令牌。这里执行时的打印语句在日志中给了我这个,“客户端令牌是:

{"error":{"statusCode":401,"name":"Error","message":"Authorization Required","code":"AUTHORIZATION_REQUIRED"}}", I am bit confused in its calling also. I have just started these thing so I am very sorry I have done any obvious mistake. Thanks.

        // TODO: Switch this URL to your own authenticated API

        let clientTokenURL = NSURL(string: "https://braintree-sample- 
         merchant.herokuapp.com/client_token")!
        let clientTokenRequest = NSMutableURLRequest(url: 
         clientTokenURL as URL)
        clientTokenRequest.setValue("text/plain", forHTTPHeaderField: 
         "Accept")
        URLSession.shared.dataTask(with: clientTokenRequest as 
          URLRequest) { (data, response, error) -> Void in
            // TODO: Handle errors
            if let error = error {
                print("Error: \(error.localizedDescription)")

            } else {
                print("in Session")
                let clientToken = String(data: data!, encoding: 
              String.Encoding.utf8)!
                print("Client Token is : \(clientToken)")

            }

            }.resume()
         }

必须在 headers 中提供授权令牌才能避免此错误。相反,这个版本的代码可以正常工作。

       completionHandler:@escaping (_ response: NSDictionary?, _ error: Error?) - 
         > ()) {



        var headers: HTTPHeaders

        // pass the authToken when you get when user login
        let authToken = getAuthorizationToken()

        if(self.isValidString(object: authToken as AnyObject)) {
            headers = ["Authorization": authToken,
                       "Content-Type": "application/json",
                       "Accept": "application/json"]

         } else {
             headers = ["Content-Type": "application/json"]
         }

        AF.request(apiURL, method: .get, parameters: params as? Parameters, 
        encoding: JSONEncoding.default, headers: headers).validate().responseJSON 
    { 
           response in
            self.handleResposne(response: response) { (response, error) in
                completionHandler(response, error)
            }
        }
     }