您好,登錄后才能下訂單哦!
小編給大家分享一下微信開(kāi)發(fā)如何實(shí)現(xiàn)各種消息的響應(yīng),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
繼續(xù)之前我們沒(méi)有完成的部分,現(xiàn)在可以實(shí)現(xiàn)簡(jiǎn)單的文本交互,這篇將實(shí)現(xiàn)各種消息,事件的響應(yīng)。
項(xiàng)目GitHub地址: https://github.com/Andyahui/xgyxsh_WeiXin
SDK的GitHub地址:https://github.com/JeffreySu/WeiXinMPSDK/
SDK官方介紹博客:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
一:實(shí)現(xiàn)各類消息的簡(jiǎn)單回復(fù)
基于現(xiàn)在的底層框架,我們不難看出其余的響應(yīng)機(jī)制不是很難,只是我們不是很熟悉這個(gè)SDK而已;現(xiàn)在已經(jīng)實(shí)現(xiàn)了文本回復(fù),我們?cè)谥貙?xiě)OnTextRequest方法的時(shí)候發(fā)現(xiàn)有很多的重新方法,如下。
這個(gè)就是我們需要實(shí)現(xiàn)各種消息機(jī)制和事件機(jī)制的方法。可以通過(guò)實(shí)現(xiàn)對(duì)應(yīng)的方法來(lái)響應(yīng)微信服務(wù)器發(fā)送過(guò)來(lái)的各種POST請(qǐng)求,如果網(wǎng)站有很多的需求,那么處理的業(yè)務(wù)邏輯就是在這些方法中進(jìn)行。
1.1:處理語(yǔ)音請(qǐng)求;
public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { var responseVoice = base.CreateResponseMessage<ResponseMessageVoice>(); responseVoice.Voice=new Voice() { MediaId = requestMessage.MediaId }; return responseVoice; }
我們客戶端發(fā)送的語(yǔ)音請(qǐng)求先到OnVoiceRequest方法中,要是沒(méi)有任何的回復(fù)就到默認(rèn)回復(fù)方法中回復(fù)用戶消息。在上面方法測(cè)試中我們創(chuàng)建了語(yǔ)音的回復(fù),默認(rèn)回復(fù)它自己的語(yǔ)音,MediaId是通過(guò)素材管理接口上傳的多媒體文件得到的ID,其實(shí)就是微信服務(wù)器保存用戶發(fā)送語(yǔ)音的ID;
1.2:處理圖片請(qǐng)求;
public override IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage) { var responseImage = base.CreateResponseMessage<ResponseMessageText>(); responseImage.Content = "來(lái)自圖片,ahui"; return responseImage; }
用戶發(fā)送的圖片請(qǐng)求,之后我們回復(fù)文本。要是需要復(fù)雜的邏輯我們可以自己在這里添加。其中的base.CreateResponseMessage<ResponseMessageText>()就是創(chuàng)建了一個(gè)回復(fù)的文本類型;
1.3:處理地理位置請(qǐng)求;
public override IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage) { //返回的是圖文消息,是關(guān)于地址的圖文消息。 var responseLocation = base.CreateResponseMessage<ResponseMessageNews>(); var markersList = new List<BaiduMarkers>(); markersList.Add(new BaiduMarkers() { Size=BaiduMarkerSize.m, Color ="red", Label="A", Latitude =requestMessage.Location_X, Longitude=requestMessage.Location_Y, }); var mapUrl = BaiduMapHelper.GetBaiduStaticMap(requestMessage.Location_Y,requestMessage.Location_X,1,13,markersList); responseLocation.Articles.Add(new Article() { Description = string.Format("您剛才發(fā)送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},標(biāo)簽:{3}",requestMessage.Location_X,requestMessage.Location_Y,requestMessage.Scale,requestMessage.Label), PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png", Title="張輝的地圖", Url = mapUrl }); return responseLocation; }
處理地理位置請(qǐng)求,用戶發(fā)送自己的地理位置,我們可以給用戶發(fā)送任何我們想發(fā)送的信息,上面是調(diào)用百度地圖的接口,將它自己的信息又重新的發(fā)送。
1.4:處理鏈接請(qǐng)求;
public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage) { var responseLink = base.CreateResponseMessage<ResponseMessageNews>(); responseLink.Articles.Add(new Article() { Title="處理鏈接來(lái)的請(qǐng)求。", Description =requestMessage.Description, PicUrl = "http://pic.cnblogs.com/avatar/679140/20141128195544.png", Url=requestMessage.Url }); return responseLink; }
關(guān)于鏈接也是回復(fù)圖文消息,之前的很多都是回復(fù)圖文消息,但是我們需要注意里面的參數(shù),這樣才可以符合微信的回復(fù)內(nèi)容。
二:POST事件的回復(fù)
微信用戶和公眾號(hào)的交互過(guò)程中,用戶的一些操作會(huì)使微信服務(wù)器以事件的形式發(fā)送請(qǐng)求到開(kāi)發(fā)者設(shè)置的網(wǎng)站服務(wù)器上,某些事件可以讓我們回復(fù)用戶信息;下面就是來(lái)處理這些的。
微信開(kāi)發(fā)者文檔的事件推送:
http://mp.weixin.qq.com/wiki/7/9f89d962eba4c5924ed95b513ba69d9b.html
帶有Event_標(biāo)識(shí)的代表就是事件的方法,我們需要重寫(xiě)這些方法來(lái)實(shí)現(xiàn)我們的回復(fù)。這里面有很多可以看官網(wǎng)的介紹。
2.1:訂閱事件
/// <summary> /// 訂閱事件 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) { var responseSubscribe = base.CreateResponseMessage<ResponseMessageText>(); responseSubscribe.Content = "歡迎訂閱,張輝歡迎您。"; return responseSubscribe; }
回復(fù)的是文本內(nèi)容,這有利于測(cè)試,我們可以添加任何的邏輯,也可以回復(fù)任何的圖文,語(yǔ)音,文本等類型。這就要看項(xiàng)目的需求了。
2.2:點(diǎn)擊菜單拉取消息時(shí)的事件推送
/// <summary> /// 點(diǎn)擊事件 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { var respondeEvert = base.CreateResponseMessage<ResponseMessageText>(); respondeEvert.Content = "點(diǎn)擊事件,"; return respondeEvert; }
這里你可能不知道這個(gè)點(diǎn)擊事件是什么,這個(gè)是在菜單欄那邊設(shè)置的,我們之后就會(huì)實(shí)現(xiàn)菜單欄的功能。
2.3:點(diǎn)擊菜單跳轉(zhuǎn)鏈接時(shí)的事件推送
public override IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage) { var responseView = base.CreateResponseMessage<ResponseMessageText>(); responseView.Content = "點(diǎn)擊帶有view的菜單欄"; return responseView; }
三:實(shí)現(xiàn)微信公眾號(hào)自定義菜單
每一個(gè)微信的頁(yè)面下基本上都有菜單欄,人家的那個(gè)是通過(guò)常規(guī)的設(shè)置可以實(shí)現(xiàn)的,現(xiàn)在我們的只是測(cè)試號(hào),在測(cè)試號(hào)頁(yè)面找了好久都沒(méi)有發(fā)現(xiàn),最后經(jīng)過(guò)查詢?cè)陂_(kāi)發(fā)者調(diào)試中可以設(shè)置。還有一種是利用SDK提供的頁(yè)面來(lái)實(shí)現(xiàn)。
3.1:利用開(kāi)發(fā)者調(diào)試工具實(shí)現(xiàn)自定義菜單
開(kāi)發(fā)者調(diào)試工具網(wǎng)址:https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%B0%83%E8%AF%95&form=%E4%BA%8B%E4%BB%B6%E6%B6%88%E6%81%AF
我們發(fā)現(xiàn)這個(gè)還需要access_token來(lái)請(qǐng)求,但是我們從之前的開(kāi)發(fā)中都沒(méi)有發(fā)現(xiàn)有這個(gè),那么這個(gè)是什么呢,仔細(xì)的看官方的介紹吧;
獲取access_token,我們可以通過(guò)開(kāi)發(fā)者調(diào)試工具,利用AppId和secret來(lái)獲?。?/p>
在第一幅圖中我們還需要body,調(diào)用接口的json數(shù)據(jù)包;可以參考微信開(kāi)發(fā)文檔里面的進(jìn)行設(shè)置。注意里面就會(huì)看到click和view這兩個(gè)事件類型。
{ "button": [ { "name": "IT資訊", "sub_button": [ { "type": "view", "name": "博客園", "url": "http://m.cnblogs.com/", "sub_button": [ ] }, { "type": "view", "name": "IT新聞", "url": "http://news.cnblogs.com/m", "sub_button": [ ] }, { "type": "click", "name": "關(guān)于開(kāi)發(fā)者", "key": "http://m.cnblogs.com/?u=netxiaohui", "sub_button": [ ] } ] }, { "name": "校園生活", "sub_button": [ { "type": "view", "name": "搜索", "url": "http://www.baidu.com/", "sub_button": [ ] }, { "type": "view", "name": "視頻", "url": "http://v.qq.com/", "sub_button": [ ] }, { "type": "click", "name": "關(guān)注我們", "key": "V1001_GOOD", "sub_button": [ ] } ] }, { "name": "學(xué)生", "sub_button": [ { "type": "view", "name": "搜索", "url": "http://www.soso.com/", "sub_button": [ ] }, { "type": "view", "name": "視頻", "url": "http://v.qq.com/", "sub_button": [ ] }, { "type": "click", "name": "關(guān)注我們", "key": "V1001_GOOD", "sub_button": [ ] } ] } ] }
關(guān)于里面的事件類型,我們可以自己隨意的設(shè)置,都會(huì)響應(yīng)我們前面設(shè)置的菜單事件,我們可以進(jìn)行一系列的邏輯代碼的處理。
3.2:SDK的自定義菜單
通過(guò)下面的網(wǎng)址可以 進(jìn)行設(shè)置,里面還是需要前面的兩個(gè)參數(shù)AppId和secret或者Token來(lái)設(shè)置微信的自定義菜單。
設(shè)置自定義菜單網(wǎng)址:http://sdk.weixin.senparc.com/Menu
四:最終的結(jié)果展示
實(shí)現(xiàn)上面的代碼就可以實(shí)現(xiàn)相應(yīng)的功能。這個(gè)SDK簡(jiǎn)單的使用我們現(xiàn)在已經(jīng)大體的會(huì)了,在之后的博文中會(huì)慢慢的解析這個(gè)SDK里面的一些東西,會(huì)從Request,Response等基礎(chǔ)開(kāi)始。
以上是“微信開(kāi)發(fā)如何實(shí)現(xiàn)各種消息的響應(yīng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。