You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用PayPal API OAuth2接口出现401 Unauthorized错误求助

PayPal沙箱OAuth2令牌请求返回401 Unauthorized的排查与解决

你的代码漏掉了PayPal令牌接口要求的关键参数和请求头,这是触发401错误的主要原因。下面是具体的排查点和修复方案:

核心修复:补充必填的POST参数与Content-Type头

PayPal的/v1/oauth2/token接口要求POST请求必须携带grant_type=client_credentials表单数据,同时要设置Content-Type: application/x-www-form-urlencoded头。你的代码既没传参数也没设这个头,导致服务器拒绝认证。

修复后的完整代码如下:

private static void Main(string[] args)
{
    string clientId = "你的沙箱客户端ID";
    string clientSecret = "你的沙箱客户端密钥";
    
    // 不要把request声明为静态字段,避免多次复用引发的问题
    var request = (HttpWebRequest)WebRequest.Create("https://api-m.sandbox.paypal.com/v1/oauth2/token");
    request.Method = WebRequestMethods.Http.Post;
    request.Accept = "application/json";
    request.ContentType = "application/x-www-form-urlencoded";
    
    // 生成Basic认证字符串
    string authCredentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes($"{clientId}:{clientSecret}"));
    request.Headers.Add("Authorization", $"Basic {authCredentials}");
    
    // 写入必填的表单参数
    string postData = "grant_type=client_credentials";
    byte[] postBytes = ASCIIEncoding.ASCII.GetBytes(postData);
    request.ContentLength = postBytes.Length;
    
    using (var requestStream = request.GetRequestStream())
    {
        requestStream.Write(postBytes, 0, postBytes.Length);
    }
    
    try
    {
        using (var response = (HttpWebResponse)request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            string responseText = reader.ReadToEnd();
            Console.WriteLine(responseText);
        }
    }
    catch (WebException ex)
    {
        // 捕获异常并输出错误详情,方便进一步排查
        using (var errorResponse = (HttpWebResponse)ex.Response)
        using (var errorReader = new StreamReader(errorResponse.GetResponseStream()))
        {
            Console.WriteLine($"错误详情:{errorReader.ReadToEnd()}");
        }
    }
    
    Console.Read();
}

其他可能的401原因及解决方法

  • 客户端凭证错误或环境不匹配

    • 确认你用的是沙箱环境的客户端ID和密钥,别把生产环境的凭证拿到沙箱用。登录PayPal开发者平台,进入沙箱应用页面复制正确的凭证。
    • 检查凭证里有没有多余的空格、换行,直接复制粘贴,别手动输入。
  • Base64编码不规范

    • 拼接clientId:clientSecret时,冒号前后不要加空格,确保格式完全正确。
    • 必须用ASCII编码转换,别用UTF-8,否则编码后的字符串不符合Basic认证的规范。
  • 网络代理/防火墙篡改请求

    • 如果你的网络用了代理,检查代理是否修改了Authorization头,比如截断或者替换了内容。
    • 换个无代理的网络环境测试,排除网络层面的干扰。
  • 沙箱应用状态异常

    • 登录PayPal开发者平台,确认你的沙箱应用是启用状态,没有被禁用,且开通了必要的API权限。

内容的提问来源于stack exchange,提问作者Security Support

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:27:11