PHPのJSONのPOST通信サンプルです
こんにちは!
スマホアプリ作成家くまかけです(^^)
レンタルサーバー「くまプレス」とはちがって、OpenBlocksを使って環境構築をしています。
普段はCentOSを使っているのですが、Debian環境もようやくなれてきました(^^;
さて今回はPHPで作成したAPIについて、これもPHPからJSONでPOSTすることが有りました。
今回これに、大いにはめられたので、忘れないようにと思いメモります。
送受信のサンプルです。
送信側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $data = [ 'token' => '123456789A', 'kokyaku_id' => 'abcdefg', 'cvv' => '123', 'rec' => [ 'rec01' => 'rec01', 'rec02' => 'rec02' ] ]; $json = json_encode( $data ); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $json ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, 'http://192.168.5.254/api/chk_cvv.php'); $result = curl_exec( $ch ); $res_json = json_decode( $result, true ); curl_close($ch); var_dump( $res_json ); |
受信側
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $json = file_get_contents("php://input"); //var_dump( $json ); $rcv = json_decode( $json, true ); //var_dump( $rcv ); $data = [ 'result' => true, 'msg_cd' => $rcv['token'] . '-' . $rcv['rec']['rec01'], 'messsage' => '正常に取得できました' ]; header('Content-Type:application/json'); echo json_encode( $data ); exit; ?> |
CURLを使って、POST送信して、受信データの一部をJSON形式で返却するサンプルです。
送信側をブラウザで呼び出すと、
array(3) { [“result”]=> bool(true) [“msg_cd”]=> string(16) “123456789A-rec01” [“messsage”]=> string(30) “正常に取得できました” }
って、表示されます。
今回ハマったのは、受信の”php://input”の部分です。
POSTなんで、$_POSTでやってて、全然受信ができなかったんです。
で、”http_build_query”で実装したりしたんですが、なんか負けた感がムクムクと出てきてしまって。。。(^^;
で、”php://input”と出会いました。
読み込み専用のストリームだけど、enctype=”multipart/form-data” に対しては使用できないので、画像なんかのアップロードがあるときは使えないみたいです。
さて、ファイトです!