Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取我的Paypal AccessToken请求_C#_Asp.net Mvc_Paypal - Fatal编程技术网

C# 获取我的Paypal AccessToken请求

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

我正在尝试获取paypal的访问令牌

我有下一个参数:
端点
客户端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>();
        }
    }
}