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);

 
?>

 

posted @ 2025-10-11 17:45  海乐学习  阅读(11)  评论(0)    收藏  举报