获取我的 Paypal AccessToken 的请求

Posted

技术标签:

【中文标题】获取我的 Paypal AccessToken 的请求【英文标题】:Get request for my Paypal AccessToken 【发布时间】:2014-01-30 00:09:33 【问题描述】:

我正在尝试获取我的贝宝访问令牌。

我有下一个参数:EndPointClient Idsecretapi usernameapi signatureapi passwordapplication Id

我应该需要一个贝宝客户端才能这样做吗?

我点击了这个链接:https://developer.paypal.com/docs/integration/direct/make-your-first-call/

并尝试过:

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;

谢谢大家!

【问题讨论】:

那么你得到的错误是什么? @mituw16, ppClient 应该被初始化.. 在上面的代码中,您注释掉了初始化 ppClient 对象的部分。 我知道,因为我不知道如何创建一个新客户端。我必须在那里定义哪些参数?谢谢!! 看看这个。 github.com/paypal/rest-api-sample-app-dotnet 【参考方案1】:

我会推荐使用 RestSharp(只需获取 NuGet 包):-

        if (ServicePointManager.SecurityProtocol != SecurityProtocolType.Tls12) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // forced to modern day SSL protocols
        var client = new RestClient(payPalUrl)  Encoding = Encoding.UTF8 ;
        var authRequest = new RestRequest("oauth2/token", Method.POST) RequestFormat = DataFormat.Json;
        client.Authenticator = new HttpBasicAuthenticator(clientId, secret);
        authRequest.AddParameter("grant_type","client_credentials");
        var authResponse = client.Execute(authRequest);

【讨论】:

公平点,但相当随机的负面评论来反对与安全无关的问题。同时,如果您无法直接访问操作系统配置(共享主机、预配置的容器或图像等),或者您想在同一台服务器上运行不同的安全协议但在不同的 Web 应用程序(甚至是同一个 Web应用程序)因为第 3 方依赖?将其设置在您需要的位置,而不是您被告知的位置。 真的吗? PayPal 令牌就是关于您如何设置安全协议的全部内容?我说“公平点”并阅读了 Microsoft 文档,您至少可以让我的 cmets 加入讨论,而不是仅仅重新提出相同的观点。我所做的只是试图帮助某人,Microsoft 文档假设您可以完全控制服务器配置“在上述所有情况下,推荐的解决方案是删除硬编码的协议版本选择并遵循操作系统默认设置”如果操作系统怎么办默认是错误的,你不能改变它?【参考方案2】:

有点晚了,但遇到了类似的问题。最后,我不得不使用“基本”身份验证实现从 PayPal 获取详细信息。这是我的令牌收集器类。您真正需要做的唯一一件事就是用您的 2 paypal client_Id 和在您的 paypal 设置中生成的 Secret 字符串替换我的 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>();
        
    

【讨论】:

以上是关于获取我的 Paypal AccessToken 的请求的主要内容,如果未能解决你的问题,请参考以下文章

Paypal API,Curl 不返回任何输出

Firebase + Typescript,无法从用户对象中获取 accessToken?

如何获取accessToken

放大 federatedSignIn 返回没有范围的 accessToken

一次刷新 accessToken 的最佳方法

使用 accesstoken 登录 Facebook