前面介紹了很多篇關(guān)於使用C#開發(fā)微信門戶及應(yīng)用的文章,基本上把當(dāng)時(shí)微信能做的接口都封裝差不多了,微信框架也積累了不少模組和用戶,最近發(fā)現(xiàn)微信公眾平臺(tái)增加了不少內(nèi)容,特別是在自訂選單裡面增加了掃一掃、發(fā)圖片、發(fā)地理位置功能,這幾個(gè)功能模組很重要,想想以前想在微信公眾號(hào)裡面增加一個(gè)掃描二維碼的功能,都做不了,現(xiàn)在可以了,還可以拍照上傳等功能,本文主要介紹基於我前面的框架系列文章,進(jìn)一步介紹如何整合和使用這些新增功能。
1、微信幾個(gè)功能的官方介紹
但請(qǐng)注意,以上新增能力,均僅支援微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版微信用戶點(diǎn)擊後將沒有回應(yīng),開發(fā)者也不能正常接收到事件推送。
?
2、微信新選單功能的測(cè)試公眾號(hào)
“menutest"的公眾號(hào)名稱是”自訂選單拓展測(cè)試“,我關(guān)注它並進(jìn)行了測(cè)試,二維碼、圖片、地理位置都很OK,本身能夠響應(yīng)這些事件,並且圖片、地理位置本身還能出現(xiàn)一個(gè)對(duì)應(yīng)的事件,如下圖所示。 圖片發(fā)送可以分為拍照、拍照和相簿、微信相簿三類,感覺後面兩個(gè)有點(diǎn)類似,但有這些功能都很不錯(cuò)的。
3、改進(jìn)菜單對(duì)象和提交菜單
前面說了,微信提供這些功能,可以在菜單裡面進(jìn)行集成,也就是菜單的類型由原來CLICK/VIEW,變?yōu)楝F(xiàn)在8種菜單的類型由原來CLICK/VIEW,變?yōu)楝F(xiàn)在8種類型,增加2個(gè)掃碼操作、3種圖片操作、1種地理位置操作。
????///?<summary> ????///?菜單按鈕類型????///?</summary> ????public?enum?ButtonType ????{????????///?<summary> ????????///?點(diǎn)擊????????///?</summary>????????click,????????///?<summary> ????????///?Url????????///?</summary>????????view,????????///?<summary> ????????///?掃碼推事件的事件推送????????///?</summary>????????scancode_push,????????///?<summary> ????????///?掃碼推事件且彈出“消息接收中”提示框的事件推送????????///?</summary>????????scancode_waitmsg,????????///?<summary> ????????///?彈出系統(tǒng)拍照發(fā)圖的事件推送????????///?</summary>????????pic_sysphoto,????????///?<summary> ????????///?彈出拍照或者相冊(cè)發(fā)圖的事件推送????????///?</summary>????????pic_photo_or_album,????????///?<summary> ????????///?彈出微信相冊(cè)發(fā)圖器的事件推送????????///?</summary>????????pic_weixin,????????///?<summary> ????????///?彈出地理位置選擇器的事件推送????????///?</summary>????????location_select ????}
????????private?void?btnCreateMenu_Click(object?sender,?EventArgs?e) ????????{ ????????????MenuJson?productInfo?=?new?MenuJson("新功能測(cè)試",?new?MenuJson[]?{? ????????????????new?MenuJson("掃碼推事件",?ButtonType.scancode_push,?"scancode_push")? ????????????????,new?MenuJson("系統(tǒng)拍照發(fā)圖",?ButtonType.pic_sysphoto,?"pic_sysphoto")? ????????????????,?new?MenuJson("拍照相冊(cè)發(fā)圖",?ButtonType.pic_photo_or_album,?"pic_photo_or_album")? ????????????????,?new?MenuJson("微信相冊(cè)發(fā)圖",?ButtonType.pic_weixin,?"pic_weixin")? ????????????????,?new?MenuJson("地理位置選擇",?ButtonType.location_select,?"location_select")? ????????????});???????????????????????????????????? ????????????MenuJson?frameworkInfo?=?new?MenuJson("框架產(chǎn)品",?new?MenuJson[]?{? ????????????????new?MenuJson("Win開發(fā)框架",?ButtonType.click,?"win"),????????????????new?MenuJson("WCF開發(fā)框架",?ButtonType.click,?"wcf"),????????????????new?MenuJson("混合式框架",?ButtonType.click,?"mix"),? ????????????????new?MenuJson("Web開發(fā)框架",?ButtonType.click,?"web") ????????????????,new?MenuJson("代碼生成工具",?ButtonType.click,?"database2sharp") ????????????}); ????????????MenuJson?relatedInfo?=?new?MenuJson("相關(guān)鏈接",?new?MenuJson[]?{? ????????????????new?MenuJson("公司介紹",?ButtonType.click,?"event_company"),???????????????? ????????????????new?MenuJson("官方網(wǎng)站",?ButtonType.view,?"http://ipnx.cn/"),???????????????? ????????????????new?MenuJson("聯(lián)系我們",?ButtonType.click,?"event_contact"),???????????????? ????????????????new?MenuJson("應(yīng)答系統(tǒng)",?ButtonType.click,?"set-1"),???????????????? ????????????????new?MenuJson("人工客服",?ButtonType.click,?"event_customservice")????????????}); ????????????MenuListJson?menuJson?=?new?MenuListJson(); ????????????menuJson.button.AddRange(new?MenuJson[]?{?productInfo,?frameworkInfo,?relatedInfo?}); ????????????if?(MessageUtil.ShowYesNoAndWarning("您確認(rèn)要?jiǎng)?chuàng)建菜單嗎")?==?System.Windows.Forms.DialogResult.Yes) ????????????{ ????????????????IMenuApi?menuBLL?=?new?MenuApi(); ????????????????CommonResult?result?=?menuBLL.CreateMenu(token,?menuJson); ????????????????Console.WriteLine("創(chuàng)建菜單:"?+?(result.Success???"成功"?:?"失敗:"?+?result.ErrorMessage)); ????????????} ????????}????????????
????????///?<summary> ????????///更新微信菜單????????///?</summary> ????????///?<returns></returns> ????????public?ActionResult?UpdateWeixinMenu() ????????{????????????string?token?=?base.GetAccessToken(); ????????????MenuListJson?menuJson?=?GetWeixinMenu(); ????????????IMenuApi?menuApi?=?new?MenuApi(); ????????????CommonResult?result?=?menuApi.CreateMenu(token,?menuJson);????????????return?ToJsonContent(result); ????????}????????????
????///?<summary> ????///?掃碼推事件且彈出“消息接收中”提示框的事件推送????///?</summary> ????[System.Xml.Serialization.XmlRoot(ElementName?=?"xml")]????public?class?RequestEventScancodeWaitmsg?:?BaseEvent ????{????????public?RequestEventScancodeWaitmsg() ????????{????????????this.MsgType?=?RequestMsgType.Event.ToString().ToLower();????????????this.Event?=?RequestEvent.scancode_waitmsg.ToString();????????????this.ScanCodeInfo?=?new?ScanCodeInfo(); ????????}????????///?<summary> ????????///?事件KEY值,由開發(fā)者在創(chuàng)建菜單時(shí)設(shè)定????????///?</summary> ????????public?string?EventKey?{?get;?set;?}????????///?<summary> ????????///?掃描信息????????///?</summary> ????????public?ScanCodeInfo?ScanCodeInfo?{?get;?set;?} ????}??????
當(dāng)然,一般情況下我們都是在Web后臺(tái)系統(tǒng)進(jìn)行的,維護(hù)菜單都是在自己微信平臺(tái)上進(jìn)行菜單管理,然后一次性提交到微信服務(wù)器即可。
而在Web后臺(tái),只需要把數(shù)據(jù)庫(kù)的數(shù)據(jù)變化為Json數(shù)據(jù)提交即可,操作和上面的類似。
????????///?<summary> ????????///更新微信菜單????????///?</summary> ????????///?<returns></returns> ????????public?ActionResult?UpdateWeixinMenu() ????????{????????????string?token?=?base.GetAccessToken(); ????????????MenuListJson?menuJson?=?GetWeixinMenu(); ????????????IMenuApi?menuApi?=?new?MenuApi(); ????????????CommonResult?result?=?menuApi.CreateMenu(token,?menuJson);????????????return?ToJsonContent(result); ????????}
4、微信掃一掃功能集成?
?前面講了,有了最新的功能,我們就可以實(shí)現(xiàn)掃一掃功能,從而可以掃描條形碼,二維碼的功能。有了條形碼、二維碼的快速和識(shí)別,我們就能開發(fā)一些如條碼查詢、商品處理等功能了。
這里我們介紹如何在我的微信開發(fā)框架里面整合這個(gè)掃一掃的功能處理操作。
前面已經(jīng)增加了一些新功能的測(cè)試菜單,我們要做的就是響應(yīng)這些事件處理,然后對(duì)他們進(jìn)行應(yīng)答處理就可以了。
下面是根據(jù)事件進(jìn)行的一些API跳轉(zhuǎn)處理,我們同時(shí)定義了幾個(gè)相關(guān)的實(shí)體類用來處理他們的信息,如RequestEventScancodePush、RequestEventScancodeWaitmsg、RequestEventPicSysphoto等等。
RequestEventScancodeWaitmsg實(shí)體類的代碼如下所示,其他的類似處理。
????///?<summary> ????///?掃碼推事件且彈出“消息接收中”提示框的事件推送????///?</summary> ????[System.Xml.Serialization.XmlRoot(ElementName?=?"xml")]????public?class?RequestEventScancodeWaitmsg?:?BaseEvent ????{????????public?RequestEventScancodeWaitmsg() ????????{????????????this.MsgType?=?RequestMsgType.Event.ToString().ToLower();????????????this.Event?=?RequestEvent.scancode_waitmsg.ToString();????????????this.ScanCodeInfo?=?new?ScanCodeInfo(); ????????}????????///?<summary> ????????///?事件KEY值,由開發(fā)者在創(chuàng)建菜單時(shí)設(shè)定????????///?</summary> ????????public?string?EventKey?{?get;?set;?}????????///?<summary> ????????///?掃描信息????????///?</summary> ????????public?ScanCodeInfo?ScanCodeInfo?{?get;?set;?} ????}
而根據(jù)實(shí)體類強(qiáng)類型的處理接口流轉(zhuǎn)操作如下所示。
???????????????????????????????case?RequestEvent.scancode_push: ????????????????????????????????{????????????????????????????????????//掃碼推事件的事件推送 ????????????????????????????????????RequestEventScancodePush?info?=?XmlConvertor.XmlToObject(postStr,?typeof(RequestEventScancodePush))?as?RequestEventScancodePush;????????????????????????????????????if?(info?!=?null) ????????????????????????????????????{ ????????????????????????????????????????responseContent?=?actionBLL.HandleEventScancodePush(info); ????????????????????????????????????} ????????????????????????????????}????????????????????????????????break;????????????????????????????case?RequestEvent.scancode_waitmsg: ????????????????????????????????{????????????????????????????????????//掃碼推事件且彈出“消息接收中”提示框的事件推送 ????????????????????????????????????RequestEventScancodeWaitmsg?info?=?XmlConvertor.XmlToObject(postStr,?typeof(RequestEventScancodeWaitmsg))?as?RequestEventScancodeWaitmsg;????????????????????????????????????if?(info?!=?null) ????????????????????????????????????{ ????????????????????????????????????????responseContent?=?actionBLL.HandleEventScancodeWaitmsg(info); ????????????????????????????????????} ????????????????????????????????}????????????????????????????????break;????????????????????????????case?RequestEvent.pic_sysphoto: ????????????????????????????????{????????????????????????????????????//彈出系統(tǒng)拍照發(fā)圖的事件推送 ????????????????????????????????????RequestEventPicSysphoto?info?=?XmlConvertor.XmlToObject(postStr,?typeof(RequestEventPicSysphoto))?as?RequestEventPicSysphoto;????????????????????????????????????if?(info?!=?null) ????????????????????????????????????{ ????????????????????????????????????????responseContent?=?actionBLL.HandleEventPicSysphoto(info); ????????????????????????????????????} ????????????????????????????????}????????????????????????????????break; ..................
處理掃描結(jié)果并返回的最終代碼如下所示。
????????///?<summary> ????????///?掃碼推事件且彈出“消息接收中”提示框的事件推送的處理????????///?</summary> ????????///?<param name="info">掃描信息</param> ????????///?<returns></returns> ????????public?string?HandleEventScancodeWaitmsg(RequestEventScancodeWaitmsg?info) ????????{ ????????????ResponseText?response?=?new?ResponseText(info); ????????????response.Content?=?string.Format("您的信息為:{0},可以結(jié)合后臺(tái)進(jìn)行數(shù)據(jù)查詢。",?info.ScanCodeInfo.ScanResult);????????????return?response.ToXml(); ????????}
最后我們測(cè)試掃描一個(gè)條形碼,可以看到返回的結(jié)果界面操作如下所示。
?
5、新菜單功能測(cè)試發(fā)現(xiàn)的問題
前面介紹了一些新菜單功能模塊的集成,我個(gè)人對(duì)這種掃一掃菜單功能非常贊賞,這也是微信逐步整合更多硬件資源和接口處理的趨向,不過在集成使用的時(shí)候,發(fā)現(xiàn)公眾號(hào)偶爾出現(xiàn)閃退的情況,還有就是這些新功能雖然后臺(tái)能夠?qū)崿F(xiàn)數(shù)據(jù)的處理和接收,但是有一些不能返回應(yīng)答消息,很郁悶。也許隨著版本研發(fā)的加快,這些功能很快得到完善和解決。
另外微信開放平臺(tái)也投入使用了,好些認(rèn)證也是300元一年,不過暫時(shí)沒有其應(yīng)用的場(chǎng)景,我只是用到了它來獲取微信賬號(hào)的unionid的功能,其他功能慢慢了解吧。
還有就是微信的企業(yè)號(hào)也已經(jīng)出來了,而且我也已經(jīng)申請(qǐng)認(rèn)證通過,它的開發(fā)用戶的API也有不少,有空繼續(xù)研究并整合到微信開發(fā)框架里面吧。
?
更多C#開發(fā)微信門戶及應(yīng)用(15)-微信菜單增加掃一掃、發(fā)圖片、發(fā)地理位置功能?相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)