c# - 从 C# 使用 Paypal REST API

标签 c# paypal paypal-sandbox

我正在尝试根据他们的 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 响应,然后为我的代码取回不记名 token 。

关于c# - 从 C# 使用 Paypal REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943710/

相关文章:

开发人员的 PayPal 帐户凭据

symfony - Symfony2 中的 Paypal

c# - asp.net 中的页面回发?

c# - 使用了与请求的协议(protocol)不兼容的地址

c# - 使用 Json.net 将 JSON 对象反序列化为动态对象

paypal - 无法使用 Paypal 测试帐户付款

php - 单击 "Pay now"按钮时,Paypal EC 不给我反馈

c# - 如何在不影响 SYSTEM/IE 代理的情况下为 Webbrowser Control 设置代理

c# - 即使您的网站仍处于离线状态,您也可以将 paypal 与 asp.net c# 集成吗?

paypal - 从沙盒帐户中删除所有交易