cURL发送POST请求返回200但Payload解析失败是什么原因?
问题根因
你遇到的问题由两个错误共同导致:
- 未配置cURL的
CURLOPT_RETURNTRANSFER参数:默认情况下curl_exec()执行成功时不会返回接口响应内容,而是直接将响应内容输出到标准输出,仅返回布尔值true表示请求执行成功。你看到的奇怪报错Payload is missing or failed to parsetrue,是目标接口返回的报错内容Payload is missing or failed to parse被cURL直接输出,和后续你把布尔值true转成JSON返回的内容拼接在了一起。 - 请求参数存在二次JSON编码:你传入的
eventValue已经是转义后的JSON字符串,整个$data数组执行json_encode()时,会对eventValue内的引号做二次转义,导致目标接口无法正常解析请求负载,才返回了Payload解析失败的报错。 dd()能正常看到返回的原因是dd()会终止程序后续输出流程,cURL直接输出的报错内容被截断,只有你构造的JSON响应被输出,所以看起来正常。
修复方案
- 在cURL配置中新增
CURLOPT_RETURNTRANSFER => true,让curl_exec()将接口响应作为字符串返回 - 将
eventValue改为数组格式,避免二次JSON编码
修正后代码
$data = [ "event" => "name", "id" => "user id", // 直接传数组,json_encode会自动处理成JSON格式 "eventValue" => [ "nextEvent" => "0", "otherEvent" => "0" ], "eventCurrency" => "USD", ]; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "myApiUrl.com", CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($data), // 新增该配置,让curl_exec返回响应内容 CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array( "content-type" => "application/json", "authentication" => env("API_KEY") ), )); $response = curl_exec($curl); curl_close($curl); // 如果接口返回的是JSON格式,可先decode再返回,避免嵌套JSON转义 // $responseData = json_decode($response, true); // return response()->json($responseData); return response()->json($response);
内容的提问来源于stack exchange,提问作者whenitrainsitpours
相关产品推荐
相关产品推荐

