簡體   English   中英

從C#消費Paypal REST API

[英]Consuming Paypal REST API from C#

我正在嘗試根據其cURL示例對REST API進行簡單測試: https : //developer.paypal.com/docs/integration/direct/make/your-first-call/

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \
-d "grant_type=client_credentials"

我的C#:

var h = new HttpClientHandler();
h.Credentials = new NetworkCredential("client_id", "secret");
var client = new HttpClient();

client.BaseAddress = new Uri("https://api.sandbox.paypal.com/v1/oauth2/token");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Accept-Language", "en_US");

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

HttpRequestMessage req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, "https://api.sandbox.paypal.com/v1/oauth2/token");

req.Content = new StringContent("grant_type=client_credentials");

var r = client.SendAsync(req).Result;

返回錯誤:

StatusCode: 415, ReasonPhrase: 'Unsupported Media Type', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { PROXY_SERVER_INFO: host=slcsbjava2.slc.paypal.com;threadId=13873 Paypal-Debug-Id: 6bc39da1e021d SERVER_INFO: identitysecuretokenserv:v1.oauth2.token&CalThreadId=351&TopLevelTxnStartTime=14649fa185e&Host=slcsbidensectoken501.slc.paypal.com&pid=25122 CORRELATION-ID: 6bc39da1e021d Transfer-Encoding: chunked Date: Thu, 29 May 2014 21:54:25 GMT Server: Apache-Coyote/1.1 }

我需要更改什么來修復我的代碼?

我知道這個問題已有一年多的歷史了,但我想我會發表有關該主題的發現,因為那里的內容不多。 在弄亂了比我想承認的更長的時間后,我終於使它起作用了。 問題中所發布內容與答案中所包含內容之間的最大區別在於身份驗證以及對正文的發布(關於正文的通知,不是使用StringContent,而是使用FormUrlEncodedContent-它是在問題,但從未使用過)

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en_US"));

    var clientId = "<client_id>";
    var clientSecret = "<client_secret>";
    var bytes = Encoding.UTF8.GetBytes($"{clientId}:{clientSecret}");

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(bytes));

    var keyValues = new List<KeyValuePair<string, string>>();
    keyValues.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
    var responseMessage = await client.PostAsync("https://api.sandbox.paypal.com/v1/oauth2/token", new FormUrlEncodedContent(keyValues));
    viewModel.ResponseMessage = await responseMessage.Content.ReadAsStringAsync();
}

完成此操作后,我能夠在responseMessage中獲取json響應,然后為我的代碼獲取承載令牌。

從NuGet嘗試一下,您將獲得使用其余api中所有功能的類,由Paypal官方提供

https://www.nuget.org/packages/PayPal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM