吳 龍 鄧曉暉
(廣東省人民醫院 廣州 510000)
隨著醫院管理不斷完善及醫療信息化不斷發展,醫院內部產生大量專科業務系統及行政辦公系統,醫院工作具有特殊性,需要及時響應處理,但受限于辦公地點、網絡及客戶端,很多工作必須在院內完成,為了方便辦公,各臨床及行政科室提出在家或移動辦公需求[1]。實現移動辦公常見的方法是開發對應的專科系統APP應用,但開發成本較高,周期較長,且推廣困難。為更好地滿足移動辦公需求,設計院內業務輕應用開發平臺。平臺使用企業微信第3方應用平臺作為應用入口[2],通過H5、PHP及MySQL技術進行開發,所有應用前臺展示使用微信官方發布的WEUI框架,后臺數據提交及接口設計均使用thinkPHP框架進行開發。在實現院內人力資源系統和企業微信通訊錄實時同步的基礎上,使用企業微信通訊錄對人員進行統一管理。利用企業微信應用程序接口(Application Programming Interface,API)進行不同應用登錄驗證,用戶只需登錄企業微信,無需記住不同應用的用戶名和密碼就可以訪問。本文介紹基于企業微信的醫院業務輕應用平臺,通過企業微信在移動端建立員工與醫院內部系統之間的訪問,具有較強的保密性以及分級授權的管理優勢,以一種安全、有效、經濟的方式滿足院內不同科室移動辦公需求。
為保證網絡安全,在醫院內外網隔離的情況下實現移動辦公,平臺使用網閘設備,將Web應用的實際網址進行偽裝,通過與醫院官網域名相結合的方式,實現在企業微信中訪問院內系統網絡。整個網絡設計,見圖1。

