PHP使用Envato OAuth令牌发起GET请求:Postman正常CURL返回未授权
问题分析与解决方案
我一眼就找到问题所在啦——你的CURL请求头格式写错了,这就是代码返回"Unauthorized"但Postman能成功的核心原因!
核心错误:请求头格式不符合CURL要求
CURLOPT_HTTPHEADER要求传入的是纯字符串数组,每个元素必须是"Header-Name: Value"的完整格式,但你现在用的是关联数组:
$headers = array( 'Authorization' => 'Bearer '.$token, );
这种格式会被CURL错误解析,导致Authorization头根本没正确发送给API,自然会被判定为未授权。
修正后的完整代码
把请求头改成字符串数组形式,同时补充一些实用的错误排查逻辑:
<?php if(!isset($_GET['token'])){ echo "<h2>!!! Oops:( </h2>"; exit(); } $token = $_GET['token']; $apiUrl = 'https://api.envato.com/v3/market/buyer/purchases?page=1'; // 修正:改成标准的字符串数组请求头格式 $headers = array( 'Authorization: Bearer '.$token, // 可选:Postman会自动带User-Agent,部分API要求这个头,建议加上 'User-Agent: My-Envato-Client/1.0' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 开启SSL校验,避免潜在的HTTPS请求问题 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); $result = curl_exec($ch); // 优先检查CURL本身的错误,而不是只看结果是否为空 if(curl_errno($ch)) { echo '<br>CURL Error: ' . curl_error($ch) . '<br>'; }else{ print_r($result); echo "<br><br>"; $json = json_decode($result, true); } // 记得关闭CURL资源,养成好习惯 curl_close($ch); ?>
额外排查建议
如果修正后还是有问题,可以检查这几点:
- 确认
$_GET['token']获取到的是完整、无截断的有效access token - 对比Postman的请求头列表,看看是否有其他API要求的必填头信息(比如Accept),把缺失的补到代码里
- 验证你的token是否拥有访问
/v3/market/buyer/purchases接口的权限
内容的提问来源于stack exchange,提问作者Anubhav Anand
相关产品推荐
相关产品推荐

