我正在尝试在支付界面网站上收到JSON POST,但我无法对其进行解码.
当我打印:
echo $_POST;
Run Code Online (Sandbox Code Playgroud)
我明白了:
Array
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我什么也得不到:
if ( $_POST ) {
foreach ( $_POST as $key => $value ) {
echo "llave: ".$key."- Valor:".$value."<br />";
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我什么也得不到:
$string = $_POST['operation'];
$var = json_decode($string);
echo $var;
Run Code Online (Sandbox Code Playgroud)
我尝试这个时得到NULL:
$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );
Run Code Online (Sandbox Code Playgroud)
当我做:
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)
我明白了:
NULL
Run Code Online (Sandbox Code Playgroud)
JSON格式是(根据支付站点文档):
{
"operacion": {
"tok": "[generated token]",
"shop_id": "12313",
"respuesta": "S",
"respuesta_details": "respuesta S",
"extended_respuesta_description": "respuesta extendida",
"moneda": "PYG",
"monto": "10100.00",
"authorization_number": "123456",
"ticket_number": "123456789123456",
"response_code": "00",
"response_description": "Transacción aprobada.",
"security_information": {
"customer_ip": "123.123.123.123",
"card_source": "I",
"card_country": "Croacia",
"version": "0.3",
"risk_index": "0"
}
}
}
Run Code Online (Sandbox Code Playgroud)
付款站点日志说一切正常.有什么问题?
小智 449
尝试;
$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
echo $data["operacion"];
Run Code Online (Sandbox Code Playgroud)
从你的json和你的代码中,看起来你已经正确拼写了单词操作,但它不在json中.
编辑
也许还值得尝试回应来自php:// input的json字符串.
echo file_get_contents('php://input');
Run Code Online (Sandbox Code Playgroud)
Ste*_*han 77
如果您已将参数设置为$ _POST ['eg'],并且您不希望更改它,只需这样做:
$_POST = json_decode(file_get_contents('php://input'), true);
Run Code Online (Sandbox Code Playgroud)
这将节省您将所有$ _POST更改为其他内容的麻烦,并允许您仍然发出正常的帖子请求,如果您想要删除此行.
Xtr*_*ity 39
值得指出的是,如果你使用json_decode(file_get_contents("php://input"))(如其他人所说的),这将字符串是否失败不是有效的JSON.
这可以通过首先检查JSON是否有效来简单地解决.即
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);
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,除strlen($json_params)上述可能导致细微的错误,因为json_last_error()它不是在改变null或空字符串传递,如下所示:
http://ideone.com/va3u8U
小智 37
用$HTTP_RAW_POST_DATA而不是$_POST.
它将按原样为您提供POST数据.
您可以json_decode()稍后使用它进行解码.
Ena*_*que 16
你可以像下面这样使用..像下面这样发布 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'];
Run Code Online (Sandbox Code Playgroud)
小智 9
$data = file_get_contents('php://input');
echo $data;
Run Code Online (Sandbox Code Playgroud)
这对我有用.
很晚了。
看来,(OP)已经尝试了所有给他的答案。
尽管如此,如果您 (OP) 没有收到传递给“.PHP”文件的内容,则错误可能是 URL 不正确。
检查您是否正在调用正确的“.PHP”文件。
(URL 中的拼写错误或大写字母)
和最重要的
检查您的 URL 在“http”之后是否有“s”(安全)。
例子:
"http://yourdomain.com/read_result.php"
Run Code Online (Sandbox Code Playgroud)
应该
"https://yourdomain.com/read_result.php"
Run Code Online (Sandbox Code Playgroud)
或者任何一种方式。
添加或删除“s”以匹配您的 URL。