php Post请求 Json方式
在php 调用一个 Post 请求接口 使用Json转参
HttpPostJson.php
<?php /** * PHP发送Json对象数据 * @param $url 请求url * @param $jsonStr 发送的json字符串 charset=utf-8 * @return array */ function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json;charset=utf-8', 'Content-Length: ' . strlen($jsonStr) ) ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return array($httpCode, $response); } ?>
调用方法
<?php error_reporting(E_ALL^E_NOTICE);//Notice不显示 ^E_DEPRECATED require_once('myClass/HttpPostJson.php') //请求接口 -------------------------------------------------------------------- $url = "http://127.0.0.1:80/CtiWebServiceAI-DeZhou/CtiWebServiceAI-DeZhou/QueryHouseCardIdInterface.php"; $jsonStr = json_encode(array('tel' => $Tel, 'companyNo' => $CompanyNo )); list($returnCode, $returnContent) = http_post_json($url, $jsonStr); if($returnCode!="200"){ //请求失败---- 返回码 不为200 则 认为 请求失败 exit(0); } //彻底清理字符串 取出来的json值中含 \n回车符 必须去掉 $returnContent1=clean_json_string($returnContent);//去掉 \n //分析 returnContent $obj_returnContent= json_decode($returnContent1);//JSON转为object对象 WriteLog("分析返回值 ".$returnCode ."returnContent 为 ".$obj_returnContent->success ." " .$obj_returnContent->message." " .$obj_returnContent->house_num." " .$obj_returnContent->house_info ); // 彻底清理字符串 function clean_json_string($str) { // 移除 BOM $str = preg_replace('/^\xEF\xBB\xBF/', '', $str); // 移除控制字符(除了换行和制表符) $str = preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $str); // 移除 UTF-8 无效字符 $str = preg_replace('/[^\x09\x0A\x0D\x20-\xFF]/', '', $str); return trim($str); }
注:有时在 http请求的结果的 Json 中 会夹着 \n的回车符,造成 Json 解析出错。
可以先清理一下 Json 字符串后 再转换 Json 对象
调用接口 QueryHouseCardIdInterface.php
<?php error_reporting(E_ALL^E_NOTICE);//Notice不显示 //1.获取原始POST数据 $json_str = file_get_contents('php://input'); // 用于读取POST的原始JSON数据 //2.解码JSON数据 $data = json_decode($json_str, true); $arr_result = array(); // 3 检查JSON解码是否成功 if ($data === null) { $arr_result['success']="false"; $arr_result['message']="input parameter error";// 输入的参数格式错误 $arr_result['house_num']="-1";// $arr_result['house_info']="-1"; // echo json_encode($arr_result); exit; } //4. 验证数据完整性 if (!isset($data['tel']) ) { $arr_result['success']="false"; $arr_result['message']="input tel error"; // 输入的电话号码错误 $arr_result['house_num']="-1";// $arr_result['house_info']="-1"; // echo json_encode($arr_result); exit; } // 5. 参数取值 $tel = $data['tel']; //6.查数据库获取房屋信息 //7.调试数据 $house_num=0; //8. 处理返回值 if ($house_num ==1) { //一套 $arr_result['success']="true"; $arr_result['message']="find the data"; // $arr_result['house_num']="1";// $arr_result['house_info']="用热卡号为12889,房产地址为XXXXX"; // }else if($house_num > 1){ //多套 $arr_result['success']="true"; $arr_result['message']="find the data"; // $arr_result['house_num']=$house_num;// $arr_result['house_info']="第一套,用热卡号为17779,房产地址为XXXXXX。第二套,用热卡号为18889,房产地址为XXX。第三套,用热卡号为19997,房产地址为XXXXXX"; // }else { // 没有找到绑定记录 $arr_result['success']="true"; $arr_result['message']="not find the data"; // $arr_result['house_num']=$house_num;// 0 $arr_result['house_info']="没有查到房屋"; // } // 9. 输出JSON响应 echo json_encode($arr_result); ?>

浙公网安备 33010602011771号