互联网医院三级等保测评接口示例PHP版本:密钥生成+密钥过期刷新+接口请求+兜底处理

初始化:

public function __construct(){

   parent::__construct();

   //初始化密钥

   $this->appSecret = "";

   //第三方厂商标识

   $this->clientId ='';

   //机构名称

   $this->orgName='';

   //机构编码

   $this->orgCode='';

   //平台名称

   $this->channelName='';

   //测试地址

   $this->url = '';

}

获取秘钥并刷新

public function get_token(){

//获取存储值

$data = json_decode(file_get_contents("intertoken.json"));

//判断是否存在+是否过期

if (!$data || $data->expire_time < time()) {

     //拼接请求地址

     $url = $this->url."/wjw/third/oauth/getAccessToken";

     //转换参数

     $jsondata['clientId'] = $this->clientId;

     $jsondata['appSecret'] = $this->appSecret;

     $jsonStr = json_encode($jsondata);

     //请求

     $res =$this->curlRequest($url,$jsonStr);

     //判断是否成功

     $status = $res['status'];

        //判断是否成功

        if ($status==0) {

           $datas = array();

           //解析数据

           $backdata = json_decode($res['data'],true);

           //存储数据

           $datas['expire_time'] = time() + $backdata['expiresIn'];

           $datas['access_token'] = $backdata['accessToken'];

            //写入数据

            $fp = fopen("intertoken.json", "w");

            fwrite($fp, json_encode($datas));

            fclose($fp);

            return $backdata['accessToken'];

        }

  } else {

      $access_token = $data->access_token;

      $this->accessToken = $access_token;

      return $access_token;

    }

 }

公共请求方法:

public function curlRequest($url, $jsonStr){

 $ch = curl_init();

 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

 curl_setopt($ch, CURLOPT_TIMEOUT,        10);

 curl_setopt($ch, CURLOPT_URL, $url);

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

 curl_setopt($ch, CURLOPT_POST, 1);

 //ssl去掉强验证(有需要可以屏蔽)

 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '0');

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '0');

 curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json; charset=utf-8'));

 curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);

 $output = curl_exec($ch);

 curl_close($ch);

 $output_array = json_decode($output, true);

 return $output_array;

}

门诊数据上报

public function Outpatient($data){

  //根据信息获取门诊就诊信息

  $datainfo =’’;

  if($datainfo){

    //拼接请求地址

    $url = $this->url."/wjw/upload/uploadConsult";

    //组装数组

    $accessToken = $this->get_token();

    $clientId = $this->clientId;

    $thirdUniqueid = ‘’;//唯一标识(建议时间戳+主表id)

    $orgName = $this->orgName;

    $orgCode = $this->orgCode;

    $channelName = $this->channelName;

    //组装数据

    $jsondata['accessToken'] ='';//接口调用凭证

    $jsondata['clientId'] ='';//第三方厂商标识

    $jsondata['thirdUniqueid'] ='';//唯一标识

    $jsondata['orgName'] ='';//机构名称

    $jsondata['orgCode'] ='';//机构编码

    $jsondata['channelName'] ='';//咨询渠道

    //组装数据(需要查询和分别填入)

    $jsondata['section'] ='';//科室名称

    $jsondata['sectionCode'] ='';//科室编码

    $jsondata['docName'] ='';//姓名(医师、护师、技师)

    $jsondata['certificateNum'] ='';//执业资格证号

    $jsondata['patientName'] ='';//患者姓名

    $jsondata['patientAge'] =intval('');//患者年龄

    //患者性别(针对保密信息做容错)

    if($datainfo['patientSex'] ==1){

       $jsondata['patientSex'] ="1";

    }else{

       $jsondata['patientSex'] ="2";

    }

    $jsondata['patientIdcardType'] =intval("1");//证件类型(默认身份证)

    $jsondata['patientIdcardNum'] ='';//患者证件号码

    $jsondata['serviceType'] =intval("2");;//服务类型(1网络咨询 2网络门诊)

    $jsondata['consultNo'] ='';//网络咨询或网络门诊编号

    $jsondata['consultType'] =intval("1");//1图文2视频(默认为1)

    $jsondata['consultApplyTime'] ='';//咨询申请时间

    $jsondata['consultStartTime'] =date('Y-m-d H:i:s','');//咨询开始时间

     $jsondata['consultEndTime'] =date('Y-m-d H:i:s','');//咨询开始时间

     $jsondata['feeType'] =intval('');//费别(1自费 2医保)

     $jsondata['price'] ='';//咨询价格

     $jsondata['isReply'] =intval(1);//咨询是否回复(0未回复 1已回复)

     $jsondata['patientEvaluate'] =intval(1);//患者满意度(1代表非常满意;5代表非常不满意)

     $jsondata['complainInfo'] ='无';//投诉举报信息

     $jsondata['disposeResult'] ='无';//处理结果信息

     $jsondata['isRiskWarn'] =intval(1);//是否进行诊前风险提示(0否 1是)

     $jsondata['isPatientSign'] =intval(1);//是否确认患者为签约对象(0否 1是)

     $jsondata['uploadTime'] =date('Y-m-d H:i:s',time());//上传时间

     $jsondata['medicalHistory'] = '注意规定时间内复诊';//患者病史描述

     $jsondata['isMark'] = "0";//是否留痕(1:代表留痕;0代表未留痕)

     //转换参数

     $jsonStr = '['.json_encode($jsondata).']';

     //请求结果

     $result = $this->curlRequest($url,$jsonStr);

     //返回结果处理(做兜底处理)

     if($result['status'] == 0){//成功

         $dataup['reportstatus'] = 1;

         $dataup['report_message'] = $result['message'];

     }else{

         $dataup['reportstatus'] = 2;

         $dataup['report_message'] = $result['message'];

     }

         //修改数据

         $this->db->update();

    }

}

