前言: 本文是以微信公眾號中的訂閱號(個人)來進行簡單介紹,本人也是剛剛開始學習,有不足之處,歡迎批評指正。
先粘貼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控制器等。下面將會介紹服務器代碼寫法;
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();