Ответ «Bad Request» на API PredictHQ [«error»: invalid_client] запрос «аутентификации» - PullRequest
0 голосов
/ 27 мая 2019

В настоящее время я пытаюсь сделать запрос на аутентификацию в API PredictHQ с помощью Alamofire.

Я сгенерировал учетные данные клиента в консоли разработчика и перенес их в свой проект.Проблема заключается в том, что я использую URL https://api.predicthq.com/oauth2/token/ в своей функции * receiveJSONData () для получения сетевого статуса моих запросов.

Ниже приведены примеры, которым я следовал на веб-сайте PredictHQ https://developer.predicthq.com/oauth2/ о том, как запрос cURL должен быть отформатирован как.

enter image description here enter image description here

1) Сначала я создал свой класс networkServiceClient

import UIKit
import Alamofire

class networkServiceClient {

    private let token = "GENERATED_TOKEN_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let secret = "GENERATED_SECRET_KEY_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let id = "GENERATED_ID_FROM_PREDICTHQ_API".data(using: String.Encoding.utf8)!.base64EncodedString()
    private let contentType = "application/json"
    private var authURL = URL(string: "https://api.predicthq.com/oauth2/token/")
    private var tokenDataURL = URL(string: "https://api.predicthq.com/v1/events/")

    typealias webResponse = ([[String: Any]]?, Error?) -> Void

    func receiveJSONData(completion: @escaping webResponse){

        let loginString = String(format: "Basic %@:%@", id, secret)

        let postHeaders:HTTPHeaders =  ["Authorization": loginString, "Accept": contentType]

        let params: [String : Any] = ["grant_type": "client_credentials", "scope": "account events signals"]

         //post authentication request
        AF.request(authURL!, method: .post, parameters: params, headers: postHeaders).responseJSON { (response) in

            if let error = response.error {

                completion(nil, error)

            } else if let jsonArray = response.value as? [[String: Any]] {

                completion(jsonArray, nil)

            } else if let jsonDict = response.value as? [String: Any] {

                completion([jsonDict], nil)

            }

        }

}

2) Затем я реализовал его в своем TestingViewingController

import UIKit
import Alamofire


class TestingViewController: UIViewController {

    private let networkingClient = networkServiceClient()
    override func viewDidLoad() {
        super.viewDidLoad()
        networkingClient.receiveJSONData() { (json, error) in
            if let error = error {
                print(error.localizedDescription)
            } else if let json = json {

                print(json.description)
            }

        }

    }

}

3) Наконецвот мой вывод в консоли TestingViewController.

"error": invalid_client

enter image description here

1 Ответ

1 голос
/ 28 мая 2019

Эй, это может быть потому, что вы base64 кодируете client_id и secret отдельно, но они должны быть закодированы вместе (разделены двоеточием), как показано на скриншоте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...