web-dev-qa-db-ja.com

JSONを受け取る POST と PHP

支払いインターフェースの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"
       }
    }
}

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

233
Pablo Ramirez

してみてください。

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

あなたのjsonとあなたのコードから、あなたはWord 操作 を正しくつづっているように見えますが、それはjsonにはありません。

_編集_

Php:// inputからjson文字列をエコーすることも試してみる価値があります。

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

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

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

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

68
Steve Chan

$HTTP_RAW_POST_DATAの代わりに$_POSTを使用してください。

そのままPOSTデータが得られます。

後でjson_decode()を使ってデコードすることができます。

37
Urisavka
27
XtraSimplicity

ドキュメントを読む:

一般的に、$ HTTP_RAW_POST_DATAの代わりにphp:// inputを使用するべきです。

phpマニュアルのように

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

これは私のために働きました。

7
hyperCoder