前面介紹了很多篇關於使用C#開發微信門戶及應用的文章,基本上把當時微信能做的接口都封裝差不多了,微信框架也積累了不少模塊和用戶,最近發現微信公眾平台增加了不少內容,特別是在自定義菜單裡面增加了掃一掃、發圖片、發地理位置功能,這幾個功能模塊很重要,想想以前想在微信公眾號裡面增加一個掃描二維碼的功能,都做不了,現在可以了,還可以拍照上傳等功能,本文主要介紹基於我前面的框架系列文章,進一步介紹如何集成和使用這些新增功能。
用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後顯示掃描結果(如果是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者可以下發消息。
用戶點擊按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後,將掃碼的結果傳給開發者,同時收起掃一掃工具,然後彈出“消息接收中”提示框,隨後可能會收到開發者下發的消息。
用戶點擊按鈕後,微信客戶端將調起系統相機,完成拍照操作後,將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的消息。
用戶點擊按鈕後,微信客戶端將彈出選擇器供用戶選擇“拍照”或者“從手機相冊選擇”。用戶選擇後即走其他兩種流程。
用戶點擊按鈕後,微信客戶端將調起微信相冊,完成選擇操作後,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨後可能會收到開發者下發的消息。
用戶點擊按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操作後,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨後可能會收到開發者下發的消息。
但請注意,以上新增能力,均僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊後將沒有回應,開發者也不能正常接收到事件推送。
微信不僅增加了這些功能模塊的支持,還考慮到我們開發人員的方便,增加了一個叫做“menutest"的公眾號,方便我們測試。我們在公眾號搜索“menutest",然後關注它即可進行測試幾個新增功能了。
/// <summary> /// 菜單按鈕類型 /// </summary> public enum ButtonType { /// <summary> /// 點擊 /// </summary> click, /// <summary> /// Url /// </summary> view, /// <summary> /// 掃碼推事件的事件推送 /// </summary> scancode_push, /// <summary> /// 掃碼推事件且彈出“消息接收中”提示框的事件推送 /// </summary> scancode_waitmsg, /// <summary> /// 彈出系統拍照發圖的事件推送 /// </summary> pic_sysphoto, /// <summary> /// 彈出拍照或者相冊發圖的事件推送 /// </summary> pic_photo_or_album, /// <summary> /// 彈出微信相冊發圖器的事件推送 /// </summary> pic_weixin, /// <summary> /// 彈出地理位置選擇器的事件推送 /// </summary> location_select }
然後在Winform裡面調用創建菜單操作代碼如下所示:
private void btnCreateMenu_Click(object sender, EventArgs e) { MenuJson productInfo = new MenuJson("新功能測試", new MenuJson[] { new MenuJson("掃碼推事件", ButtonType.scancode_push, "scancode_push") ,new MenuJson("系統拍照發圖", ButtonType.pic_sysphoto, "pic_sysphoto") , new MenuJson("拍照相冊發圖", ButtonType.pic_photo_or_album, "pic_photo_or_album") , new MenuJson("微信相冊發圖", ButtonType.pic_weixin, "pic_weixin") , new MenuJson("地理位置選擇", ButtonType.location_select, "location_select") }); MenuJson frameworkInfo = new MenuJson("框架產品", new MenuJson[] { new MenuJson("Win開發框架", ButtonType.click, "win"), new MenuJson("WCF開發框架", ButtonType.click, "wcf"), new MenuJson("混合式框架", ButtonType.click, "mix"), new MenuJson("Web開發框架", ButtonType.click, "web") ,new MenuJson("代碼生成工具", ButtonType.click, "database2sharp") }); MenuJson relatedInfo = new MenuJson("相關鏈接", new MenuJson[] { new MenuJson("公司介紹", ButtonType.click, "event_company"), new MenuJson("官方網站", ButtonType.view, "http://www.iqidi.com"), new MenuJson("聯系我們", ButtonType.click, "event_contact"), new MenuJson("應答系統", 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("您確認要創建菜單嗎") == System.Windows.Forms.DialogResult.Yes) { IMenuApi menuBLL = new MenuApi(); CommonResult result = menuBLL.CreateMenu(token, menuJson); Console.WriteLine("創建菜單:" + (result.Success ? "成功" : "失敗:" + result.ErrorMessage)); } }
當然,一般情況下我們都是在Web後台系統進行的,維護菜單都是在自己微信平台上進行菜單管理,然後一次性提交到微信服務器即可。
而在Web後台,只需要把數據庫的數據變化為Json數據提交即可,操作和上面的類似。
/// <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); }
前面講了,有了最新的功能,我們就可以實現掃一掃功能,從而可以掃描條形碼,二維碼的功能。有了條形碼、二維碼的快速和識別,我們就能開發一些如條碼查詢、商品處理等功能了。
這裡我們介紹如何在我的微信開發框架裡面整合這個掃一掃的功能處理操作。
前面已經增加了一些新功能的測試菜單,我們要做的就是響應這些事件處理,然後對他們進行應答處理就可以了。
下面是根據事件進行的一些API跳轉處理,我們同時定義了幾個相關的實體類用來處理他們的信息,如RequestEventScancodePush、RequestEventScancodeWaitmsg、RequestEventPicSysphoto等等。
RequestEventScancodeWaitmsg實體類的代碼如下所示,其他的類似處理。
/// <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值,由開發者在創建菜單時設定 /// </summary> public string EventKey { get; set; } /// <summary> /// 掃描信息 /// </summary> public ScanCodeInfo ScanCodeInfo { get; set; } }
而根據實體類強類型的處理接口流轉操作如下所示。
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: { //彈出系統拍照發圖的事件推送 RequestEventPicSysphoto info = XmlConvertor.XmlToObject(postStr, typeof(RequestEventPicSysphoto)) as RequestEventPicSysphoto; if (info != null) { responseContent = actionBLL.HandleEventPicSysphoto(info); } } break;
..................
處理掃描結果並返回的最終代碼如下所示。
/// <summary> /// 掃碼推事件且彈出“消息接收中”提示框的事件推送的處理 /// </summary> /// <param name="info">掃描信息</param> /// <returns></returns> public string HandleEventScancodeWaitmsg(RequestEventScancodeWaitmsg info) { ResponseText response = new ResponseText(info); response.Content = string.Format("您的信息為:{0},可以結合後台進行數據查詢。", info.ScanCodeInfo.ScanResult); return response.ToXml(); }
最後我們測試掃描一個條形碼,可以看到返回的結果界面操作如下所示。
前面介紹了一些新菜單功能模塊的集成,我個人對這種掃一掃菜單功能非常贊賞,這也是微信逐步整合更多硬件資源和接口處理的趨向,不過在集成使用的時候,發現公眾號偶爾出現閃退的情況,還有就是這些新功能雖然後台能夠實現數據的處理和接收,但是有一些不能返回應答消息,很郁悶。也許隨著版本研發的加快,這些功能很快得到完善和解決。
另外微信開放平台也投入使用了,好些認證也是300元一年,不過暫時沒有其應用的場景,我只是用到了它來獲取微信賬號的unionid的功能,其他功能慢慢了解吧。
還有就是微信的企業號也已經出來了,而且我也已經申請認證通過,它的開發用戶的API也有不少,有空繼續研究並整合到微信開發框架裡面吧。
可以的
參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)
zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>
可以的
參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)
zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>