复诊数据上报:

public function Checkpatient($data){

  //根据信息获取门诊就诊信息

  $datainfo = ‘’;

  if($datainfo){

      //拼接请求地址

      $url = $this->url."/wjw/upload/uploadFurtherConsult";

      //组装数组

      $accessToken = $this->get_token();

      $clientId = $this->clientId;

      $thirdUniqueid = ‘’;唯一id(建议时间戳+主表id)

      //判断是否开具处方

      $prescription = ‘';//查询处方表数据(用于判断是否开具处方)

      if($prescription){

          $isPrescription = 1;

      }else{

          $isPrescription = 0;

      }

      //获取固定数据

      $orgName = $this->orgName;

      $orgCode = $this->orgCode;

      $channelName = $this->channelName;

      //组装数据

      $jsondata['accessToken'] =$accessToken;//接口调用凭证

      $jsondata['clientId'] =$clientId;//第三方厂商标识

      $jsondata['thirdUniqueid'] =$thirdUniqueid;//唯一标识

      $jsondata['orgName'] =$orgName;//机构名称

      $jsondata['orgCode'] =$orgCode;//机构编码

      $jsondata['channelName'] =$channelName;//诊疗渠道

      //组装数据(需要查询和分别填入)

      $jsondata['section'] ='';//复诊科室

      $jsondata['sectionCode'] ='';//科室编码

      $jsondata['docName'] ='';//复诊医师姓名

      $jsondata['certificateNum'] ='';//执业资格证号

$jsondata['patientName'] ='';//患者姓名

      $jsondata['patientAge'] =intval('');//患者年龄

      //患者性别(针对保密信息做容错)

      if($datainfo['patientSex'] ==1){

          $jsondata['patientSex'] ='1';

      }else{

          $jsondata['patientSex'] ='2';

      }

      $jsondata['patientIdcardType'] =intval(1);//证件类型(默认身份证)

      $jsondata['patientIdcardNum'] ='';//患者证件号码

      $jsondata['furtherConsultNo'] =$thirdUniqueid;//网络复诊编号

      $jsondata['furtherConsulType'] =intval('');//复诊类别

      //监护人姓名(小于6岁需要)

      if(''<=6){

         $jsondata['guardianName'] ='测试监护人';//监护人姓名

         $jsondata['guardianIdcardNum'] =;//监护人身份证号

      }else{

         $jsondata['guardianName'] ='无';//监护人姓名

         $jsondata['guardianIdcardNum'] ='无';//监护人身份证号

      }

      $jsondata['medicalHistory'] ='';//患者简要病史描述

      $jsondata['consultDiagnosisType'] =intval(1);//1文字;2图片jpg格式;3图片png格式;4图片bmp格式

      $jsondata['consultDiagnosis'] ='感冒';//首诊诊断

      $jsondata['consultTime'] =date('Y-m-d 00:00:00',time());//首诊时间

      $jsondata['consultOrg'] = '医院';//首诊机构

      $jsondata['furtherConsultApplyTime'] = date('Y-m-d H:i:s','');//复诊申请时间

      $jsondata['furtherConsulStartTime'] = date('Y-m-d H:i:s','');/复诊申请时间

       $jsondata['furtherConsulEndTime'] = '';//复诊结束时间

      $jsondata['furtherConsulIsReply'] = intval(1);//0未回复 1已回复(默认已回复)

      $jsondata['feeType'] = intval('');//费别(1自费 2医保);//费别,1自费 2医保

      $jsondata['furtherConsultDiagnosis'] ='感冒';//复诊诊断

      $jsondata['furtherConsultDiagnosisNo'] =$thirdUniqueid;//复诊icd诊断编码

      $jsondata['furtherConsultPrice'] ='';//复诊价格

      $jsondata['patientEvaluate'] =intval(1);//患者满意度(1-5 1代表非常满意;5代表非常不满意)

      $jsondata['complainInfo'] ='无';//投诉举报信息

      $jsondata['disposeResult'] ='无';//处理结果信息

      $jsondata['isRiskWarn'] =intval(1);//是否进行诊前风险提示

      $jsondata['isPatientSign'] =intval(1);//是否确认患者为签约对象

      $jsondata['isPrescription'] =intval($isPrescription);//是否开具处方

      $jsondata['uploadTime'] = date('Y-m-d H:i:s',time());//上传时间

      $jsondata['cityId'] = '';//城市id(参考地区字段)

      $jsondata['isMark'] = 1;//是否留痕(1:代表留痕;0代表未留痕)

      //转换参数

      $jsonStr = '['.json_encode($jsondata).']';

      //请求结果

      $result = $this->curlRequest($url,$jsonStr);

      //返回结果处理(做兜底处理)

      if($result['status'] == 0){

         $dataup['reportstatus'] = 1;

         $dataup['report_message'] = $result['message'];

      }else{

          $dataup['reportstatus'] = 2;

          $dataup['report_message'] = $result['message'];

      }

      //修改数据

      $this->db->update();

}

}

