PHP调用REST API无响应求助:新手对接软件API遇阻
问题分析与修复方案
你的代码存在几个关键问题导致请求失败,以下是具体修复点和修正后的代码:
1. 错误的认证方式
你设置了CURLOPT_HTTPAUTH, CURLAUTH_BASIC,但服务商要求的是Bearer Token认证,Basic认证会干扰Bearer头的作用,必须移除这行配置。
2. POST请求未正确序列化JSON
如果后续改用POST方式,直接传递数组给CURLOPT_POSTFIELDS会以application/x-www-form-urlencoded格式发送,不符合Content-Type: application/json要求,需要用json_encode序列化数组。
3. 缺少CURL错误调试
当前代码只判断请求是否执行成功,无法获取具体的CURL错误信息,这对排查问题至关重要。
修正后的代码
function callAPI2($method, $url, $data){ $curl = curl_init(); switch ($method){ case "POST": curl_setopt($curl, CURLOPT_POST, 1); if ($data) { // POST请求需将数据序列化为JSON格式 curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); } break; case "PUT": curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); if ($data) { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); } break; default: if ($data) { $url = sprintf("%s?%s", $url, http_build_query($data)); } } // 请求配置 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer xxxx', // 替换为你的真实Bearer Token 'Content-Type: application/json', )); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 移除错误的Basic认证配置 // curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); // 执行请求 $result = curl_exec($curl); // 新增CURL错误调试 if(curl_errno($curl)){ die("CURL Error: " . curl_error($curl)); } if(!$result){ die("Connection Failure"); } curl_close($curl); return $result; }; // GET请求调用示例 $options = array( 'query' => '(select table).firstname', ); $make_call = callAPI2('GET', 'https://api.software.com/v1/teams/xxx/databases/xxx/query', $options); $test = json_decode($make_call, true); // 打印原始响应,方便排查问题 echo "原始响应:" . $make_call . "<br>"; var_dump($test); ?>
额外调试建议
- 替换代码中的
xxxx为你的真实Bearer Token,确保Token有效且未过期。 - 检查
teams/xxx/databases/xxx中的xxx是否替换为你的团队和数据库ID。 - 如果GET请求仍失败,尝试直接拼接URL(跳过
http_build_query编码):$url = 'https://api.software.com/v1/teams/xxx/databases/xxx/query?query=(select table).firstname'; $make_call = callAPI2('GET', $url, null); - 尝试改用POST方式调用,对比结果:
$options = array( 'query' => '(select table).firstname', ); $make_call = callAPI2('POST', 'https://api.software.com/v1/teams/xxx/databases/xxx/query', $options);
内容的提问来源于stack exchange,提问作者robsn
相关产品推荐
相关产品推荐

