В документации указано, что вы должны передать имя пользователя и пароль, используя 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
тоже.