2016-11-29 138 views
0

我試圖對MapMyFitness API(Oauth2)做一些請求。MapMyFitness API請求上的錯誤403

我可以得到我的Authorization Code與oauth2標識,但現在我需要請求一些路線。

這裏是要求:

Alamofire.request(self.oauthClient.baseURL() + "workout/", 
         method: .get, 
         parameters: nil, 
         headers: authorizationHeader 
        ) 
     .validate() 
     .responseData { [weak self] (response) in 
      switch response.result { 
      case .success(let data): 
       do { 
        let jsonResponse = try JSON(data: data)    
        success(items); 
        self?.isLoading = false; 
       } catch { 
        self?.isLoading = false; 
        failed(nil) 
       } 
       break; 
      case .failure(let error): 
       print(error); 
       self?.isLoading = false; 
       failed(error) 
       break; 
      } 
    } 

在這裏頭是授權這樣的代碼:

"Authorization": "Bearer ***********************************" 

Here is the doc about the route API : https://developer.underarmour.com/docs/v71_Workout

Alamofire錯誤:

responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(403))

我失去了什麼? Thx

+0

你可以分享你的代碼製作的OAuth2授權?你是用swift3寫的嗎?我試圖找到swift3的任何教程,但沒有什麼在那裏:/ – pawisoon

+0

@pawisoon提出您的代碼和問題的問題,我會盡力回答你。 – Makaille

+0

here:http://stackoverflow.com/questions/43524410/oauth2-for-mapmyrun-using-swift-3 – pawisoon

回答

0

問題出現!

如果您使用的是MapMyFitness API,則必須使用https://www.mapmyfitness.com/v7.1/ url進行驗證,但是當您需要請求路由時,它的地址爲https://api.ua.com/v7.1/

此外,您需要在標頭中添加"api-key"

["Authorization": "Bearer ***********************************", "api-key": client_id] 

您需要在params中設置user_id。

var params = ["user" : self.userID, field_set: "time_series"] as [String : Any] 

這些信息不在文檔中。

這是我最後的請求:

self.authorizationHeader.updateValue(self.clientID, forKey: "api-key") 
var params = ["field_set" : "time_series", 
       "user" : self.userID] as [String : Any] 

Alamofire.request(self.url + "/workout/", 
          method: .get, 
          parameters: params, 
          headers: self.authorizationHeader 
      ) 
      .validate() 
      .responseData { [weak self] (response) in 
       switch response.result { 
       case .success(let data): 
        do { 
         let jsonResponse = try JSON(data: data) 
         success(items); 
        } catch { 
         failed(nil) 
        } 
        break; 
       case .failure(let error): 
        print(error); 
        failed(error) 
        break; 
       } 
     } 
    }