使用PHP接收JSON POST

使用PHP接收JSON POST,php,json,post,Php,Json,Post,我试图在支付接口网站上收到一篇JSON帖子,但我无法解码 当我打印时: echo $_POST; 我得到: Array NULL 当我尝试这个时,我什么也得不到: if ( $_POST ) { foreach ( $_POST as $key => $value ) { echo "llave: ".$key."- Valor:".$value."<br />"; } } $string = $_POST['operation']; $

我试图在支付接口网站上收到一篇JSON帖子,但我无法解码

当我打印时:

echo $_POST;
我得到:

Array
NULL
当我尝试这个时,我什么也得不到:

if ( $_POST ) {
    foreach ( $_POST as $key => $value ) {
        echo "llave: ".$key."- Valor:".$value."<br />";
    }
}
$string = $_POST['operation'];
$var = json_decode($string);
echo $var;
$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );
我尝试此操作时得到空值:

if ( $_POST ) {
    foreach ( $_POST as $key => $value ) {
        echo "llave: ".$key."- Valor:".$value."<br />";
    }
}
$string = $_POST['operation'];
$var = json_decode($string);
echo $var;
$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );
当我这样做时:

$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
我得到:

Array
NULL
JSON格式为(根据付款网站文档):

付款网站日志显示一切正常。有什么问题吗?

试试看

$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
echo $data["operacion"];
从您的json和代码来看,您似乎已经正确拼写了operation一词,但它不在json中

编辑

也许还值得尝试从中回显json字符串php://input.

echo file_get_contents('php://input');

使用
$HTTP\u RAW\u POST\u DATA
代替
$\u POST

它将按原样为您提供POST数据

稍后您可以使用
json\u decode()
对其进行解码。

阅读文档:

总的来说,php://input 应使用而不是$HTTP\u原始\u POST\u数据


正如在

中一样,值得指出的是,如果使用
json\u解码(file\u get\u contents(“php://input“”)
(如其他人所述),如果字符串不是有效的JSON,则此操作将失败

这可以通过首先检查JSON是否有效来简单地解决。i、 e

function isValidJSON($str) {
   json_decode($str);
   return json_last_error() == JSON_ERROR_NONE;
}

$json_params = file_get_contents("php://input");

if (strlen($json_params) > 0 && isValidJSON($json_params))
  $decoded_params = json_decode($json_params);
编辑:请注意,删除上面的
strlen($json_参数)
可能会导致细微错误,因为
json_last_error()
在传递
null
或空白字符串时不会更改,如下所示:

如果您已经设置了参数,例如$\u POST['eg'],但不想更改,只需这样做:

$_POST = json_decode(file_get_contents('php://input'), true);
这将为您省去将所有$_POST更改为其他内容的麻烦,并且如果您希望删除此行,您仍然可以发出正常的POST请求

$data = file_get_contents('php://input');
echo $data;

这对我很有用。

我想发布一个答案,该答案也使用curl获取内容,并将结果保存到pdf,这样您就可以获得典型用例的所有步骤。这只是原始代码(以便适应您的需要),但它是有效的

// import mpdf somewhere
require_once dirname(__FILE__) . '/mpdf/vendor/autoload.php';

// get mpdf instance
$mpdf = new \Mpdf\Mpdf();

// src php file
$mysrcfile = 'http://www.somesite.com/somedir/mysrcfile.php';
// where we want to save the pdf
$mydestination = 'http://www.somesite.com/somedir/mypdffile.pdf';

// encode $_POST data to json
$json = json_encode($_POST);

// init curl > pass the url of the php file we want to pass 
// data to and then print out to pdf
$ch = curl_init($mysrcfile);

// tell not to echo the results
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );

// set the proper headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($json) ]);

// pass the json data to $mysrcfile
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);

// exec curl and save results
$html = curl_exec($ch);

curl_close($ch);

