[已解决]微信公众平台 php中$GLOBALS["HTTP_RAW_POST_DATA"]报错
微信公众平台 PHP 中$GLOBALS["HTTP_RAW_POST_DATA"] 报错的解决方法
在使用微信公众平台时,PHP 脚本中经常会遇到 `$GLOBALS["HTTP_RAW_POST_DATA"]` 报错的问题。这个问题是由于 PHP7.0 版本后,官方建议不再使用 `$GLOBALS["HTTP_RAW_POST_DATA"]` 这个变量,而是使用 `php://input` 来获取 POST 数据。
未定义数组索引:HTTP_RAW_POST_DATA
当你尝试访问 `$GLOBALS["HTTP_RAW_POST_DATA"]` 时,PHP 会报出 "未定义数组索引:HTTP_RAW_POST_DATA" 的错误。这是因为 PHP7.0 版本后,不再自动解析 `$_POST` 和 `$_GET` 等超全局变量。
解决方法
要解决这个问题,你需要将 `$postStr = $GLOBALS[HTTP_RAW_POST_DATA];` 替换为 `$postStr = file_get_contents(php://input);`。这样你就可以正确获取微信支付回调函数中的 POST 数据。
完整的代码示例
```php
$postStr = file_get_contents('php://input');
// ...
}
?>
```
在这个示例中,我们首先检查请求方法是否为 POST,如果是,则使用 `file_get_contents(php://input)` 来获取 POST 数据。
注意
请确保你的 PHP 版本支持 `php://input`。如果你使用的是较早的 PHP 版本,可能需要手动解析 `$_POST` 和 `$_GET` 等超全局变量。
微信支付回调函数中的 POST 数据
在微信支付回调函数中,POST 数据通常包含以下信息:
* `appid`: 公众号 AppID* `mch_id`: 商户 ID* `nonce_str`: 随机字符串* `sign`: 签名* `trade_type`:交易类型(例如,JSAPI 或 NATIVE)
* `transaction_id`:交易 ID你可以使用以下代码来解析这些信息:
```php
$postStr = file_get_contents('php://input');
$data = json_decode($postStr, true);
// ...
}
?>
```
在这个示例中,我们使用 `json_decode()` 来解析 JSON 数据,得到一个数组。
总结
要解决微信公众平台 PHP 中 `$GLOBALS["HTTP_RAW_POST_DATA"]` 报错的问题,你需要将 `$postStr = $GLOBALS[HTTP_RAW_POST_DATA];` 替换为 `$postStr = file_get_contents(php://input);`。这样你就可以正确获取微信支付回调函数中的 POST 数据。
记得检查你的 PHP 版本是否支持 `php://input`,并确保使用的代码示例与你的需求相符。