2017-09-05 4 views
-1

-Code hierMit Yelp Fusion API in schnellen App nicht authentifizieren, kontinuierlich "VALIDATION_ERROR"

let link = "https://api.yelp.com/oauth2/token" 
guard let url = URL(string: link) else { return } 

// Headers 
let headers = [ 
    "content-type": "application/x-www-form-urlencoded" 
] 

guard let clientID = infoPlist(withKey: "YELP_API_CLIENT_ID"), 
    let clientSecret = infoPlist(withKey: "YELP_API_CLIENT_SECRET") else { return } 

let body = "client_id=\(clientID)&client_secret=\(clientSecret)&grant_type=client_credentials" 

var request = URLRequest.init(url: url) 
request.httpMethod = "POST" 
request.allHTTPHeaderFields = headers 
request.httpBody = body.data(using: .utf8) 

Was empfangen, wie ich weiß, das arbeiten sollte. Basierend auf allem, was ich gelesen habe, ist dies der richtige Prozess für die Authentifizierung mit Yelp Fusion/v3.

Antwort

1

Sie nicht Ihren gesamten Code schreiben, aber mit einigen geringfügigen Änderungen des Code funktioniert:

let appId = "xxx" 
let appSecret = "yyy" 
let link = "https://api.yelp.com/oauth2/token" 
let url = URL(string: link)! 

let bodyData = "client_id=\(appId)&client_secret=\(appSecret)&grant_type=client_credentials".data(using: .utf8)! 

// Headers 
let headers = [ 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Content-Length": "\(bodyData.count)" 
] 

var request = URLRequest(url: url) 
request.httpMethod = "POST" 
request.allHTTPHeaderFields = headers 
request.httpBody = bodyData 

typealias JSON = [String:Any] 
URLSession.shared.dataTask(with: request) { (data, response, error) in 

    guard let data = data, 
     let httpResponse = response as? HTTPURLResponse, 
     httpResponse.statusCode == 200 else { 
      print(error!) 
      return 
    } 

    if let responseJSON = try? JSONSerialization.jsonObject(with:data, options:[]), 
     let parsedJSON = responseJSON as? JSON { 
     let token = parsedJSON["access_token"] 
     let exipration = parsedJSON["expires_in"] 
    } 
}.resume() 
+0

Ja, es landete einen dummen Fehler zu sein, ich anstelle der Anfrage eine URL zur dataTask Funktion übergibt . Zu viele Wörter beginnend mit 'res' – ggworean