// parse html and then save to a pdf file
$mpdf->WriteHTML($html);
$this->mpdf->Output($mydestination, \Mpdf\Output\Destination::FILE);
在$mysrcfile中,我将读取如下json数据(如前面的回答所述):

很晚了。
似乎,(OP)已经尝试了给他的所有答案。
但是,如果您(OP)没有收到传递到“.PHP”文件的内容,则错误可能是URL不正确。
检查您是否调用了正确的“.PHP”文件。
(URL中的拼写错误或大写字母)
最重要的
检查您的URL在“http”之后是否有“s”(安全)。
例如:

应该是

"https://yourdomain.com/read_result.php"
或者任何一种方式。
添加或删除“s”以匹配您的URL。

您可以使用下面的类似。。 后JSON式吼叫

从php项目用户处获取数据,如下所示

// takes raw data from the request 
$json = file_get_contents('php://input');
// Converts it into a PHP object 
$data = json_decode($json, true);

 echo $data['requestCode'];
 echo $data['mobileNo'];
 echo $data['password'];


var\u dump($\u POST)
说了什么?它是一个空数组吗?$\u POST有一个“&”分隔POST请求的字典$_发布json肯定不起作用。你能打印文件获取内容吗php://input')? 也是变量转储($data->operation);或者变量转储($data->operacion)?JSON是文本,为什么不能在POST中访问?只要支付服务将该文本发布到他的PHP端点,他就应该能够
json\u解码它。但可能服务在请求体中发送数据,这是另一回事,是的,
file\u get\u contents('php://input')
应该可以工作。如果可以,那么这里已经讨论过:$\u POST:在请求中使用application/x-www-form-urlencoded或multipart/form数据作为HTTP内容类型时,通过HTTP POST方法传递给当前脚本的变量的关联数组。不是在使用application/json.Hi时,在这两种情况下,我在屏幕上看不到它的价值,operacion是西班牙语的拼写(带或不带重音)。他的观点是,他没有在这两个地方正确拼写它,无论是operacion还是operation在这两个地方。在PHP 5.6之前,获取php://input 只能做一次。您的代码或框架可能在以前的某个地方打开过它吗?请注意不要在json数据上使用单引号,因为$HTTP_RAW_POST_数据现在已贬值,您可以通过这种方式读取json POST
$json=file_get_内容('php://input'); $obj=json_decode($json)
对于我来说,这个常见的答案[使用$json=file\u get\u contents('php://input“);]当JSON与最外层的“容器字符”一起发送时,我发现它不起作用。这个带有原始数据的答案对我来说很有用。并且可以使用我当前的PHP堆栈。我被困了一阵子。。非常感谢这个解决方案!这仍然是相当流行的,对于Webhook(例如),您仍然必须使用
$HTTP\u RAW\u POST\u DATA
。我搜索了一个解决方案,Bikel Basnet yours为我工作。谢谢警告:此功能在PHP 5.6.0中被弃用,并从PHP 7.0.0开始删除。警告:此功能在PHP 5.6.0中被弃用,并从PHP 7.0.0开始删除。=>现在链接断开了。在POST请求的情况下,最好使用php://input 而不是$HTTP_RAW_POST_数据,因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充$HTTP_RAW_POST_数据的情况,它可能是一种比激活always_populate_RAW_POST_数据占用更少内存的替代方法。php://input 不适用于enctype=“多部分/表单数据”。谢谢您,先生。这在我的案例中起到了作用,因为我正在将json从Android发布到PHP!谢谢你,对我来说确实有效。我将$\u POST数据分配给$request变量,现在我只将php://input.This 只是让我的日子轻松多了。谢谢。如果有人希望输入中有相当大的数据量和/或大量的请求,他们可能希望扩展函数,以选择性地使用json_decode的结果填充提供的变量引用,这样就不需要对格式良好的输入执行两次解析。这样做,实际上,您对json进行了两次解码。那太贵了。第一次解码,你