У меня есть некоторые ограниченные навыки в c++
, и недавно я перешел в C# (asp.net)
и azure Web services
. Как Po C я пытаюсь сделать REST
звонки на PayPal
(которые мне нужно будет использовать профессионально через 3-6 месяцев).
Я настроил свой личный PayPal
учетная запись, используя инструкции здесь , и я получаю токен на предъявителя, используя curl, как описано в ссылке. Потрясающие.
Я сейчас пытаюсь сделать это с .NET Core C#
, и все, что я получаю, это 401 error
. Я изучил запрос, и он выглядит так же, как curl с точки зрения заголовков; base64
закодированные учетные данные, которые, я думаю, я добавляю, такие же, как и в подробном журнале скручивания (я рассмотрел две строки base64
на глаз), поэтому это должно быть то, что я делаю (или не делаю) в установка вызова. Я ищу предложения, указатели или смех над очевидной ошибкой, которую я сделал.
Я настроил так называемого клиента таким образом:
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient("PayPal", c =>
{
c.BaseAddress = new Uri("https://api.sandbox.paypal.com/v1/");
c.DefaultRequestHeaders.Add("Accept", "application/json");
c.DefaultRequestHeaders.Add("Accept-Language", "en_US");
});
(со всеми остальными вещами, которые поставляются бесплатно с VS, для краткости он опущен).
Я пытаюсь позвонить таким образом:
string clientCredString = CLIENTID + ":" + SECRET;
var clientCreds = System.Text.Encoding.UTF8.GetBytes(clientCredString);
var client = _clientFactory.CreateClient("PayPal");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", System.Convert.ToBase64String(clientCreds));
var messageBody = new Dictionary<string,string > ();
messageBody.Add("grant_type", "client_credientials");
var request = new HttpRequestMessage(HttpMethod.Get, "oauth2/token")
{
Content = new FormUrlEncodedContent(messageBody)
};
string token;
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
token = JsonConvert.DeserializeObject<string>(json);
}
else
{
throw new ApplicationException("Well that failed");
}
и получаю 401
код для моей проблемы.
Предложения по устранению неполадок, более эффективные способы сделать это и смех над моей глупостью все приветствуется.