PHP如何获取回调API返回的JSON数据?$_POST/$_GET取值为空如何解决
问题根因
$_GET仅能读取URL后缀的查询参数,$_POST仅能读取Content-Type为application/x-www-form-urlencoded、multipart/form-data的表单类请求参数。而回调API通常直接将JSON字符串放在HTTP请求体中发送,PHP不会自动解析这类数据到超全局变量中,因此你读取的参数为空。
实现方案
你需要先读取原始请求体的内容,再手动解析为JSON格式后读取对应字段,示例代码如下:
// 读取HTTP请求原始Body内容 $rawRequestBody = file_get_contents('php://input'); // 空请求校验 if (empty($rawRequestBody)) { http_response_code(400); exit("empty request body"); } // 解析JSON为关联数组(第二个参数设为true返回数组,默认返回stdClass对象) $callbackData = json_decode($rawRequestBody, true); // JSON格式校验 if (json_last_error() !== JSON_ERROR_NONE) { http_response_code(400); exit("invalid json format"); } // 读取对应字段 $type = $callbackData['type']; $orderContent = $callbackData['content']; $orderId = $orderContent['id'];
注意事项
- 多数回调API要求服务端处理成功后返回200类状态码,否则会触发重复推送,处理完业务逻辑后请返回符合对接规范的响应。
- 生产环境使用建议增加签名校验,避免第三方伪造回调请求引发业务异常。
内容的提问来源于stack exchange,提问作者Everton Thomazi
相关产品推荐
相关产品推荐

