결제 인터페이스 웹 사이트에서 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"
}
}
}
결제 사이트 로그에 모든 것이 정상이라고 표시됩니다. 뭐가 문제 야?
답변
시험;
$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');
답변
예를 들어 $ _POST [ ‘eg’]와 같은 매개 변수가 이미 설정되어 있고 변경하지 않으려면 다음과 같이하십시오.
$_POST = json_decode(file_get_contents('php://input'), true);
이렇게하면 모든 $ _POST를 다른 것으로 변경하는 번거 로움을 덜고이 라인을 꺼내고 싶을 때 정상적인 포스트 요청을 할 수 있습니다.
답변
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);
편집 : 제거하는 것을 참고 strlen($json_params)
로 위의 것은 미묘한 오류가 발생할 수 있습니다 json_last_error()
않습니다 되지 때 변경 null
빈 문자열이 전달됩니다 또는 다음과 같이 :
http://ideone.com/va3u8U
답변
$HTTP_RAW_POST_DATA
대신에 사용하십시오 $_POST
.
POST 데이터를 그대로 제공합니다.
json_decode()
나중에 사용하여 디코딩 할 수 있습니다 .
답변
답변
$data = file_get_contents('php://input');
echo $data;
이것은 나를 위해 일했습니다.
답변
curl을 사용하여 내용을 가져오고 mpdf 를 사용하여 결과를 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 데이터를 읽을 것입니다 (이전 답변에서 언급했듯이).
$data = json_decode(file_get_contents('php://input'));
// (then process it and build the page source)