PHP获取post过来的json数据

问题

第三方与 PHP 交互时,经常把 json 数据 post 给 PHP,但在 PHP里面 $_POST 中获取不到,$_REQUEST 也获取不到,但是通过网络请求可以看到确实是把JSON数据 POST 给了 PHP。

解决

  1. 想到以前微信的XML信息POST传给 PHP,然后使用file_get_contents("php://input")后正常获取到数据。
  2. 兼容性解决:
switch($_SERVER['REQUEST_METHOD'] ) {
        case 'POST':
            $input = file_get_contents("php://input");
            if($temp_input = json_decode($input,true)){
                $input = $temp_input;
            }else {
                $input = $_POST;//解决注意事项里的问题
            }
            print_r($input);// 这里测试下输出
            break;
        default:
            $input = $_GET;
    }

又可以愉快的使用了!可能还不够完善,欢迎指正!

XML数据类似

原因

PHP 默认只识别 application/x-www.form-urlencoded 标准的数据类型,因此,对text/xml或者soap 或者 application/octet-stream 之类的内容无法解析,如果用 $_POST 数组来接收就会失败。

注意

  • php://input 允许读取 POST 的原始数据,但却不能用于 enctype="multipart/form-data"类型的提交。
    参见:官方说明
  • $HTTP_RAW_POST_DATA等同于php://input
  • 注:PHP 7 已经取消了 $HTTP_RAW_POST_DATA,请用 php://input 代替
Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注