要對接微信公眾平台的"開發模式",即對接到自己的網站程序,必須在注冊成功之后(見Senparc.Weixin.MP SDK 微信公眾平台開發教程(一):微信公眾平台注冊),等待官方審核,審核通過之后,會在后台頂部出現“高級功能”菜單。
使用“高級功能”>“開發模式”之前,必須有一個已經部署在Internet上,可以用80端口訪問的網站(域名或IP訪問都可以),一些開發的准備工作見文章:Senparc.Weixin.MP SDK 微信公眾平台開發教程(二):成為開發者
首次進入“高級功能”后界面如下:
我們看到默認情況下,“編輯模式”是開啟的,要使用“開發模式”,必須先關閉“編輯模式”。
點擊進入編輯模式。如下圖:
點擊右上角的滑塊,關閉“編輯功能”。
然后回到“高級功能”,進入“開發模式”,如下圖:
進入開發模式后,我們需要設置與微信服務器通訊的Url,以及只有我們自己知道的Token(千萬不可泄露)。
官方已經提供了一個PHP版本的示例:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip,你也可以根據官方API的說明用自己的語言編寫。
在Senparc.Weixin.MP的開源項目中,我們也提供了ASP.NET MVC和ASP.NET Web Forms兩種可以直接部署的Demo:https://github.com/JeffreySu/WeiXinMPSDK
在提交的時候,微信服務器會對填寫的URL,使用Token進行一次Get方式請求的驗證,如果順利通過,則保存成功,如果不通過,會給出錯誤信息,並且所填寫的信息是無法保存的。
為了更加直觀地演示這個URL對應的程序中,應高包含哪些必要元素,我這里給出Senparc.Weixin.MP的實現方法(我會分別以MVC和WebForms為例):
方法一:使用MVC
1、建立一個Controller,如WeixinController.cs,引用Senparc.Weixin.MP.dll(using Senparc.Weixin.MP.dll),最新的DLL見開源項目的Senparc.Weixin.MP.BuildOutPut文件夾https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP.BuildOutPut
注意:Senparc.Weixin.MP.BuildOutPut 中的 dll 需要自己下載 Senparc.Weixin SDK 項目源代碼並編譯,如果常規開發建議使用 nuget 進行安裝:https://www.nuget.org/packages/Senparc.Weixin.MP,其他類庫也都可以根據名字在 nuget 找到。
2、設置一個私有變量(當然你也可以保存在數據庫中),如:
public readonly string Token = "weixin";//與微信公眾賬號后台的Token設置保持一致,區分大小寫。
3、建立一個名稱為Index,用於Get請求的Action,如:
/// <summary> /// 微信后台驗證地址(使用Get),微信后台的“接口配置信息”的Url填寫如:http://weixin.senparc.com/weixin /// </summary> [HttpGet] [ActionName("Index")] public ActionResult Get(string signature, string timestamp, string nonce, string echostr) { if (CheckSignature.Check(signature, timestamp, nonce, Token)) { return Content(echostr); //返回隨機字符串則表示驗證通過 } else { return Content("failed:" + signature + "," + MP.CheckSignature.GetSignature(timestamp, nonce, Token)+"。如果您在瀏覽器中看到這條信息,表明此Url可以填入微信后台。"); } }
至此,這些代碼編譯后按照要求部署到網站上,並且在“接口配置信息”中填寫http://YourDomain/weixin,Token填寫weixin。
上述代碼完整的WeixinController.cs可以看這里。
方法二:使用Web Forms
Web Forms的驗證過程和MVC是一樣的,只是寫法上有點差別,這里直接給出代碼(也要using Senparc.Weixin.MP.dll),假設文件名為根目錄下weixin.aspx:
public partial class Weixin : System.Web.UI.Page { private readonly string Token = "weixin";//與微信公眾賬號后台的Token設置保持一致,區分大小寫。 protected void Page_Load(object sender, EventArgs e) { string signature = Request["signature"]; string timestamp = Request["timestamp"]; string nonce = Request["nonce"]; string echostr = Request["echostr"]; if (Request.HttpMethod == "GET") { //get method - 僅在微信后台填寫URL驗證時觸發 if (CheckSignature.Check(signature, timestamp, nonce, Token)) { WriteContent(echostr); //返回隨機字符串則表示驗證通過 } else { WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token)); } } else { //判斷Post或其他方式請求 } Response.End(); } private void WriteContent(string str) { Response.Output.Write(str); } }
按照上面的代碼,在“接口配置信息”中,Url應當填寫http://YourDomain/weixin.aspx,Token應當填寫weixin。
上述weixin.aspx.cs完整代碼看這里(當然你也可以寫成ashx進一步提高效率)。
CheckSignature.Check()方法是Senparc.Weixin.MP SDK中一個驗證請求的方法,已經做了封裝。這里直接使用是為了簡化代碼突出重點,感興趣的朋友可以直接看源代碼。
用以上MVC和Web Forms兩種方法的任意一種,已經可以讓后台驗證通過。但是注意,光有Get的方法,尚不能與微信用戶發來的信息通訊,因為通過前面的教程我們知道,微信后台的Url是通過Get方式請求,而微信客戶端的請求是由Post方式請求的,關於Post的方法,我會在后面的教程中詳細說明。
並且,在目前的設置狀態下,即便你寫了Post相關的方法,通過驗證之后也並不表示你的服務器已經可以接收到微信服務器的消息了,還有最后一步:手動打開“開發者模式”:
現在這個微信賬號已經成功切換到了“開發者模式”,所有微信客戶端發送到該公眾賬號的消息,都將轉發到剛才填寫的Url中。
下一篇我們將介紹如何使用最“粗礦”的方式響應客戶端的發來的Post請求。
了解了“粗礦”方法之后,我們會正式進入“精致”和“簡潔”的Senparc.Weixin.MP SDK的方法。
系列教程索引
地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(一):微信公眾平台注冊
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(二):成為開發者
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(三):微信公眾平台開發驗證
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(四):Hello World
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(五):使用Senparc.Weixin.MP SDK
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(六):了解MessageHandler
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(七):解決用戶上下文(Session)問題
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(八):通用接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(九):自定義菜單接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十):多客服接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十一):高級接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十二):OAuth2.0說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十三):地圖相關接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十四):請求消息去重
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十五):消息加密
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十六):AccessToken自動管理機制
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十七):個性化菜單接口說明
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十八):Web代理功能
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(十九):MessageHandler 的未知類型消息處理
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十):使用菜單消息功能
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十一):在小程序中使用 WebSocket (.NET Core)
- Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十二):如何安裝 Nuget(dll) 后使用項目源代碼調試