Ошибка 403 по запросу API MapMyFitness

Я пытаюсь сделать запрос на MapMyFitness API (Oauth2).

Я могу получить 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 ***********************************"

Вот документ об API маршрута: https://developer.underarmour.com/docs/v71_Workout

Ошибка Alamofire:

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

Я что-то пропустил? Спасибо

1 ответ

Решение

Проблема найдена!

Если вы используете MapMyFitness API, вы должны использовать https://www.mapmyfitness.com/v7.1/ URL для аутентификации, но когда вам нужно запросить маршрут, это https://api.ua.com/v7.1/,

Более того, вам нужно добавить в шапку "api-key",

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

и вам нужно установить user_id в params.

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;
                }
        }
    }
Другие вопросы по тегам