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
相关产品推荐
相关产品推荐

