前言: 本文是以微信公衆號中的訂閱號(我的)來進行簡單介紹,本人也是剛剛開始學習,有不足之處,歡迎批評指正。html
先粘貼2個幫助連接:服務器
入門指引:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5&token=&lang=zh_CN微信
微信開發介紹-源代碼分享:http://www.cnblogs.com/pmars/p/3680615.html網絡
1-去微信公衆平臺申請屬於你的訂閱號。 https://mp.weixin.qq.com/微信開發
基本信息以下:微信公衆平臺
2-點擊菜單:開發--基本配置:學習
3-點擊修改配置:測試
爲了方便入手:URL必填,Token本身起名,EncodingAESKey隨機生成便可,最後一個使用明文方式。加密
URL:本身代碼後生成的能夠在外網訪問的接口地址,可使用通常處理程序或者MVC中API控制器等。下面將會介紹服務器代碼寫法;spa
Token:用於驗證服務器消息是否來自微信服務器;
EncodingAESKey:消息加密鑰匙,若是第四個選項使用明文方式,不需理會,我們隨機生成便可。
4-準備微信服務器接入代碼服務器接口:
將API項目發佈後,COPY到外網能夠訪問的服務器中,並部署到IIS上。
一版路徑以下:http://服務器域名(必須80端口)/站點名/GzhTest/Check
這一步可參考文章:
入門指引:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5&token=&lang=zh_CN
微信開發介紹-源代碼分享:http://www.cnblogs.com/pmars/p/3680615.html
public static HttpResponseMessage GetReturn(string message) { return new HttpResponseMessage { Content = new StringContent(message, Encoding.UTF8, "text/html") }; } /// <summary> /// 公衆號接入測試 /// </summary> /// <param name="signature">微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。</param> /// <param name="timestamp">時間戳</param> /// <param name="nonce">隨機數</param> /// <param name="echostr">隨機字符串</param> /// <returns>開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。</returns> [HttpGet] [Route("Check")] public HttpResponseMessage Check(string signature, string timestamp, string nonce, string echostr) { var myToken = ConfigurationManager.AppSettings["myToken"]; var list = new string[] { myToken, timestamp, nonce }; Array.Sort(list); var sortStr = string.Join("", list); var sha1Str = FormsAuthentication.HashPasswordForStoringInConfigFile(sortStr, "SHA1").ToLower(); if (sha1Str == signature && !string.IsNullOrEmpty(echostr)) //根據微信的驗證規則作判斷 return GetReturn(echostr); return GetReturn("error"); }
5-接入微信服務器:
將上面接口地址放入URL中,便可,最後提交確認。
點擊提交按鈕。若提示」token驗證失敗」, 請認真檢查代碼或網絡連接等。 若token驗證成功,會自動返回基本配置的主頁面,點擊啓動按鈕
6-備註:本人遇到過token驗證失敗,個人緣由是由於接口直接返回要求的隨機字符串,可是這裏使用API,彷佛必須是HttpResponseMessage ,
若是是通常處理程序,使用:
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();