почему при создании токена возникает ошибка - PullRequest
0 голосов
/ 06 февраля 2020
 public static void CreateToken()
    {

        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("grant_type", "client_credentials");
        var UserPassJson = "{\"username\": \"mucode\",\"password\": \"mypassword\"}";

        HttpContent content = new StringContent(UserPassJson, Encoding.UTF8, "application/json");

        var response = client.PostAsync(new Uri("https://api.sandbox.paypal.com/v1/oauth2/token"), content).Result;
        if (response.IsSuccessStatusCode)
        {
            var responseContent = response.Content;
            string responseString = responseContent.ReadAsStringAsync().Result;
            Console.WriteLine(responseString);
        }
    }

почему response.IsSuccessStatusCode Отображение кода состояния 401? Что вызывает неисправность? Какое действие вызывает успех?

1 Ответ

0 голосов
/ 06 февраля 2020

В документации указано, что вы должны передать имя пользователя и пароль, используя basi c аутентификация , и что вы должны передать закодированное в форме тело, содержащее grant_type=client_credentials.

В настоящий момент ваш код добавляет grant_type в качестве заголовка и публикует имя пользователя и пароль в виде объекта JSON в теле.

Исправьте код, чтобы сделать так, как написано в документации: мы получаем:

HttpClient client = new HttpClient();
byte[] authBytes = System.Text.Encoding.ASCII.GetBytes("mucode:mypassword");
string base64Auth = Convert.ToBase64String(authBytes);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64Auth);

HttpContent content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "client_credentials") });

var response = client.PostAsync(new Uri("https://api.sandbox.paypal.com/v1/oauth2/token"), content).Result;
if (response.IsSuccessStatusCode)
{
    var responseContent = response.Content;
    string responseString = responseContent.ReadAsStringAsync().Result;
    Console.WriteLine(responseString);
}

PS Я рекомендую прочитать Вы неправильно используете HttpClient, и это дестабилизирует ваше программное обеспечение и последующие действия Вы (вероятно, все еще) используете HttpClient не так, и это дестабилизирует ваше программное обеспечение . Я также рекомендую сделать этот метод async и сделать цепочку до async тоже.

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