Laravel 中如何获取 $HTTP_RAW_POST_DATA?

用Laravel做微信公众平台后台服务器,需要处理xml格式的post数据,不能用$_POST,而要用$GLOBALS['HTTP_RAW_POST_DATA']。问题是,如何在Laravel中获取这个值?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

查Laravel官方手册里Request对象,没查到合适的方法。在网上有看到有人用$request->getContent()可以获取’HTTP_RAW_POST_DATA‘的值。

6年前 评论
mouyong

用 php://input 把。

6年前 评论

@蜗牛 应该也可以,或者直接用 $GLOBALS['HTTP_RAW_POST_DATA']。

6年前 评论
mouyong

@jiazhuamh
我记得我做的时候,也看到过,根据官方提供的 file_get_contents('') 我最终选择的使用 file_get_contents('php://input'),印象里是这么写的吧。

6年前 评论

微信的文档里是老版本PHP的做法。
你需要使用php://input代替。

其实如果没有特殊需求,强烈推荐Easy Wechat

6年前 评论

补充几点吧,由于HTTP_RAW_POST_DATA这个特性在PHP5.6之后已经废弃,所以要或许xml数据可以考虑以下方案
1.由于PHP是兼容的,你可以在php.ini中修改配置,以获得此选项的支持
2.通过PHP的标准输入,php://input来获得数据,如file_get_content("php://input"),fopen("php://input")
3.在laravel中,框架已经封装了一个方法在Request类中,使用$request->getContent()即可,在laravel的源码中可以看到,
getContent的实现就是通过fopen打开标准输入来进行数据的读取的

6年前 评论

@crisenchou 谢谢,总结得很全面

6年前 评论

@jiazhuamh 这个是tp5里面的方法,laravel不能用把,我知识问下,没有否定您的意思, 也是向了解下这个知识点

5年前 评论
$content = $request->getContent()
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!