PHP cURL调用API遇Bearer授权拒绝问题求助
问题根源:请求头设置错误
你的PHP cURL代码里有两个关键错误,直接导致了授权失败:
1. 请求头的格式处理完全错误
CURLOPT_HTTPHEADER 需要接收一个字符串数组,每个元素是完整的请求头(格式为 Key: Value),但你用了 http_build_query() 来处理这个数组——这个函数是用来把数组转成URL编码的表单数据的,根本不适合处理请求头。这么做会让你的请求头变成一团URL编码后的字符串,服务器完全无法识别。
2. Authorization头缺少Bearer 前缀
API要求的认证头格式是 Authorization: Bearer {tokenID},但你直接把$token赋值给Authorization字段,没有加上Bearer 这个必填前缀,服务器自然认不出这是有效的Bearer Token认证。
修正后的完整代码
把请求头的设置改成下面这样,同时确保你的$token变量只包含纯token值(不需要提前加Bearer):
$body = array( "id" => $uuid, "userAccountId" => $userAccountId, "email" => $email, "first_name" => $first_name, "last_name" => $last_name, "phone" => $phone, ); $ch = curl_init(); // 正确设置请求头:数组格式,每个元素是完整的头字符串 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $token, 'Content-Type: application/x-www-form-urlencoded' // 可选,但和http_build_query的格式对应更规范 )); curl_setopt($ch, CURLOPT_URL, $myurl); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body)); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); // 建议加上错误排查代码,方便后续调试 if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); } curl_close($ch); $result = json_decode($result);
额外调试建议
如果还是有问题,可以用curl_getinfo($ch)打印请求的详细信息,对比Postman的请求头,看看是否还有差异:
var_dump(curl_getinfo($ch));
这样就能确保你的请求头和Postman完全一致,解决授权问题。
内容的提问来源于stack exchange,提问作者handkock
相关产品推荐
相关产品推荐

