381

支払いインターフェース Web サイトで JSON POST を受信しようとしていますが、デコードできません。

印刷するとき:

echo $_POST;

私は得る:

Array

これを試しても何も得られません:

if ( $_POST ) {
    foreach ( $_POST as $key => $value ) {
        echo "llave: ".$key."- Valor:".$value."<br />";
    }
}

これを試しても何も得られません:

$string = $_POST['operation'];
$var = json_decode($string);
echo $var;

これを試すとNULLになります:

$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );

私がする時:

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

私は得る:

NULL

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"
       }
    }
}

支払いサイトのログによると、すべて問題ありません。どうしたの?

4

11 に答える 11

604

試す;

$data = json_decode(file_get_contents('php://input'), true);
print_r($data);
echo $data["operacion"];

あなたのjsonとあなたのコードから、操作という言葉を最後に正しく綴ったように見えますが、jsonにはありません。

編集

php://input から json 文字列をエコーすることも価値があるかもしれません。

echo file_get_contents('php://input');
于 2013-09-18T08:30:28.727 に答える
115

たとえば、 $_POST['eg'] のようにパラメーターが既に設定されていて、それを変更したくない場合は、次のようにします。

$_POST = json_decode(file_get_contents('php://input'), true);

これにより、すべての $_POST を別のものに変更する手間が省け、この行を削除したい場合でも通常の投稿リクエストを行うことができます。

于 2016-09-15T10:07:07.363 に答える
60

使用する場合 (他の人が述べたように)、文字列が有効な JSONでないjson_decode(file_get_contents("php://input"))場合、これは失敗することを指摘する価値があります。

これは、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);

編集:ここに示すように、または空の文字列が渡された ときに変更されないため、上記を削除するstrlen($json_params)と微妙なエラーが発生する可能性があることに注意してください: http://ideone.com/va3u8Ujson_last_error()null

于 2016-06-15T23:12:49.893 に答える
38

$HTTP_RAW_POST_DATAの代わりに使用し$_POSTます。

POSTデータをそのまま提供します。

後で使用してデコードできますjson_decode()

于 2014-03-26T13:11:00.553 に答える
9
$data = file_get_contents('php://input');
echo $data;

これは私にとってはうまくいきました。

于 2018-06-17T20:04:19.123 に答える
5

だいぶ遅く。
(OP)は、彼に与えられたすべての答えをすでに試していたようです。
それでも、(OP) が「.PHP」ファイルに渡されたものを受け取っていない場合、エラーは間違った URL である可能性があります。
正しい「.PHP」ファイルを呼び出しているかどうかを確認してください。
(URLのスペルミスまたは大文字)
および最も重要な
URLの「http」の後に「s」(安全)が含まれているかどうかを確認してください。
例:

"http://yourdomain.com/read_result.php"

する必要があります

"https://yourdomain.com/read_result.php"

またはいずれかの方法。
URL に合わせて「s」を追加または削除します。

于 2020-12-06T10:40:54.210 に答える
2

次のように使用できます..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'];
于 2021-05-01T05:06:40.477 に答える