Saya mencoba menerima JSON POST di situs web antarmuka pembayaran, tetapi saya tidak dapat mendekodekannya.
Ketika saya mencetak:
echo $_POST;
Saya mendapat:
Array
Saya tidak mendapatkan apa-apa ketika saya mencoba ini:
if ( $_POST ) {
foreach ( $_POST as $key => $value ) {
echo "llave: ".$key."- Valor:".$value."<br />";
}
}
Saya tidak mendapatkan apa-apa ketika saya mencoba ini:
$string = $_POST['operation'];
$var = json_decode($string);
echo $var;
Saya mendapatkan NULL ketika saya mencoba ini:
$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );
Ketika saya melakukannya:
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
Saya mendapat:
NULL
Format JSON adalah (sesuai dengan dokumentasi situs pembayaran):
{
"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"
}
}
}
Log situs pembayaran mengatakan semuanya OK. Apa masalahnya?
var_dump($_POST)
dikatakan? Apakah ini array kosong?json_decode
. Tapi mungkin layanan mengirimkan data di badan permintaan , itu cerita yang berbeda dan ya,file_get_contents('php://input')
harusnya berhasil.Jawaban:
Mencoba;
Dari json Anda dan kode Anda, sepertinya Anda telah mengeja kata operasi dengan benar di ujung Anda, tetapi tidak ada di json.
EDIT
Mungkin juga patut untuk mencoba menggaungkan string json dari php: // input.
sumber
Jika Anda sudah menetapkan parameter Anda seperti $ _POST ['mis.'] Misalnya dan Anda tidak ingin mengubahnya, lakukan saja seperti ini:
Ini akan menghemat kerumitan Anda mengubah semua $ _POST menjadi sesuatu yang lain dan memungkinkan Anda untuk tetap membuat permintaan posting normal jika Anda ingin mengeluarkan garis ini.
sumber
Perlu ditunjukkan bahwa jika Anda menggunakan
json_decode(file_get_contents("php://input"))
(seperti yang telah disebutkan orang lain), ini akan gagal jika string tidak valid JSON.Ini dapat dengan mudah diselesaikan dengan terlebih dahulu memeriksa apakah JSON valid. yaitu
Edit: Perhatikan bahwa menghapus
strlen($json_params)
atas mungkin mengakibatkan kesalahan yang halus, sepertijson_last_error()
tidak tidak berubah ketikanull
atau string kosong dilewatkan, seperti yang ditunjukkan di sini: http://ideone.com/va3u8Usumber
Gunakan
$HTTP_RAW_POST_DATA
sebagai ganti$_POST
.Ini akan memberi Anda data POST apa adanya.
Anda akan dapat mendekode menggunakan itu
json_decode()
nanti.sumber
$json = file_get_contents('php://input'); $obj = json_decode($json);
$HTTP_RAW_POST_DATA
.Baca dokumen:
seperti dalam Manual php
sumber
Ini berhasil untuk saya.
sumber
Saya ingin memposting jawaban yang juga menggunakan curl untuk mendapatkan konten, dan mpdf untuk menyimpan hasilnya ke pdf, sehingga Anda mendapatkan semua langkah dari use case tipical. Ini hanya kode mentah (jadi disesuaikan dengan kebutuhan Anda), tetapi ia berfungsi.
Dalam $ mysrcfile saya akan membaca data json seperti ini (sebagaimana dinyatakan pada jawaban sebelumnya):
sumber
file_get_contents('php://input')
.