1、微信賬號
要開發使用微信的平台API,就需要到微信的公眾平台(https://mp.weixin.qq.com/)去注冊,擁有一個服務號或者訂閱號,服務號主要面對企業和組織,訂閱號主要面向組織和個人,他們之間有一定的差異,根據不同的需要自己申請對應的賬號即可。
2、微信菜單定義
微信有兩種方式的菜單定義,一種是編輯模式,一種是開發模式,兩者互斥,也就是說,一旦我們采用了開發模式,就不能使用編輯模式了,反過來也一樣。編輯下的菜單,其實也是可以管理的,但是微信不支持,覺得很不爽。
一般情況下,如果我們剛剛申請了微信號碼,可以使用編輯菜單測試一下,根據說明編輯一些菜單試試。雖然微信說24小時內更新,不過一般很快,最快可能一兩分鍾就更新了,感覺還是不錯的。
使用開發者模式,你需要根據微信的要求,在服務器上放置一個頁面鏈接,使用C#開發的,可以采用***.ashx的命名方式,使用Asp.NET的一般處理程序即可,不需要使用普通的頁面,或者也可以使用MVC進行對接。
使用開發模式的菜單,也就是可以調用微信API進行菜單創建的工作,對於調用微信的API(微信有很多API可以調用),我們需要知道,有幾個參數的重要性,所以在開發模式打開的時候,會給你列出這些參數,如下所示。
在進入自己的訂閱號后里面有一個開發工具:
3、接入微信的鏈接處理
上面說了,你申請開發模式對菜單或者對其他API的調用,你需要順利通過接入微信的測試,也就是確認你填寫的鏈接存在並能順利經過微信的回調測試。微信提供了一個PHP的頁面處理例子,如果我們是C#開發的呢,可以搜一下就會得到答案,我的處理方式如下所示。
創建一個MVC處理程序,然后在其處理頁面里面增加一個處理邏輯,如果是非POST方式的內容,就是表示微信進行的Get測試,你需要增加一些處理邏輯,把它給你的內容傳回去即可,如果是POST方式的,就是微信服務器對接口消息的請求操作了,后面介紹。
/// <summary> /// 微信后台驗證地址(使用Get),微信后台的“接口配置信息”的Url /// </summary> [HttpGet] public ActionResult Index(string signature, string timestamp, string nonce, string echostr) { string token = System.Configuration.ConfigurationManager.AppSettings["Token"]; var ent = ""; if (CheckSignature(signature, timestamp, nonce, token, out ent)) { return Content("參數錯誤!"); } return Content(echostr); //返回隨機字符串則表示驗證通過 }
通用驗證方法:
/// <summary> /// 檢查簽名是否正確: /// http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97 /// </summary> /// <param name="signature"></param> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="token">AccessToken</param> /// <returns> /// true: check signature success /// false: check failed, 非微信官方調用! /// </returns> public static bool CheckSignature(string signature, string timestamp, string nonce, string token, out string ent) { var arr = new[] { token, timestamp, nonce }.OrderBy(z => z).ToArray(); var arrString = string.Join("", arr); var sha1 = System.Security.Cryptography.SHA1.Create(); var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString)); StringBuilder enText = new StringBuilder(); foreach (var b in sha1Arr) { enText.AppendFormat("{0:x2}", b); } ent = enText.ToString(); return signature == sha1Arr.ToString(); }
如果是post請求就是開始進行交互了(暫時先設置為空,不然公眾號會返回:該公眾號暫時無法提供服務,請稍后再試):
/// <summary> /// 用戶發送消息后,微信平台自動Post一個請求到這里,並等待響應XML。 /// </summary> [HttpPost] public ActionResult Index() { Stream requestStream = System.Web.HttpContext.Current.Request.InputStream; byte[] requestByte = new byte[requestStream.Length]; requestStream.Read(requestByte, 0, (int)requestStream.Length); string requestStr = Encoding.UTF8.GetString(requestByte); //SNFWeiXinProcess.Log("請求值:" + requestStr); //return Content(SNFWeiXinProcess.Run(requestStr)); //return Content(sss(signature, timestamp, nonce, echostr) ); //return Content(ReceiveXml()); return Content(""); }
以上就是從申請到MVC程序連接微信賬號的過程,之后會講到怎么與微信進行交互