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

PHP Curl硬编码测试数据正常返回,替换为变量后无API返回如何排查

PHP Curl 接口传参异常排查方案
  • 优先校验JSON格式合法性
    手动拼接JSON字符串极易因变量包含特殊字符(双引号、换行、emoji、非UTF-8字符)导致JSON结构损坏,永远不要手动拼接JSON,统一使用json_encode()处理数组结构。同时必须加JSON编码错误校验:
    $post = json_encode($postData);
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo "JSON编码错误:" . json_last_error_msg();
        exit;
    }
    
    你更新后的代码存在一个明显格式错误:接口要求items是索引数组(对应JSON的[]结构),你直接给items赋值关联数组,生成的JSON会是对象格式,完全不符合接口要求,需要改为嵌套一层索引数组:
    "items" => [
        [
            "description" => "Test",
            "quantity" => 1,
            "amount" => 10
        ]
    ]
    
  • 打印完整请求与原始响应
    不要只打印json_decode后的结果,先打印你传给CURLOPT_POSTFIELDS的完整JSON字符串、原始响应内容$result,很多时候接口返回的是错误提示字符串而非合法JSON,直接解码会得到null,让你误以为没有返回:
    echo "请求JSON:<pre>" . htmlspecialchars($post) . "</pre>";
    echo "原始响应:<pre>" . htmlspecialchars($result) . "</pre>";
    
  • 检查HTTP状态码与Curl信息
    调用curl_getinfo()获取请求状态,优先看HTTP状态码定位问题:
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // 400=参数格式错误/缺失,401=token无效/过期,403=无权限,5xx=接口服务端故障
    echo "HTTP状态码:" . $httpCode;
    
  • 校验参数类型与规则
    对照接口文档检查每个参数的类型、格式要求:比如amount是否为整数单位为分、CPF长度是否符合规则、redirect的回调地址是否为带http/https的完整URL(你代码里的www.success属于无效地址)、必填参数是否为空。
  • 本地模拟请求验证
    把打印出来的完整请求JSON、请求头信息,用接口测试工具直接调用接口,若工具请求失败则是参数本身不符合要求,若工具请求成功则是你PHP代码的Curl配置存在问题(比如token取值错误、header漏传等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:01