萬(wàn) 杰
(湖州職業(yè)技術(shù)學(xué)院 物流與信息工程學(xué)院, 浙江 湖州 313000)
目前,醫(yī)院的信息化業(yè)務(wù)正從傳統(tǒng)的PC端向手機(jī)、PDA等移動(dòng)終端發(fā)展。安卓和蘋(píng)果等生態(tài)系統(tǒng)的APP,由于存在系統(tǒng)兼容性差、開(kāi)發(fā)成本較高、用戶(hù)獲取較難、用戶(hù)粘度較低等問(wèn)題,較難在智慧醫(yī)院建設(shè)中推廣。微信是一款有10多億用戶(hù)群體的移動(dòng)應(yīng)用。而且,圍繞著微信又有諸如訂閱號(hào)、公眾號(hào)、小程序等生態(tài)體系。其中的微信公眾號(hào)主要面向企業(yè)級(jí)用戶(hù),以提供更加便捷的服務(wù)為主要目的,具有跨平臺(tái)、用戶(hù)粘度高、認(rèn)知度高、易推廣、二次開(kāi)發(fā)生態(tài)環(huán)境較好等優(yōu)點(diǎn)。因此,微信醫(yī)療信息化應(yīng)該是智慧醫(yī)院建設(shè)和發(fā)展的重點(diǎn)方向[1]111-115 [2]86-87 [3]273-275。
本研究擬開(kāi)發(fā)一個(gè)基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)。該系統(tǒng)利用WebService技術(shù)和醫(yī)院HIS系統(tǒng)數(shù)據(jù)進(jìn)行通訊,采用PHP和Mysql語(yǔ)言編程,可滿(mǎn)足三級(jí)甲等醫(yī)院對(duì)預(yù)約掛號(hào)的需求,同時(shí)也可作為智慧醫(yī)院建設(shè)的一部分技術(shù)和內(nèi)容進(jìn)行推廣。
基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)采用由數(shù)據(jù)層、業(yè)務(wù)層和表示層構(gòu)成的三層架構(gòu)設(shè)計(jì),主要由微信客戶(hù)端、微信開(kāi)放平臺(tái)服務(wù)器、醫(yī)院外網(wǎng)服務(wù)器和應(yīng)用開(kāi)發(fā)后端服務(wù)器四部分組成。其中,應(yīng)用開(kāi)發(fā)后端服務(wù)器操作系統(tǒng)采用Centos,Web服務(wù)主要采用Apache,數(shù)據(jù)庫(kù)采用MySQL。前端開(kāi)發(fā)框架為Vue.js,后端開(kāi)發(fā)框架為T(mén)hinkPHP。
微信開(kāi)放平臺(tái)技術(shù)是醫(yī)院預(yù)約掛號(hào)系統(tǒng)的支撐技術(shù),類(lèi)似蘋(píng)果IOS或Android的底層架構(gòu)技術(shù),主要包括Access_token技術(shù)、模板消息接口技術(shù)和基礎(chǔ)消息能力技術(shù),可提供基礎(chǔ)性服務(wù),如用戶(hù)權(quán)限、發(fā)送消息接口、模板接口等。
1.Access_token技術(shù) Access_token是微信公眾號(hào)全局唯一的接口調(diào)用憑據(jù),微信公眾號(hào)在調(diào)用各接口時(shí)都需要使用Access_token,其有效時(shí)間為7 200 ms,主要作用是獲取用戶(hù)的微信賬號(hào)信息,它可以為以后的推送服務(wù)提供保障。一般來(lái)講,通過(guò)第三方用戶(hù)唯一憑證Appid和第三方用戶(hù)唯一憑證密鑰Appsecret可獲取Access_token,并最終獲取Openid。Openid作為微信應(yīng)用的全程唯一標(biāo)識(shí)符,是微信公眾號(hào)給用戶(hù)分配的唯一且不重復(fù)的標(biāo)識(shí)。
2.模板消息接口技術(shù) 模板消息接口技術(shù)在微信公眾號(hào)中用于向用戶(hù)發(fā)送重要服務(wù)通知,如掛號(hào)或退號(hào)成功、就診時(shí)間提醒、就診評(píng)價(jià)等與病人互動(dòng)的服務(wù),都需要通過(guò)模板消息服務(wù)來(lái)完成。認(rèn)證后的微信公眾號(hào)可以申請(qǐng)模板消息功能入口,但在模板消息調(diào)用時(shí)需要模板ID和模板中各參數(shù)的賦值內(nèi)容。
3.基礎(chǔ)消息能力技術(shù) 當(dāng)用戶(hù)通過(guò)微信公眾號(hào)向服務(wù)方發(fā)送消息時(shí),微信服務(wù)器會(huì)將數(shù)據(jù)包發(fā)送到開(kāi)發(fā)者填寫(xiě)的URL上,開(kāi)發(fā)者可以根據(jù)用戶(hù)發(fā)送的消息內(nèi)容,利用基礎(chǔ)消息能力技術(shù)豐富應(yīng)用內(nèi)容。
PHP是一種解釋性語(yǔ)言,也是一種容易學(xué)習(xí)和使用的開(kāi)發(fā)語(yǔ)言,其語(yǔ)法特點(diǎn)類(lèi)似于C語(yǔ)言,且加入了面向?qū)ο蟮母拍睿虼司哂休^強(qiáng)的實(shí)用性[4]50-51。相比Java,其主要優(yōu)點(diǎn)是編程速度快、部署方便,其缺點(diǎn)是安全性不如Java高。Mysql是一種開(kāi)源數(shù)據(jù)庫(kù)技術(shù),廣泛應(yīng)用于網(wǎng)站類(lèi)項(xiàng)目。
在本項(xiàng)目的開(kāi)發(fā)過(guò)程中,我們主要使用PHP和Mysql技術(shù)。其中的PHP框架,選擇國(guó)內(nèi)廣泛使用的ThinkPHP 5。
醫(yī)院內(nèi)部系統(tǒng)龐大而繁雜,其中的HIS系統(tǒng)是它的主要支撐系統(tǒng)。HIS系統(tǒng)在對(duì)外進(jìn)行數(shù)據(jù)對(duì)接時(shí)使用WebService技術(shù)。WebService采用XML標(biāo)準(zhǔn)配置應(yīng)用程序,以方便不同系統(tǒng)之間的信息交互。
在智慧醫(yī)院概念提出之前,醫(yī)院掛號(hào)服務(wù)的主要方式有電話掛號(hào)、窗口掛號(hào)和網(wǎng)上掛號(hào)等幾種。隨著智能手機(jī)的普及和智慧醫(yī)院的建設(shè),網(wǎng)上掛號(hào)逐漸轉(zhuǎn)移到手機(jī),窗口掛號(hào)基本被自助機(jī)掛號(hào)替代。
通過(guò)微信公眾號(hào)進(jìn)行門(mén)診掛號(hào)服務(wù)的優(yōu)點(diǎn)是:(1)可以預(yù)約就診時(shí)間,系統(tǒng)根據(jù)數(shù)據(jù)分析,可以將時(shí)間誤差控制在10分鐘之內(nèi),從而大大節(jié)省病人的候診時(shí)間,減少病人在醫(yī)院的滯留時(shí)間。(2)可以自助操作,不需要第三方人員幫助。(3)不需要單獨(dú)安裝APP[5]77-81。
以下是基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)的功能設(shè)計(jì):
安全性設(shè)計(jì)是該系統(tǒng)的重要組成部分。在微信開(kāi)放平臺(tái)上,該系統(tǒng)分為前臺(tái)、中臺(tái)和后臺(tái)三部分。其中,前臺(tái)面向用戶(hù),負(fù)責(zé)功能性業(yè)務(wù);中臺(tái)面向醫(yī)院信息科,負(fù)責(zé)信息的抽取和轉(zhuǎn)發(fā);后臺(tái)面向開(kāi)發(fā)者,負(fù)責(zé)數(shù)據(jù)的邏輯性業(yè)務(wù)。通過(guò)微信公眾號(hào)構(gòu)建用戶(hù)權(quán)限體系,可以確保數(shù)據(jù)信息的安全可靠性[6]68-70。
在智慧醫(yī)院建設(shè)中,公立醫(yī)院,尤其是大型的三甲醫(yī)院應(yīng)走在前列??紤]到國(guó)家有關(guān)政策的延續(xù)和變化,基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)的設(shè)計(jì)必須考慮功能擴(kuò)展問(wèn)題,通過(guò)二次開(kāi)發(fā)技術(shù),為其他廠商接入該系統(tǒng)提供便利。
該系統(tǒng)能通過(guò)微信平臺(tái)提供推送、回復(fù)服務(wù)。如:通過(guò)設(shè)置關(guān)鍵字,能主動(dòng)回復(fù)用戶(hù)在微信窗口的留言;通過(guò)利用定時(shí)器技術(shù),能向用戶(hù)定時(shí)推送號(hào)源提醒服務(wù)等。
用戶(hù)綁定就是利用WebService技術(shù),建立個(gè)人微信賬號(hào)與醫(yī)院HIS系統(tǒng)中病人賬號(hào)的關(guān)聯(lián)。它是預(yù)約掛號(hào)系統(tǒng)的核心技術(shù)。該技術(shù)是微信平臺(tái)與醫(yī)院HIS系統(tǒng)之間實(shí)現(xiàn)信息共享的橋梁,主要內(nèi)容包括綁定號(hào)源數(shù)據(jù)、綁定家庭賬戶(hù)等。其功能模塊的流程如圖所示(參見(jiàn)圖1)。
圖1 微信用戶(hù)綁定功能模塊流程圖示
基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)需要通過(guò)WebService服務(wù),才能與醫(yī)院的HIS系統(tǒng)聯(lián)通,因此需要有一套完整的接口來(lái)規(guī)范數(shù)據(jù)的交互[7]1 927-1 937 [8]152-157。由接口提供標(biāo)準(zhǔn)的對(duì)接方式,由醫(yī)院提供WebService服務(wù),以便系統(tǒng)調(diào)用,并通過(guò)前置服務(wù)部署至外網(wǎng)。接口文檔應(yīng)提供方法名、出入?yún)?shù)(參數(shù)的大小寫(xiě)、格式等)。數(shù)據(jù)傳輸格式統(tǒng)一采用XML,編碼為UTF-8。根據(jù)預(yù)約掛號(hào)的實(shí)際需要,接口應(yīng)具有相應(yīng)的功能(參見(jiàn)圖2)。
圖2 預(yù)約掛號(hào)功能點(diǎn)設(shè)計(jì)圖示
在設(shè)計(jì)接口文檔時(shí),應(yīng)詳細(xì)標(biāo)明參數(shù)名稱(chēng)、參數(shù)類(lèi)型、參數(shù)說(shuō)明、是否可空等內(nèi)容,以便與醫(yī)院的HIS系統(tǒng)對(duì)接溝通。表1以預(yù)約掛號(hào)接口為例,展示了相應(yīng)的部分內(nèi)容,其他接口與之類(lèi)似(參見(jiàn)表1)。
表1 預(yù)約掛號(hào)數(shù)據(jù)入?yún)⒊鰠⒈?/p>
基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng)的業(yè)務(wù)流程如圖所示(參見(jiàn)圖3)。用戶(hù)進(jìn)入醫(yī)院微信公眾號(hào)后,首先要綁定用戶(hù),然后根據(jù)病情選擇科室或醫(yī)生,再選擇就診日期和就診時(shí)間段(系統(tǒng)規(guī)定每人每天只能掛兩個(gè)號(hào)源)。當(dāng)就診病人確定后,系統(tǒng)就會(huì)顯示“掛號(hào)成功”。此時(shí),在微信公眾號(hào)中會(huì)收到系統(tǒng)“掛號(hào)成功”的通知。如果信息錯(cuò)誤,則可以退號(hào)或重新掛號(hào)[9]53-55 [10]262-264。號(hào)源確定后,患者可于指定時(shí)間去醫(yī)院就診?;颊叩结t(yī)院后,在導(dǎo)醫(yī)臺(tái)或自助機(jī)取號(hào)繳費(fèi)。在得到具體的診室信息后,整個(gè)預(yù)約掛號(hào)流程便自然結(jié)束。
$appid=$res[’appid’];
$appsecret=$res[’appsecret’];
$url = ’/cgi-bin/token?grant_type=client_credential&appid=’
$url_get =$url.$appid .’&secret=’ . $appsecret;
$json = json_decode ( $this->curlGet ( $url_get ) );
其中,appi和appsecret代表每一個(gè)公眾號(hào)的唯一標(biāo)識(shí)符。用以上代碼訪問(wèn)微信開(kāi)放平臺(tái),繼而獲取json。access_token值就在json中。
$code = request()->param(’code’); //通過(guò)code獲得openid
$baseUrl = urlencode(’http://’.$_SERVER[’HTTP_HOST’].
$_SERVER[’REQUEST_URI’].$_SERVER[’QUERY_STRING’]);
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header(“Location: $url”).
$dataBase = db(’Medical_dept’);
$array_dept = $dataBase->select();
$this -> assign(’array_dept’, $array_dept);
先將科室和科室子列表同步到本地?cái)?shù)據(jù)庫(kù),再利用PHP代碼獲取科室信息,最后通過(guò)Vue.js技術(shù)將信息呈現(xiàn)到微信客戶(hù)端,讓患者進(jìn)行選擇。
$ksdm = request()->post(’ksdm’);//科室代碼選擇該科室下可以掛號(hào)的醫(yī)生
$begin_day=date(’Y-m-d’,strtotime($showtime . ’+1 day’));//從第二天開(kāi)始掛號(hào)
$end_day=date(’Y-m-d’,strtotime($showtime . ’+7 day’));//最長(zhǎng)可以掛7天后的號(hào)源
$parm = array (
’code’ => ’6’,
’mess’=> $this->ws_token.’@’.$this->ws_name.’@’.$begin_day.’@’.$end_day.’,
’ref_mess’=>’mess’,
).
根據(jù)排班日期、科室代碼、醫(yī)生代碼、科室名稱(chēng)和醫(yī)生姓名,到系統(tǒng)中申請(qǐng)?zhí)栐?。申?qǐng)?zhí)栐吹木唧w程序如下:
$pbrq = request()->param(’pbrq’);
$ksdm = request()->param(’ksdm’);
$ysdm = request()->param(’ysdm’);
$ksmc = request()->param(’ksmc’);
$ysmc = request()->param(’ysmc’).
病人先登錄微信,進(jìn)入醫(yī)院微信公眾號(hào),選擇相應(yīng)的醫(yī)生或科室,然后選擇就診時(shí)間。為方便預(yù)約,病人可以選擇7天之內(nèi)沒(méi)有被預(yù)約掛滿(mǎn)的醫(yī)生。
病人發(fā)起請(qǐng)求后,系統(tǒng)會(huì)將醫(yī)生信息、病人信息、就診日期、就診時(shí)間、所選科室等信息傳送到服務(wù)器端程序;服務(wù)器端程序在對(duì)數(shù)據(jù)進(jìn)行加密處理后,傳給WebService服務(wù)器;然后由WebService服務(wù)器請(qǐng)求HIS系統(tǒng),完成號(hào)源的確認(rèn)。號(hào)源確認(rèn)完成后,數(shù)據(jù)會(huì)再依次傳遞給用戶(hù)。這樣,整個(gè)掛號(hào)流程就完成了。
掛號(hào)完成后,系統(tǒng)會(huì)發(fā)送一條提醒信息。其中,$description代表用戶(hù)接收到的信息,Access_token通過(guò)每間隔2小時(shí)完成一次調(diào)用來(lái)獲取。Qrcode代表微信開(kāi)放平臺(tái)提供的接口技術(shù),最終,調(diào)用開(kāi)放平臺(tái)的接口完成推送。實(shí)現(xiàn)程序如下:
$description =“您已成功預(yù)約[”.$pbrq.“][”.$haoyuan_time.“][”.$ksmc.”]
[“.$ysmc.”]第“.$xuhao.”號(hào),預(yù)約流水號(hào)為:“.$sqxh.” 感謝您對(duì)掛號(hào)平臺(tái)的支持! ”;
$access_token = $wxUser[’access_token’];
$qrcode_url=’https://api.weixin.qq.com/cgi-bin/message/custom/
send?access_token=’.$access_token;
$post=$this->api_notice_increment($qrcode_url,$data).
病人進(jìn)入預(yù)約掛號(hào)查詢(xún)界面,選擇想要退號(hào)的號(hào)源,點(diǎn)擊退號(hào)確認(rèn)按鈕。系統(tǒng)發(fā)起的流程和掛號(hào)相似。但退號(hào)只需一個(gè)參數(shù)$sqxh,無(wú)需其他信息參數(shù)。實(shí)現(xiàn)程序如下:
$sqxh = request()->post(’sqxh’);
$id = request()->post(’id’);、
header ( ’Content-Type: text/html; charset=UTF-8’ );
$client = newSoapClient ($this->ws_url);
$parm = array (
’mess’ => $this->ws_token.’@’.$this->ws_name.’@’.$sqxh.’@微信退號(hào)’,
’ref_mess’=>’mess’,
).
總之,國(guó)家“十四五”規(guī)劃明確提出要深入開(kāi)展數(shù)字中國(guó)建設(shè)。在此背景下,智慧醫(yī)院建設(shè)必將得到蓬勃發(fā)展。微信的優(yōu)點(diǎn)及其使用的廣泛性,使其在智慧醫(yī)院建設(shè)中發(fā)揮重要作用。本研究以三級(jí)甲等醫(yī)院為實(shí)施案例,開(kāi)發(fā)了一個(gè)基于微信公眾號(hào)的醫(yī)院預(yù)約掛號(hào)系統(tǒng),并從需求設(shè)計(jì)、功能設(shè)計(jì)和流程設(shè)計(jì)三個(gè)維度進(jìn)行詳細(xì)認(rèn)證。該系統(tǒng)具有預(yù)約掛號(hào)和退號(hào)等功能,使用便捷,相信在未來(lái)的微信智慧醫(yī)療服務(wù)中會(huì)有較高的推廣與應(yīng)用價(jià)值。