初始化:
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);
}
}
}