微信小程序wx.request请求且header为Content-Type: application/json时PHP $_POST无法接收JSON数据

在微信小程序中使用 wx.request 发送请求,并设置 header'Content-Type': 'application/json' 时,确实会导致 PHP 后端无法通过 $_POST 超全局数组直接接收到 JSON 数据。这是因为当 Content-Type 设置为 application/json 时,请求体中的数据是以 JSON 格式发送的,而不是通过标准的表单编码(application/x-www-form-urlencodedmultipart/form-data)发送的。

PHP 的 $_POST 超全局数组是用来接收通过表单编码方式发送的数据的。当 Content-Typeapplication/json 时,PHP 不会自动解析请求体中的 JSON 数据并将其放入 $_POST 数组。相反,你需要手动读取输入流(php://input),然后使用 json_decode() 函数来解析 JSON 数据。

下面是一个 PHP 后端接收和处理 JSON 数据的示例:

// 获取原始 POST 数据的 JSON 字符串
$json = file_get_contents('php://input');

// 尝试将 JSON 字符串解码为 PHP 关联数组
$data = json_decode($json, true);

// 检查 JSON 解码是否成功
if (json_last_error() === JSON_ERROR_NONE) {
// $data 现在包含了请求体中的 JSON 数据
// 你可以在这里处理这些数据
var_dump($data);
} else {
// JSON 解码失败,返回错误响应
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON']);
}
?>

在这个示例中,file_get_contents('php://input') 用于读取请求体中的原始数据,然后 json_decode() 用于将 JSON 字符串解码为 PHP 关联数组。如果解码成功,你就可以在 $data 变量中访问这些数据了。

确保你的微信小程序请求是正确配置的,特别是 method 应该是 POST(因为你在发送数据),并且 header 中的 'Content-Type' 设置为 'application/json'。这样,PHP 后端就能正确地接收到并处理 JSON 数据了。



计算机