亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java與Kotlin在圖書館微信公眾平臺消息交互的應(yīng)用

        2021-12-31 08:55:05王龍軍
        關(guān)鍵詞:字段開發(fā)者消息

        王龍軍

        (成都工業(yè)學(xué)院,四川 成都 611730)

        微信公眾平臺[1]在高校圖書館中應(yīng)用越來越廣泛,讀者通過關(guān)注圖書館微信公眾號,可以能使得讀者方便可以實(shí)時查詢到館藏書目和電子資源等信息,同時也能夠通過微信公眾平臺了解最新的新聞、通知、講座等信息,當(dāng)然,還有跟其他平臺整合的功能,比如讀者利用公眾平臺實(shí)時查詢進(jìn)館人數(shù),可以實(shí)時查詢圖書館座位使用情況和剩余數(shù)量。

        1 微信公眾平臺交互原理與開發(fā)語言的選擇

        1.1 微信公眾平臺交互原理

        微信公眾平臺能夠與讀者進(jìn)行消息交互,主要是由于微信公眾平臺消息接口的功勞,它為開發(fā)者提供了與讀者進(jìn)行消息交互的能力。對于成功接入消息接口的公眾賬號,當(dāng)讀者發(fā)消息給公眾賬號時,微信公眾平臺服務(wù)器會使用HTTP請求對接入的URL地址進(jìn)行消息推送,公眾號服務(wù)器可通過響應(yīng)包返回個性的回復(fù),從而達(dá)到回復(fù)消息的目的。總的來說,就是微信公眾號可以使用自己的程序來和讀者對話。

        圖書館微信公眾平臺交互詳細(xì)過程如下:①公眾平臺要與讀者進(jìn)行交互,讀者要在微信客戶端發(fā)送消息給微信服務(wù)器,微信服務(wù)器接收到用戶的消息處理之后,通過開發(fā)者配置的URL和Token 來找到公眾號服務(wù)器,并以XML形式向公眾號服務(wù)器發(fā)送消息;②公眾號服務(wù)器獲取這些消息之后,需要按照微信服務(wù)器傳過來的XML的語言進(jìn)行解析,獲取到信息之后,根據(jù)讀者的內(nèi)容和自己的服務(wù)器邏輯;③然后以XML形式封裝消息,傳回到微信服務(wù)器上去;④微信服務(wù)器解析這些消息,并把相應(yīng)的內(nèi)容還回給用戶。

        1.2 開發(fā)語言的選擇

        Kotlin[2~3]是JetBrains在2011年推出的一門全新的編程語言,可運(yùn)行在JVM(Java 虛擬機(jī))上。Kotlin 程序可以編譯成字節(jié)碼文件,字節(jié)碼文件可以直接在 JVM 上運(yùn)行,因此 Kotlin非常適合開發(fā)后端Web應(yīng)用程序。Kotlin 與現(xiàn)有的 Java[4]語言包保持完全兼容,它完全可以利用Java領(lǐng)域現(xiàn)有的各種技術(shù)框架。

        微信公眾平臺的處理程序?qū)嵸|(zhì)上是一個Web項目,主要對微信服務(wù)器發(fā)送的HTTP請求進(jìn)行接收和響應(yīng),支持微信公眾平臺開發(fā)的語言有Java、PHP、ASP.NET等。選擇Java與Kotlin,主要原因在于Java在開發(fā)服務(wù)器方面具有無可比擬的安全性、穩(wěn)定性,而Kotlin可以與現(xiàn)有的Java 語言保持100% 的兼容性,而且 Kotlin 代碼比 Java代碼更簡潔、更富有表現(xiàn)力。 簡單來說,微信公眾平臺每個分類的消息都有至少4個及以上的字段,用Java來封裝消息時就會大量書寫getter和setter方法,而此時采用Kotlin來封裝消息,只需要定義字段屬性,而Kotlin會默認(rèn)生成getter和setter方法,這樣會減少不必要的相似代碼的重復(fù),提高開發(fā)效率。

        2 基于Java與Kotlin的消息接收與回復(fù)

        2.1 消息的分類與封裝

        2.1.1 消息的分類。 微信服務(wù)器與公眾號服務(wù)器交互的消息[5]可以分為三大類:請求消息、事件和響應(yīng)消息。在這里,微信服務(wù)器傳遞給公眾號服務(wù)器是請求信息、事件,而公眾號服務(wù)器返回信息給微信公眾號服務(wù)器是響應(yīng)消息。

        請求消息指的是當(dāng)普通用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上,即這里定義的是用戶能夠發(fā)送哪些類型的消息、消息有哪些字段、消息被微信服務(wù)器以什么方式轉(zhuǎn)發(fā)給我們的公眾號服務(wù)器。

        事件指的是當(dāng)用戶對公眾平臺做出某種操作后,微信服務(wù)器會將相應(yīng)的事件消息以XML格式通過POST方式發(fā)送到我們填寫的URL上,事件也可以說成“接收事件推送”。在微信用戶和公眾號產(chǎn)生交互的過程中,用戶的某些操作會使得微信服務(wù)器通過事件推送的形式通知到開發(fā)者在開發(fā)者中心處設(shè)置的服務(wù)器地址,從而開發(fā)者可以獲取到該信息。其中,某些事件推送在發(fā)生后,是允許開發(fā)者回復(fù)用戶的,某些則不允許。

        響應(yīng)消息指的是公眾號服務(wù)器在接收到用戶發(fā)送的消息后,會產(chǎn)生一個POST請求,可以通過返回特定的XML結(jié)構(gòu)對消息進(jìn)行響應(yīng),現(xiàn)支持回復(fù)文本、圖片、圖文、語音、視頻、音樂,嚴(yán)格來說,發(fā)送被動響應(yīng)消息其實(shí)并不是一種接口,而是對微信服務(wù)器發(fā)過來消息的一次回復(fù)。

        2.1.2 消息的封裝。 微信公眾平臺官方文檔對于消息類型都指定為XML數(shù)據(jù)格式,要用Java語言對消息中的字段進(jìn)行封裝,由于請求消息、事件和響應(yīng)消息具有共有的字段,可以使用Java類對三者的公共字段進(jìn)行封裝,形成一個公共的基類Message,這個基類具有3種消息的公共字段,包括ToUserName(開發(fā)者微信號)、FromUserName(發(fā)送方賬號,OPEN_ID)、CreateTime(消息的創(chuàng)建時間)、MsgType(消息類型)。采用Kotlin來封裝這個消息,Message類內(nèi)容如下:

        open class Message {

        var ToUserName:String?=null; //開發(fā)者微信號

        var FromUserName:String?=null; //發(fā)送方賬號(OpenID)

        var CreateTime:int=0;//消息創(chuàng)建時間(整型)

        var MsgType:String?=null; //消息類型

        }

        請求消息可以細(xì)分為文本消息、圖片消息、語音消息、視頻消息、小視頻消息、地理位置消息、鏈接消息七類,用Java類封裝請求信息時,讓請求信息類RequestMessage繼承消息基類Message,這七類請求消息都添加一個共同的字段MsgId(消息ID)。Message類內(nèi)容如下:

        open class RequestMessage:Message(){

        MsgID:int=0;//消息ID

        }

        請求消息中文本消息主要展示文本消息內(nèi)容,即用戶向微信公眾平臺發(fā)送一段文字時,微信服務(wù)器會向公眾號服務(wù)器發(fā)送XML格式的消息,用Java對其進(jìn)行消息封裝,建立文字消息類TextMessage,繼承請求消息基類RequestMessage,增加一個表示文本消息的內(nèi)容字段Content,增加Content字段的getter、setter方法。請求消息中圖片消息、語音消息、視頻消息等消息的封裝跟文本消息封裝類似,就不再一一贅述。

        事件消息包括關(guān)注/取消關(guān)注事件、掃描帶參數(shù)二維碼事件、上報地理位置事件、自定義菜單事件五類消息,跟封裝請求消息一樣,建立事件消息EventMessage,繼承于Message,該類添加一個字段Event,其內(nèi)容不再展示。事件消息的子方法跟請求消息的子方法在建立時類似,這里就不再一一闡述。

        響應(yīng)消息也可稱為回復(fù)消息,包括回復(fù)文本消息、回復(fù)圖片消息、回復(fù)語音消息、回復(fù)視頻消息、回復(fù)音樂消息、回復(fù)圖文消息五類消息,跟前面兩類消息一樣,建立響應(yīng)消息ResponseMessage,繼承于Message,其子消息的封裝跟請求消息類似。響應(yīng)消息的子方法跟請求消息的子方法在建立時類似,這里就不再一一闡述。

        2.1.3 Java與Kotlin相互調(diào)用。 Kotlin和Java是兩種不同的語言,所以在互相調(diào)用的時候,會有一些特殊的語法。Kotlin中對象屬性默認(rèn)就帶有setter和getter方法,所以在Kotlin中調(diào)用Java時直接變量名點(diǎn)屬性就可獲取到屬性的setter和getter的一些操作。Kotlin可以自動識別Java中的getter/setter方法;在Java中可以過getter/setter操作Kotlin屬性。

        舉個簡單的例子來說明,現(xiàn)在系統(tǒng)要用Java調(diào)用Kotlin封裝的消息Message類,代碼如下:

        Message message=new Message();

        message.setToUserName(“zhangsan”);

        message.getToUserName();

        如果Kotlin在類中封裝其他方法,那么在Java中可以同樣的調(diào)用,本系統(tǒng)主要以Java為主的Web項目,輔助Kotlin對消息進(jìn)行封裝,當(dāng)然在系統(tǒng)中可以讓Kotlin對消息進(jìn)行各種處理,然后Java調(diào)用Kotlin的方法。

        2.2 消息的接收與回復(fù)

        接收消息和回復(fù)消息是相互關(guān)聯(lián)的動作,在一個交互場景中接收消息、回復(fù)消息,一般情況就是公眾平臺通過分析接收到的消息,會給出對應(yīng)的回復(fù)。具體到項目實(shí)踐中是這樣的,當(dāng)圖書館讀者向圖書館公眾賬號發(fā)消息時,微信服務(wù)器會先接收到用戶發(fā)送的消息,然后將讀者消息按照指定的XML格式組裝好數(shù)據(jù),最后POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上。

        接收消息的過程其實(shí)就是獲取微信服務(wù)器通過post請求的發(fā)送給我們公眾號服務(wù)器的XML數(shù)據(jù),然后我們的公眾號服務(wù)器再對這個XML進(jìn)行解析處理的過程。具體過程如下:在request對象中封裝微信服務(wù)器發(fā)來的請求消息,可以從request對象中取出請求中包含的數(shù)據(jù),使用request對象的getInputStream()方法獲取請求中的參數(shù)。為了方便解析XML數(shù)據(jù),使用Kotlin寫一個函數(shù)xmlToMap(request),讀取輸入流,解析XML消息,最后將處理的消息放到HashMap中。在處理微信請求的入口servlet的doPost方法中調(diào)用xmlToMap(request)方法來解析微信請求信息,然后根據(jù)消息類型返回相應(yīng)的方法。

        回復(fù)消息的過程剛好跟接收消息的過程相反,對于每個POST請求,需要返回XML結(jié)構(gòu),對該消息進(jìn)行響應(yīng)。Kotlin將各種類型的響應(yīng)消息封裝成對象,現(xiàn)在需要把響應(yīng)的對象轉(zhuǎn)換成XML字符串,寫一個函數(shù)messageToXml(textMessage)實(shí)現(xiàn)這個功能。

        部分關(guān)鍵代碼如下:

        fun buildResponseMessage(map:Map):String {

        var responseMessage = "" //響應(yīng)消息

        val msgType = map.get("MsgType").toString()//得到消息類型

        println("MsgType:$msgType")

        //消息類型

        val messageEnumType = MessageType.valueOf(MessageType::class.java,msgType.toUpperCase())

        when (messageEnumType) {

        TEXT -> responseMessage = handleTextMessage(map) //處理文本消息

        IMAGE -> responseMessage = handleImageMessage(map) //處理圖片消息

        VOICE -> responseMessage = handleVoiceMessage(map)//處理語音消息

        VIDEO -> responseMessage = handleVideoMessage(map)//處理視頻消息

        SHORTVIDEO ->responseMessage = handleSmallVideoMessage(map)//處理小視頻消息

        LOCATION -> responseMessage = handleLocationMessage(map)//處理位置消息

        LINK -> responseMessage = handleLinkMessage(map)//處理鏈接消息

        EVENT -> responseMessage = handleEventMessage(map)//處理事件消息

        }

        return responseMessage//返回響應(yīng)消息

        }

        3 結(jié)束語

        筆者詳細(xì)介紹了微信公眾平臺交互原理,選擇Java與Kotlin作為開發(fā)語言的理由,以及如何利用Java與Kotlin實(shí)現(xiàn)圖書館微信公眾平臺消息的接收和回復(fù),該平臺能夠為圖書館提供實(shí)時交互服務(wù)、拓展服務(wù)空間、提高讀者的滿意程度以及增加讀者的黏度。

        猜你喜歡
        字段開發(fā)者消息
        圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
        一張圖看5G消息
        16%游戲開發(fā)者看好VR
        CHIP新電腦(2016年3期)2016-03-10 13:06:42
        iOS開發(fā)者調(diào)查
        電腦迷(2015年8期)2015-05-30 12:27:10
        iOS開發(fā)者調(diào)查
        電腦迷(2015年4期)2015-05-30 05:24:09
        CNMARC304字段和314字段責(zé)任附注方式解析
        消息
        消息
        消息
        無正題名文獻(xiàn)著錄方法評述
        精品国产日韩一区2区3区| 97在线观看视频| 白又丰满大屁股bbbbb| 国产一区二区精品在线观看| 久久久精品国产亚洲麻色欲| 亚洲中文字幕久爱亚洲伊人| 最新国产美女一区二区三区| 97人妻蜜臀中文字幕| 国产成人高清视频在线观看免费| 麻豆精品在线视频观看| 亚洲黄片av在线播放| 精品国产一区二区三区2021| 免费观看性欧美大片无片| 久久久精品久久日韩一区综合| 欧美伊人网| 亚洲中文字幕高清视频| 国产极品大秀在线性色| 久久精品国产亚洲av天 | 丰满人妻被黑人猛烈进入| 国产乱子伦一区二区三区| 免费无码成人av在线播| av无码av在线a∨天堂app| 麻豆成年视频在线观看| 亚洲五码av在线观看| 国语自产精品视频在线看| 亚洲国产天堂久久综合网| 亚洲五月天综合| 色综合色综合久久综合频道| 国产夫妻精品自拍视频| 国产精品三级av及在线观看| 日本丰满熟妇hd| 香蕉国产人午夜视频在线观看 | 国产精品高清视亚洲一区二区| 中国人在线观看免费的视频播放| 男女性爽大片视频| 水蜜桃无码视频在线观看| 中文字幕第一页亚洲| 国产黄色一区二区福利| 精品国产yw在线观看| 少妇真实被内射视频三四区| 国产成人综合在线视频|