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

PHP使用CURL发起GET请求返回JSON附带额外字符串问题求助

接口返回重复JSON的修复方案

问题根因

你的PHP代码对响应结果做了两次输出,导致返回内容重复:

  • 第一次是else分支中的echo $response;直接打印了第三方接口返回的JSON数据
  • 第二次是代码末尾的return $response;,如果使用Laravel、ThinkPHP等PHP框架,控制器方法的返回值会被框架自动作为响应内容再次输出,最终两份相同JSON拼接返回。Node环境调用时不会触发框架的自动输出逻辑,因此结果正常。

修复方法

根据你的开发场景二选一即可:

场景1:使用PHP框架开发(推荐方案)

删除echo相关逻辑,所有响应都通过return返回,符合框架开发规范,修改后代码如下:

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => 'https://api.rechargeapps.com/selling_plan_groups/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 50,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
    'X-Recharge-Access-Token: $token'
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

$allowed_origins = [
// origins
];

if(in_array($request->get_header('origin'), $allowed_origins)) {
  header("Access-Control-Allow-Origin: {$request->get_header('origin')}");
}
// 新增JSON内容类型头,避免前端解析异常
header('Content-Type: application/json; charset=utf-8');

if ($err) {
  return 'cURL Error #:' . $err;
} else {
  return $response;
}

场景2:原生PHP无框架开发

直接删除代码末尾的return $response;语句即可。

附加优化建议

建议添加header('Content-Type: application/json; charset=utf-8');响应头,明确告知前端返回内容为JSON格式,可减少前端解析异常概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:27:03