圖1 輕應用平臺網絡設計
修改院內輕應用開發服務器Web訪問的80端口,將修改后的IP地址及端口(如192.168.x.x:8088)通過網閘信息擺渡映射到新端口中(如172.20.x.x:2019),利用網關設備將新網址綁定到醫院域名中,生成新的公網訪問地址(如https://nyfy.x.x:2019)。在企業微信第3方自建應用入口地址中配置新生成的公網訪問地址,醫院辦公人員可以通過企業微信作為入口訪問院內輕應用平臺。
2.2.1 獲取調用憑證流程 企業微信用戶在進入平臺前需要進行身份認證,認證前均需要調用企業微信官方接口獲取調用憑證。具體流程為:用戶訪問第3方服務,第3方服務通過構造OAuth2鏈接(參數包括當前第3方服務身份ID以及重定向URI),將用戶引導到認證服務器的授權頁;用戶選擇是否同意授權;若用戶同意授權則認證服務器將用戶重定向到第1步指定的重定向URI,同時附上一個授權碼;第3方服務收到授權碼,附上授權碼來源的重定向URI,向認證服務器申請憑證;認證服務器檢查授權碼和重定向URI有效性,通過后頒發調用憑證。具體流程,見圖2。

圖2 企業微信OAuth2流程
2.2.2 身份驗證方式 得到調用憑證后可以獲取企業微信用戶基礎信息,從而對當前用戶進行身份驗證,常見身份驗證方式有兩種:第1種是將企業微信用戶唯一標識userID和輕應用平臺中用戶身份進行綁定,進入平臺內應用前需先調用接口獲取當前用戶userID(必須使用企業微信客戶端),與平臺內用戶信息綁定的userID對比驗證確認后獲取用戶身份;第2種是在企業微信中增加員工身份信息,如工號、身份證號等,通過先獲取身份信息再進行二次驗證的方法實現登錄驗證。相較于第1種方法,第2種方法無需在輕應用平臺中對用戶企業微信userID和平臺內用戶ID進行綁定。企業微信為用戶提供豐富的功能接口,開發人員可以調用公共接口在網頁中實現在APP中才可以實現的功能,如掃碼、讀取文件、使用WiFi、藍牙、定位等功能[3-4]。
2.3.1 數據加密 完成身份認證登錄后可以使用企業微信內置瀏覽器訪問院內系統,但存在數據泄露風險,因此在數據提交和查詢前需要對數據進行加密處理。常見的數據加密方式有:非對稱加密(RSA),會產生公鑰和私鑰,公鑰在客戶端,私鑰在服務端,公鑰用于加密,私鑰用于解密;對稱加密(AES),直接使用給定的秘鑰加密或解密;一種單向的加密方式(MD5),只能加密,不能解密;Base64編碼,對字節數組轉換成字符串的一種編碼方式。一般情況下未加密前數據是以明文方式傳輸,客戶端將要上傳的數據打包,通過Post方式提交給服務器。服務器接收提交的數據包,獲取客戶端提交的值,進行處理。處理結束將數據打包,返回給客戶端處理。
2.3.2 平臺數據傳輸 客戶端上傳數據加密——服務器獲取數據解密——服務器返回數據加密——客戶端獲取數據解密。如客戶端上傳數據加密 A需要客戶端隨機產生一個16位字符串,用于AES加密的秘鑰,即AESKey。使用RSA對AESKey進行公鑰加密,即RSAKey。將需要上傳的明文數據包轉為Json字符串,通過AESKey加密,得到JsonAESEncryptedData。封裝為{key: RSAKey, value: JsonAESEncryptedData}的數據串上傳服務器,服務器只需要通過key和value,即可解析獲取數據。
2.3.3 數據解密 獲取RSAKey后用服務器私鑰解密,得到AESKey,獲取到JsonAESEncriptedData,使用AESKey解密,得到客戶端上傳的明文數據。完成服務器端的數據處理后返回數據加密 C,具體流程是將要返回給客戶端的數據轉成Json字符串,用AESKey加密處理,封裝數據{data: value}的形式返回給客戶端。客戶端獲取數據解密 D,流程為:客戶端獲取數據后通過key為data得到服務器返回的已加密的數據AESEncryptedResponseData,使用AESKey進行解密,得到明文服務器返回的數據[5]。具體加解密流程,見圖3。

圖3 數據加密解密流程
2.3.4 數據簽名 經過以上處理后數據通信已具備很高安全性,但仍有一定風險,平臺在數據通信中增加數據簽名步驟。數據簽名是為防止偽造數據的一種手段,在接口調用過程中使用較為廣泛。其原理是通信雙方約定好彼此的密匙,訪問方將要提交的數據經過一系列操作處理,如排序、非對稱加密等,生成簽名,訪問攜帶簽名信息,響應方獲取請求數據后,根據同樣方法和密匙生成同樣簽名,經對比若簽名信息一致則認可為合法數據,不一致則為非法數據。數據簽名具體流程如下:訪問方分配私鑰為abCfa,假設接口包含以下參數no=20190899;name=test;phone=13800138000;cno=k239494;則按照如下方式生成加密字符串 signature,將參數名稱按照ASCII升序排序,結果為cno,name,no,phone,依次從排序中取出參數名稱,將對應的值串聯起來,結果如下(signature不參與簽名):例如cno=k239494&name=test&no=20190899&phone=13800138000,串聯私鑰abCfa得到一個新的字符串:no=k239494&name=test&no=20190899&phone=13800138000&key=abCfa,調用MD5加密算法對新字符串進行加密得到signature值,加密后的結果為:1e0eaf80ea6dd39a188c4624aa 547fa3,使用時將生成的signature作為參數一起上傳,相應方需使用同樣方法和私鑰,生成相同簽名signature1,與提交的signature進行對比,雙方一致后驗簽成功。數據加密與加簽兩種方法相結合可以極大提高數據通信安全性,但這種方法也存在一定弊端,當服務器配置較低且系統并發較高時,以上加密方式會增加服務器負擔,降低服務器性能,造成系統響應緩慢,數據提交滯后等,因此平臺設計另一套方案,數據提交時只進行對稱加密并在數據中增加簽名,一定程度上降低通信安全性,但綜合性能得到提升。
利用企業微信API將需要發送的消息推送給企業微信中對應的應用中指定用戶,目前企業微信限制為每個應用中每個用戶每天最多可接收30條消息[6],能滿足日常辦公需要。消息推送分為單發和群發模式,單發模式是發送給指定人員,群發則可以發送至指定分組內的所有人,具體推送流程,見圖4。

圖4 企業微信消息推送時序
平臺前臺頁面均使用WEUI框架開發,通過已有組件進行布局和排版,后臺數據流、接口及邏輯處理利用thinkPHP5.0框架,平臺中應用一部分是針對原有應用做了輕量級定制化開發,一部分為原創開發,所有應用都是只做簡單的數據收集和展示及一些應急操作,復雜的邏輯功能均保留到院內系統中使用。目前平臺已在院內穩定運行兩年,且投入使用多個系統。
該應用在院內消防安全上報系統的基礎上進行簡單的功能遷移,包括消防安全信息上報、危化品使用上報及消防巡檢。
該應用是院內醫務人員檔案系統部分功能遷移,主要包括醫務人員基本信息填寫、基本檔案上報(包含個人獲獎、證書、培訓考核、學會任職信息)及醫療技術授權查詢等,針對原應用做了定制開發。
平臺原創應用,主要功能包括對心臟外科監護室患者進行床旁譫妄評估,將評估結果對接到醫院信息系統中,供醫護人員參考使用。可通過手工錄入病案號或掃描患者腕帶的方式錄入患者身份信息,獲取病案號后調用醫院信息系統中患者基本信息接口,獲取其他基本信息,信息收集完整后建檔并開始評估。
在原會議簽到系統基礎上,將簽到APP掃碼簽到功能進行遷移,增加個人學分及會議查詢功能。
搭建院內輕應用開發平臺,基于輕應用平臺對院內部分業務進行定制化輕應用開發,利用企業微信第3方應用平臺實現院內業務的移動辦公,經過兩年持續改進和運行,切實解決臨床和行政工作中消息傳遞和辦公不及時的問題。輕應用平臺的建設為全體員工帶來便利,同時為今后院內業務移動化、輕量化定制開發提供基礎框架,對醫院信息化建設和發展具有重大意義。