Как я могу получить access_token через Поток учетных данных клиента в Spotify с помощью Аламофайр?
Вот мой код:
// Spotify API
func callAlamo(url: String) {
let parameters = ["client_id" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"client_secret" : "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"grant_type" : "client_credentials"]
let headers = ["Authorization" : "Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] // <- xxx is the client_id
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters, headers: headers).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
}
Вот раздел моего журнала печати:
SUCCESS
Optional({ error = "invalid_client"; })
Что не так с этим кодом? Я отправляю неправильные параметры или заголовки? Я что-то забыл?
Примечание:client_id и client_secret верны
- Если что-то неясно, напишите мне -





Спустя несколько дней и 2 вопроса я понял это сам. Это было чрезвычайно простое исправление, которое разочаровывает.
Все, что я сделал, это удалил параметр headers в запросе.
Другой вариант - установить headers на nil.
Alamofire.request("https://accounts.spotify.com/api/token", method: .post, parameters: parameters).responseJSON(completionHandler: {
response in
print(response.result)
print(response.result.value)
})
Я не знаю, как это работает. Теоретически правильное исполнение: - Сделайте POST-запрос на url: https://accounts.spotify.com/api/token
установить как заголовки:
"Content-Type": "application / x-www-form-urlencoded"
«Авторизация»: «Базовая xxxxx»
Где xxxxx - это строка client_id: client_secret в кодировке base64 (поэтому строка client_id и client_secret разделены :)
Это даст вам правильный ответ
например.
{
"access_token": "BQCJeyp3ocQZzSksvNn3IXuvY0NsYI26YMF400jp-7Dd8zGz6ecXyywwmSdy4jrPWwLZA_6l4e59lu8dYfg",
"token_type": "Bearer",
"expires_in": 3600,
"scope": ""
}
О да, я понял. Но все равно это не правильно. Я не знаю, почему работает, но вы знаете, это зависит от вас, если вы хотите понять, как правильно показывает руководство по Spotify :) В «потоке кода авторизации» они говорят: An alternative way to send the client id and secret is as request parameters (client_id and client_secret) in the POST body, instead of sending them base64-encoded in the header. Может быть, это действительно даже в Поток учетных данных клиента
Вчера вечером я загрузил свой ответ, все, что я сделал, это удалил заголовки и получил правильный результат