PHP로 JSON POST 받기
PHPPHP로 JSON POST 받기
지불 인터페이스 웹 사이트에서 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"
}
}
}
결제 사이트 로그에 모든 것이 정상이라고 나와 있습니다. 뭐가 문제 야?
해결법
-
==============================
1.
시험;
$data = json_decode(file_get_contents('php://input'), true); print_r($data); echo $data["operacion"];
당신의 json과 당신의 코드에서 당신의 말에 바르게 단어를 쓰는 것처럼 보이지만 그것은 json에 없습니다.
편집하다
어쩌면 php : // 입력에서 json 문자열을 반향하려고 시도 할 가치가 있습니다.
echo file_get_contents('php://input');
-
==============================
2.
예를 들어 매개 변수가 이미 $ _POST [ 'eg']와 같이 설정되어 있고 매개 변수를 변경하지 않으려면 다음과 같이하면됩니다.
$_POST = json_decode(file_get_contents('php://input'), true);
이렇게하면 $ _POST를 다른 것으로 바꾸는 번거 로움을 덜어 줄 것이며이 줄을 꺼내려면 일반 우편 요청을 할 수 있습니다.
-
==============================
3.
$ _POST 대신 $ HTTP_RAW_POST_DATA를 사용하십시오.
POST 데이터를 그대로 제공합니다.
나중에 json_decode ()를 사용하여 디코딩 할 수 있습니다.
-
==============================
4.
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) 제거는 null 또는 빈 문자열이 전달 될 때 json_last_error ()가 변경되지 않으므로 미묘한 오류가 발생할 수 있음에 유의하십시오. http://ideone.com/va3u8U
-
==============================
5.
문서 읽기 :
PHP 매뉴얼에서와 같이
-
==============================
6.
$data = file_get_contents('php://input'); echo $data;
이것은 나를 위해 일했다.
-
==============================
7.
내용을 얻으려면 컬을 사용하는 응답을 게시하고 mpdf는 결과를 pdf로 저장하여 tipical 유스 케이스의 모든 단계를 얻으려고합니다. 그것은 원시 코드이므로 (사용자의 필요에 맞게) 코드가 작동합니다.
// 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)
-
==============================
8.
php : // 입력을 사용하면 도움이 될 수 있지만 나에게 도움이되지 않는다.
이 두 가지 검사로 문제가 해결되지 않으면 데이터가 무엇인지 알아 내려면 디코딩 전후에 데이터를 에코 또는 프린트하여 데이터 수신 및 처리 방법을 찾아야합니다.
from https://stackoverflow.com/questions/18866571/receive-json-post-with-php by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP에서 JavaScript 함수를 호출하는 방법? (0) | 2018.09.04 |
---|---|
PHP에서 데이터베이스 비밀번호를 보호하는 방법은 무엇입니까? (0) | 2018.09.04 |
사용자의 비밀번호를 안전하게 저장하려면 어떻게해야합니까? (0) | 2018.09.03 |
DOMNode의 innerHTML을 얻는 방법? (0) | 2018.09.03 |
PHP 코드 / 파일을 HTML (.html) 파일에 어떻게 추가합니까? (0) | 2018.09.03 |