C# 获取我的Paypal AccessToken请求
我正在尝试获取paypal的访问令牌 我有下一个参数:C# 获取我的Paypal AccessToken请求,c#,asp.net-mvc,paypal,C#,Asp.net Mvc,Paypal,我正在尝试获取paypal的访问令牌 我有下一个参数:端点,客户端Id,机密,api用户名,api签名,api密码,应用程序Id 我需要一个paypal客户端才能这样做吗 我点击了这个链接: 并尝试: private string getAccessToken() { var ppClient; // = new paypalClient(); // create a paypal client Dictionary<string, object> paramete
端点
,客户端Id
,机密
,api用户名
,api签名
,api密码
,应用程序Id
我需要一个paypal客户端才能这样做吗
我点击了这个链接:
并尝试:
private string getAccessToken() {
var ppClient; // = new paypalClient(); // create a paypal client
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("Accept", "application/json");
parameters.Add("Accept-Language", "en_US");
parameters.Add("grant_type", "client_credentials");
var result = ppClient.Get("https://api.sandbox.paypal.com/v1/oauth2/token", parameters);
string accessToken = result["access_token"];
return accessToken;
}
私有字符串getAccessToken(){
var ppClient;//=新建paypalClient();//创建paypal客户端
字典参数=新字典();
添加(“接受”、“应用程序/json”);
添加(“接受语言”、“en_US”);
添加(“授权类型”、“客户端凭据”);
var result=ppClient.Get(“https://api.sandbox.paypal.com/v1/oauth2/token“,参数);
字符串accessToken=结果[“访问令牌”];
返回accessToken;
}
谢谢大家! 我建议使用RestSharp(只需抓取NuGet包):-
我来得有点晚,但遇到了类似的问题。最后,我不得不使用“基本”身份验证实现从PayPal获取详细信息。这是我的令牌收集器类。您真正需要做的唯一一件事是用您的2个PayPal客户端Id和PayPal设置中生成的秘密字符串替换我的PayPal选项注入 忽略我的AccessToken返回类型,它只是我编的一个PoCo,ReadToObject只是一个使用newtonsoft的简单反序列化器。 真正好的东西返回到“result”字符串 希望这有帮助
public sealed class PaymentTokenServer : IPaymentTokenServer
{
private readonly List<KeyValuePair<string, string>> tokenServerPairs = new List<KeyValuePair<string, string>>();
private PayPalOptions payPalOptions;
public PaymentTokenServer(IOptions<PayPalOptions> paypalOptions)
{
this.payPalOptions = paypalOptions.Value;
this.tokenServerPairs.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
}
public AccessToken GetToken()
{
var content = new FormUrlEncodedContent(this.tokenServerPairs);
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(this.payPalOptions.TokenServerUrl);
client.DefaultRequestHeaders.AcceptLanguage.Add( new StringWithQualityHeaderValue("en_US"));
var base64String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{this.payPalOptions.ClientId}:{this.payPalOptions.Secret}"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64String);
var response = client.PostAsync("", content).Result;
var result = response.Content.ReadAsStringAsync().Result;
return result.ReadToObject<AccessToken>();
}
}
}
公共密封类PaymentTokenServer:IPaymentTokenServer
{
私有只读列表tokenServerPairs=新列表();
私人Paypal期权Paypal期权;
公共PaymentTokenServer(IOptions paypalOptions)
{
this.payPalOptions=payPalOptions.Value;
添加(新的KeyValuePair(“授予类型”、“客户端凭据”);
}
公共访问令牌GetToken()
{
var content=new FormUrlEncodedContent(this.tokenServerPairs);
ServicePointManager.ServerCertificateValidationCallback+=(发件人、证书、链、sslPolicyErrors)=>true;
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(this.payPalOptions.TokenServerUrl);
client.DefaultRequestHeaders.AcceptLanguage.Add(新StringWithQualityHeaderValue(“en_US”);
var base64String=Convert.ToBase64String(Encoding.ASCII.GetBytes($“{this.payPalOptions.ClientId}:{this.payPalOptions.Secret}”);
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“基本”,base64String);
var response=client.PostAsync(“,content).Result;
var result=response.Content.ReadAsStringAsync().result;
返回结果。ReadToObject();
}
}
}
那么您得到的错误是什么?@mituw16,ppClient应该被初始化。在上面的代码中,您注释掉了初始化ppClient对象的部分。我知道,因为我不知道如何创建新客户端。。我必须在那里定义哪些参数?非常感谢。看看这个。说得对,但对于一个与安全无关的问题,这是一个相当随意的负面评论。同时,如果您无法直接访问操作系统配置(共享主机、预配置的容器或图像等),或者由于依赖第三方,您希望在同一台服务器上但在不同的Web应用程序(甚至同一Web应用程序)中运行不同的安全协议,该怎么办?把它放在你需要的地方而不是告诉你的地方。真的吗?PayPal令牌是关于如何设置安全协议的?我说了“公平点”并阅读了微软的文档,你至少可以把我的评论加入讨论,而不是重复同样的观点。我所做的只是试图帮助某人,Microsoft文档假定您完全控制服务器配置“在上述所有情况下,建议的解决方案是删除硬编码协议版本选择,并遵从操作系统默认设置”如果操作系统默认设置错误,并且您无法更改,该怎么办?
public sealed class PaymentTokenServer : IPaymentTokenServer
{
private readonly List<KeyValuePair<string, string>> tokenServerPairs = new List<KeyValuePair<string, string>>();
private PayPalOptions payPalOptions;
public PaymentTokenServer(IOptions<PayPalOptions> paypalOptions)
{
this.payPalOptions = paypalOptions.Value;
this.tokenServerPairs.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
}
public AccessToken GetToken()
{
var content = new FormUrlEncodedContent(this.tokenServerPairs);
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(this.payPalOptions.TokenServerUrl);
client.DefaultRequestHeaders.AcceptLanguage.Add( new StringWithQualityHeaderValue("en_US"));
var base64String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{this.payPalOptions.ClientId}:{this.payPalOptions.Secret}"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64String);
var response = client.PostAsync("", content).Result;
var result = response.Content.ReadAsStringAsync().Result;
return result.ReadToObject<AccessToken>();
}
}
}