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

本地沙箱环境PHP file_get_contents调用PayPal OAuth2接口返回401未授权

PayPal沙箱API获取OAuth2令牌:PHP 401 Unauthorized错误修复

你的PHP请求返回401是因为三个关键问题,对比AJAX请求就能看出差异:

问题1:请求体格式不匹配

你设置的Content-Type是application/x-www-form-urlencoded,但PHP代码里的请求体用了JSON格式字符串"{'grant_type' : 'client_credentials'}",而PayPal令牌接口要求urlencoded格式的键值对。AJAX里的data是对象,jQuery会自动转换为正确的grant_type=client_credentials格式,所以能正常执行。

问题2:请求头格式错误

PHP的stream_context_create中,http选项里的headers需要是字符串数组,而非关联数组。关联数组格式会被解析错误,导致头信息无法正确传递。

问题3:变量名拼写错误

代码里env('PAYBAL_CLIENT')少了一个字母P,应为PAYPAL_CLIENT,这会导致获取错误的Client ID,直接触发401验证失败。


修正后的PHP代码

$client_id = env('PAYPAL_CLIENT');
$client_secret = env('PAYPAL_SECRET');

$auth = base64_encode("$client_id:$client_secret");

$opts = array('http' =>
    array(
        'method' => 'POST',
        'headers' => [
            "Content-Type: application/x-www-form-urlencoded",
            "Authorization: Basic $auth"
        ],
        'content' => "grant_type=client_credentials" // stream_context中POST请求体参数用content而非body
    )
);

$context = stream_context_create($opts);

$url = "https://api-m.sandbox.paypal.com/v1/oauth2/token";

$result = file_get_contents($url, false, $context);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:45:25