转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证
要對接微信公眾平臺的"開發模式",即對接到自己的網站程序,必須在注冊成功之后(見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/Senparc.Weixin.MP.BuildOutPut
? ? 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.xiaoyuntun.com
轉載于:https://www.cnblogs.com/xiaoyuntun/p/3430439.html
總結
以上是生活随笔為你收集整理的转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Tomcat/7.0.47
- 下一篇: iptables与tomcat