【摘 要】本文敘述了通過檢索數(shù)據(jù)并觸發(fā)后臺(tái)程序調(diào)用微信平臺(tái)消息接口,實(shí)現(xiàn)向用戶自動(dòng)發(fā)送預(yù)警信息的方法。同時(shí)實(shí)現(xiàn)了通過調(diào)用微信被動(dòng)響應(yīng)消息接口自動(dòng)回復(fù)用戶菜單及文字查詢事件。此外,還可通過OAuth2.0授權(quán),實(shí)現(xiàn)用戶靜默登陸服務(wù)頁面等綜合呈現(xiàn)方式的民航氣象微信服務(wù)平臺(tái)。相比APP方式更具有適用性和可推廣性。對(duì)氣象服務(wù)的延伸與擴(kuò)展有一定參考意義。
【關(guān)鍵詞】民航氣象;氣象服務(wù);微信API
中圖分類號(hào): V321.2;G206 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2019)12-0223-002
DOI:10.19694/j.cnki.issn2095-2457.2019.12.107
【Abstract】This paper describes how to automatically send early warning information to users by retrieving data and triggering background program to call the message interface of Wechat platform.By calling the passive response message interface of Wechat to realize automatic reuse of user menus and text query events,as well as through OAuth 2.0 authorization,the civil aviation meteorological Wechat service platform with integrated presentation mode such as user silent landing service page is realized.Compared with APP,it has more applicability and generalization.It has certain reference significance for the extension and expansion of meteorological services.
【Key words】Aviation Meteorological;Meteorological Service;Wechat API
0 引言
近年來,隨著民航氣象用戶對(duì)民航氣象服務(wù)日益增長的需求,有待民航氣象服務(wù)的有效性、及時(shí)性和全面性進(jìn)一步提高,催生了民航信息服務(wù)向自動(dòng)化、智能化、移動(dòng)化發(fā)展。出現(xiàn)了一些服務(wù)技術(shù)、服務(wù)方式、服務(wù)制度的創(chuàng)新,有效提升了氣象服務(wù)能力。本文通過微信平臺(tái)實(shí)現(xiàn)氣象信息的發(fā)布。能夠?qū)崿F(xiàn)預(yù)警信息的訂閱與推送,圖形及文字信息的查詢,方便了用戶第一時(shí)間獲取氣象服務(wù)信息,提升了用戶體驗(yàn),減輕了人工勞動(dòng)和咨詢負(fù)擔(dān),是一種創(chuàng)新性的氣象服務(wù)模式。
相比于APP等的實(shí)現(xiàn)方式,微信平臺(tái)方式具有客戶端免安裝、免升級(jí)、跨平臺(tái),無需考慮移動(dòng)設(shè)備兼容性和移植性,應(yīng)用管理、用戶管理、權(quán)限管理便捷等優(yōu)勢(shì),同時(shí)利用OAuth2.0授權(quán),可實(shí)現(xiàn)用戶以微信號(hào)靜默登陸服務(wù)頁面,免去注冊(cè)及輸入賬戶密碼登陸等繁瑣環(huán)節(jié)。
1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
1.1 設(shè)計(jì)思路
以微信企業(yè)號(hào)或服務(wù)號(hào)應(yīng)用作為用戶層應(yīng)用端。數(shù)據(jù)源端程序用于監(jiān)聽氣象數(shù)據(jù)庫中的預(yù)警信息,并將檢索到的最新預(yù)警信息推送給服務(wù)端,同時(shí)定時(shí)檢索報(bào)文、雷達(dá)圖等數(shù)據(jù)資料,上傳給服務(wù)端。服務(wù)端程序運(yùn)行于公網(wǎng)服務(wù)器,將來自數(shù)據(jù)源端的預(yù)警信息推送給用戶,當(dāng)用戶發(fā)起查詢時(shí)間時(shí),響應(yīng)用戶查詢事件。微信支持的信息類型適用的氣象服務(wù)產(chǎn)品如表1所示。
1.2 流程架構(gòu)
如圖1所示,內(nèi)外數(shù)據(jù)源經(jīng)串口將數(shù)據(jù)通過串口DTU單向發(fā)送到公網(wǎng)服務(wù)器,在微信后臺(tái)綁定公網(wǎng)服務(wù)器URL,即開啟應(yīng)用的回調(diào)模式,在回調(diào)模式下,可以通過調(diào)用微信接口,處理消息事件,從而實(shí)現(xiàn)與用戶的交互。
2 技術(shù)實(shí)現(xiàn)
2.1 主動(dòng)消息推送
主動(dòng)消息是指,在用戶無任何操作的情況下,服務(wù)器將消息主動(dòng)發(fā)送到用戶端并提醒用戶查看,適用于機(jī)場(chǎng)警報(bào)等預(yù)警信息的推送。傳遞的消息需使用Https協(xié)議并以JSON格式的數(shù)據(jù)包發(fā)送,數(shù)據(jù)包不需做加密處理。以企業(yè)號(hào)的文本消息為例,數(shù)據(jù)格式[1]如下:
其中touser、toparty和totag分別指的是成員、部門及標(biāo)簽的ID列表,msgtype為消息類型,可以是text、image、voice、video、file、news和mpnews等類型,分別對(duì)應(yīng)文字、圖片、語音、視頻、文件、圖文消息。agentid為企業(yè)應(yīng)用的id,content是消息內(nèi)容。當(dāng)消息中包含圖片、文件、視頻等媒體信息時(shí),需先將媒體文件通過微信上傳素材接口上傳至微信服務(wù)器,并獲得相應(yīng)的media_id,并以"media_id":"MEDIA_ID"的方式包含在json格式數(shù)據(jù)中。
當(dāng)系統(tǒng)獲得一份最新的機(jī)場(chǎng)警報(bào)時(shí),先提取有效的警報(bào)文字內(nèi)容,再填入json格式數(shù)據(jù)的content字段,并調(diào)用微信的發(fā)送消息接口[1]:
https://qyapi.weixin.qq.com/cgi-bin/message/send?acc ess_token=ACCESS_TOKEN
然后以POST方式,將json格式數(shù)據(jù)包提交給該接口,微信服務(wù)方將其解析后,把消息發(fā)送給json格式數(shù)據(jù)中設(shè)定的成員或部門。其中ACCESS_TOKEN是微信應(yīng)用的全局唯一票據(jù),可通過微信后臺(tái)設(shè)定的CorpID和Secret通過GET方式從微信的gettoken接口獲得,調(diào)用其他接口時(shí)一般都要攜帶AccessToken。
2.2 被動(dòng)消息響應(yīng)
微信服務(wù)端可以接收來自用戶發(fā)送的消息,并做出相應(yīng)的響應(yīng),消息類型可以是文本、圖片、語音、視頻、地理位置、菜單事件等類型。接收并響應(yīng)用戶的消息可以用于滿足用戶的部分查詢需求。例如用戶在微信公眾號(hào)對(duì)話框中輸入:"ZBAA",服務(wù)器收到后在后查詢對(duì)應(yīng)ZBAA的數(shù)據(jù)資料并以某種消息類型返回給用戶,實(shí)現(xiàn)便捷的查詢操作。
在微信企業(yè)號(hào)中,用戶發(fā)送的消息、操作事件及響應(yīng)用戶的消息是以XML格式包發(fā)送的,并經(jīng)過加密后傳輸。以菜單事件為例,數(shù)據(jù)格式[1]如下:
其中,ToUserName為企業(yè)號(hào)的企業(yè)號(hào)CorpID,F(xiàn)romUserName為成員UserID,CreateTime為消息創(chuàng)建的時(shí)間,MsgType為消息類型,Event為事件類型,EventKey為事件KEY值,與自定義菜單接口中KEY值對(duì)應(yīng),AgentID為企業(yè)應(yīng)用的ID。
服務(wù)端在收到此消息并按照微信接口文檔提供的AES加解密方案解密后,得到上述明文結(jié)構(gòu)的XML格式數(shù)據(jù),并解析即可獲得用戶發(fā)起的菜單點(diǎn)擊事件的EventKey值,并做出響應(yīng),向用戶返回查詢信息。返回的信息同樣是以XML格式的數(shù)據(jù),并包含接收方的UserID,發(fā)送內(nèi)容可以是文字、圖像、音視頻、圖文等形式,如果有媒體文件需先獲取Media ID再包含在XML格式數(shù)據(jù)中,并按照加解密方案加密后發(fā)送。微信服務(wù)方解析后將數(shù)據(jù)發(fā)送給用戶。
2.3 授權(quán)登陸
當(dāng)用戶面臨較為復(fù)雜、連貫的查詢應(yīng)用或接收較為復(fù)雜的信息且需要與發(fā)起交互式操作時(shí),微信的幾種消息類型往往難以滿足了,此時(shí)我們通常需要以Web頁面的方式向用戶呈現(xiàn),并向用戶提供交互式操作前端界面。由于微信內(nèi)置了瀏覽器,能夠方便地在微信中打開頁面,并通過授權(quán)方式直接以微信賬戶登陸,與通過獨(dú)立瀏覽器或APP訪問的方式相比,在操作上更加便捷,實(shí)現(xiàn)賬戶較高安全級(jí)別的成本也較低。
OAuth(開放授權(quán))協(xié)議是一個(gè)開放標(biāo)準(zhǔn),允許用戶通過第三方應(yīng)用訪問網(wǎng)站資源,而無需將用戶名和密碼提供給第三方應(yīng)用。目前以廣泛應(yīng)用于互聯(lián)網(wǎng)各大開放平臺(tái)。在微信中,可以在用戶訪問登陸頁面時(shí),通過調(diào)用微信的OAuth2.0驗(yàn)證接口來獲取成員的身份信息,如果獲取用戶信息成功,則說明用戶為本微信號(hào)的合法成員,可根據(jù)返回的信息構(gòu)造Cookie保存在用戶端,并跳轉(zhuǎn)至服務(wù)頁面,服務(wù)頁面驗(yàn)證Cookie的有效性后向用戶提供服務(wù),當(dāng)Cookie在有效期內(nèi),用戶可 直接訪問服務(wù)頁面,有效期結(jié)束后將跳轉(zhuǎn)登陸頁面重新通過驗(yàn)證接口驗(yàn)證成員并獲得新的Cookie。若通過驗(yàn)證接口無法獲取用戶信息時(shí),說明該用戶為非成員,將跳轉(zhuǎn)至404錯(cuò)誤頁面。該流程如圖2所示。
3 應(yīng)用分析
“云南空管氣象”是基于微信企業(yè)號(hào)開發(fā)的微信服務(wù)平臺(tái)。實(shí)現(xiàn)了上述三種方式的微信接口調(diào)用,涵蓋了當(dāng)前能夠提供給用戶的多種氣象產(chǎn)品。如圖3所示,包括文字格式的機(jī)場(chǎng)警報(bào)、終端區(qū)預(yù)警、MDRS以及圖文格式的區(qū)域預(yù)警推送,報(bào)文、雷達(dá)圖、衛(wèi)星云圖的查詢,以及Web形式的自動(dòng)氣象觀測(cè)數(shù)據(jù)查詢界面。截至目前,已經(jīng)覆蓋了昆明機(jī)場(chǎng)幾乎所有航空氣象用戶。通過提供便捷的氣象信息服務(wù),同時(shí)減輕了氣象服務(wù)機(jī)構(gòu)的咨詢負(fù)擔(dān)。
4 結(jié)束語
微信氣象服務(wù)在公眾氣象服務(wù)領(lǐng)域已經(jīng)較為普及[2],而航空氣象服務(wù)由于資料的專業(yè)性、多樣性和高時(shí)效性,一直以來相對(duì)較難形成完善、統(tǒng)一的服務(wù)模式。本文敘述了實(shí)現(xiàn)各類氣象服務(wù)資料在微信平臺(tái)的展示方式和實(shí)現(xiàn)技術(shù),對(duì)民航氣象服務(wù)方式提供了一種較為有效的延伸和補(bǔ)充。
【參考文獻(xiàn)】
[1]企業(yè)微信API文檔[EB/OL].https://work.weixin.qq.com/api/doc.
[2]鄧小良,廖慧娟,郭永婷,等.微信在氣象服務(wù)中的應(yīng)用及發(fā)展[J].廣東氣象,2015,37(6):61-63.作者簡(jiǎn)介:張曉峰(1984—),男,工程師,工作于云南空管分局,研究方向?yàn)槊窈綒庀笮畔⒓夹g(shù)。