代码之家  ›  专栏  ›  技术社区  ›  redoc01

PayPal API-授权标头没有有效的访问令牌

  •  0
  • redoc01  · 技术社区  · 3 月前

    我正在尝试将PayPal API与此代码一起使用以获得有效令牌:

    var clientId = "yyyy";
    var secret = "xxxx";
    
    var client = new RestClient("https://api-m.sandbox.paypal.com/");
    client.AddDefaultHeader("Authorization", "Basic " + 
    Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", clientId, 
    secret))));
    var request = new RestRequest("v1/oauth2/token", Method.Post);
    request.AddParameter("grant_type", "client_credentials");
        
    var response = await client.ExecuteGetAsync(request);
    

    但回应是:

    {"error":"invalid_token","error_description":"Authorization header does not have valid access token"}
    

    当我使用Postman时,我在Postman中也用我的C#代码填写了完全相同的参数。

    1 回复  |  直到 3 月前
        1
  •  1
  •   Gabriel Dupont    3 月前

    尝试将请求类切换到其他类。 例如,您可以使用HttpClient

        var clientId = "yyyy";
        var secret = "xxxx";
    
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://api-m.sandbox.paypal.com/");
    
            var authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{clientId}:{secret}"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authToken);
    
            var requestContent = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("grant_type", "client_credentials")
            });
    
            var response = await client.PostAsync("v1/oauth2/token", requestContent);
    
            response.EnsureSuccessStatusCode();
    
            var responseBody = await response.Content.ReadAsStringAsync();
        }