Однако во время обмена токеном я получаю следующую ошибку:
{
"error": "invalid_grant",
"error_description": "the provided authorization grant code is invalid or was issued to another client"
}
Текущая реализация
- Создание URL-адреса авторизации
Я генерирую URL-адрес для перенаправления пользователей на страницу входа на eBay для получения согласия. После того как пользователь входит в систему и дает согласие, eBay предоставляет код авторизации.
Вот как я генерирую URL-адрес и предлагаю пользователям посетить его вручную:
string authCodeUrl = BuildAuthorizationUrl();
Console.WriteLine($"Please visit this URL to provide consent: {authCodeUrl}");
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = authCodeUrl,
UseShellExecute = true
}); - Обмен кода авторизации на токен доступа
После того, как пользователь вручную вводит код авторизации в консоли я использую следующий метод для обмена его на access_token:
{
string tokenUrl = "https://api.sandbox.ebay.com/identity/v1/oauth2/token";
string clientId = "";
string clientSecret = "";
string redirectUri = "http://localhost:8080/"; // Must match the redirect URI in eBay app settings
using (var client = new HttpClient())
{
var authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{clientId}:{clientSecret}"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeader);
var parameters = new Dictionary
{
{ "grant_type", "authorization_code" },
{ "code", authorizationCode },
{ "redirect_uri", redirectUri }
};
var content = new FormUrlEncodedContent(parameters);
var response = await client.PostAsync(tokenUrl, content);
string responseBody = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
Console.WriteLine($"Error: {responseBody}");
throw new Exception($"Error retrieving the access token. Response: {responseBody}");
}
var tokenResponse = JsonConvert.DeserializeObject(responseBody);
return tokenResponse.access_token;
}
}
Проблема: когда я вызываю GetAccessTokenAsync, я постоянно получаю ошибку valid_grant.
Ожидаемый результат: успешный ответ, подобный следующему:
{
"access_token": "v^1.1#i^1#p^3#r^1...XzMjRV4xMjg0",
"expires_in": 7200,
"refresh_token": "v^1.1#i^1#p^3#r^1...zYjRV4xMjg0",
"refresh_token_expires_in": 47304000,
"token_type": "User Access Token"
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... en-in-ebay