处方上传

public function prescription($data){

//获取数据(订单数据)

$datainfo = ‘’;

//获取数据(药品数据)

$prescription = ‘’;

   //循环数据

   $drugname = implode('|',array_column($prescription,'drugname'));

   $drugcode = implode('|',array_column($prescription,'drugcode'));

   $drugcommonname =implode('|',array_column($prescription,'drugcommonname'));

   $specification = implode('|',array_column($prescription,'specification'));

   $frequency = implode('|',array_column($prescription,'frequency'));

   $usage = implode('|',array_column($prescription,'medication_method'));

   $doseunit = trim($doseunit,'|');

   $doseeachtime = trim($doseeachtime,'|');

   $medicationdays = trim($medicationdays,'|');

   $quantity = implode('|',array_column($prescription,'number'));

   $drugpackage = implode('|',array_column($prescription,'drugpackage'));

   //拼接请求地址

   $url = $this->url."具体请求地址";

   //组装数组

   $accessToken = $this->get_token();

   $clientId = $this->clientId;

   $thirdUniqueid= ‘’;//唯一id(建议时间戳+主表id)

   $orgName = $this->orgName;

   $orgCode = $this->orgCode;

   $channelName = $this->channelName;

   //组装数据

   $jsondata['accessToken'] =$accessToken;//接口调用凭证

   $jsondata['clientId'] =$clientId;//第三方厂商标识

   $jsondata['thirdUniqueid'] =$thirdUniqueid;//唯一标识

   $jsondata['orgName'] =$orgName;//机构名称

   $jsondata['orgCode'] =$orgCode;//

   $jsondata['channelName'] =$channelName;//机构编码

   //拼装数据

   $jsondata['section'] = '';//科室名称

   $jsondata['sectionCode'] = '';//科室编码

   $jsondata['docName'] = '';//医师姓名

   $jsondata['docCertificateNum'] ='';//医师执业资格证号

    $jsondata['pharmacistName'] = '测试药师';//药师姓名

    $jsondata['pharmacistOrg'] = '执业机构';//药师执业机构

    $jsondata['pharmacistCertificateNum'] = ;//药师执业资格证号

    $jsondata['furtherConsultNo'] = $thirdUniqueid;//网络复诊编号

    $jsondata['furtherConsultDiagnosis'] = '感冒';//复诊诊断

    $jsondata['patientName'] = '';//患者姓名

    //患者性别(针对保密信息做容错)

    if('' ==1){

        $jsondata['patientSex'] ='1';

    }else{

        $jsondata['patientSex'] ='2';

    }

    $jsondata['patientAge'] = intval('');//患者年龄

    $jsondata['patientIdcardType'] = intval(1);//证件类型(1 身份证  2 护照)

    $jsondata['patientIdcardNum'] = '';//患者证件号码

    //监护人姓名(小于6岁需要)

    if(''<=6){

       $jsondata['guardianName'] ='测试监护人';//监护人姓名

       $jsondata['guardianIdcardNum'] =;//监护人身份证号

       $jsondata['accompanyDocName'] ='测试陪伴医师';//陪伴医师姓名

       $jsondata['accompanyCertificateNum'] =;//陪伴医师执业证号码

    }else{

       $jsondata['guardianName'] ='测试监护人';//监护人姓名

       $jsondata['guardianIdcardNum'] =;//监护人身份证号

       $jsondata['accompanyDocName'] ='测试陪伴医师';//陪伴医师姓名

       $jsondata['accompanyCertificateNum'] =;//陪伴医师执业证号码

    }

       $jsondata['feeType'] = intval('');//费别(1自费 2医保);//费别,1自费 2医保

       $jsondata['medicalHistory'] = '';//患者简要病史描述

       $jsondata['recipeTime'] = date('Y-m-d 00:00:00',time());//处方日期

       $jsondata['recipeType'] = intval(2);//处方类型(1中药 2西药 3成药(三医))

       $jsondata['reviewTime'] = date('Y-m-d 00:00:00',time());//审方日期

       $jsondata['recipeUnitPrice'] =$prescription[0]['price'];//处方单价

       //药品数据开始

       $jsondata['drugName'] =$drugname;//药品名称商品名

       $jsondata['drugCode'] =$drugcode;//药品编码

       $jsondata['drugCommonName'] =$drugcommonname;//药品通用名

       $jsondata['specification'] =$specification;//药品通用名

       $jsondata['frequency'] =$frequency;//使用频度

       $jsondata['usage'] =$usage;//用法

       $jsondata['doseUnit'] =$doseunit;//剂量单位

       $jsondata['doseEachTime'] =$doseeachtime;//每次剂量

       $jsondata['medicationDays'] =$medicationdays;//用药天数

       $jsondata['quantity'] =$quantity;//数量

       $jsondata['drugpackage'] =$drugpackage;//数量

       //药品数据结束

       $jsondata['recipeAllPrice'] =$prescription[0]['price'];

       $jsondata['uploadTime'] =date('Y-m-d H:i:s',time());//上传时间

$jsondata['recipeNo'] =$thirdUniqueid;//医院处方编号

       $jsondata['cityId'] = '';//城市id(参考地区字段)

       //转换参数

       $jsonStr = '['.json_encode($jsondata).']';

       //请求结果

       $result = $this->curlRequest($url,$jsonStr);

       //返回结果处理(做兜底处理)

       if($result['status'] == 0){

           $dataup['reportstatus'] = 1;

           $dataup['report_message'] = $result['message'];

       }else{

           $dataup['reportstatus'] = 2;

           $dataup['report_message'] = $result['message'];

       }

       //修改数据

       $this->db->update();

   }

数据兜底处理(定时任务)

    //定时任务上报漏掉的数据或者不成功的,以order表作为基础表来兜底处理

    //30 * * * * curl https://xst.ccmtv.cn/Inter/Hospitalcrontab/report_order

    public function report_order(){

        //获取数据

        $result = ‘’;

        if($result){

            foreach ($result as $key=>$value){

                if($value['type']==1){//门诊

                    $this->Outpatient($value);

                }elseif($value['type']==2){//复诊

                    $this->Checkpatient($value);

                }

            }

        }

    }

    //定时任务上报漏掉的数据或者不成功的,以处方表作为基础表来兜底处理

    //30 * * * * curl 请求地址

    public function report_prescription(){

        //获取数据

        $result = ‘’;

        if($result){

            foreach ($result as $key=>$value){

                $this->prescription($value);

            }

        }

}

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...