題記:最近公司須要開發微信服務號,由本人負責,之前雖然聽過微信開發,但並無認真的去了解,項目開發中,也邊看文檔邊開發,記錄本身的項目開發經驗;數據庫
一、註冊賬號--填寫服務器配置瀏覽器
在https://mp.weixin.qq.com/ 微信公衆平臺上註冊賬號;安全
服務號是公司申請的微信公共帳號,訂閱號是我的申請的;服務器
我的權限比較少;微信
登陸微信公衆平臺官網後,在公衆平臺後臺管理頁面 - 開發者中心頁,點擊「修改配置」按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信消息和事件 的接口URL。Token可由開發者能夠任意填寫,用做生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。 EncodingAESKey由開發者手動填寫或隨機生成,將用做消息體加解密密鑰。微信開發
同時,開發者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交後都會當即生效,請開發者謹慎填寫及選擇。加解密方式的默認狀態爲明文模式,選擇兼容模式和安全模式須要提早配置好相關加解密代碼,詳情請參考消息體簽名及加解密部分的文檔。 微信公衆平臺
URL 必須爲80端口,而且只能在服務器上的;ide
驗證URL是否有效ui
開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶四個參數:加密
參數 | 描述 |
---|---|
signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。
private string Token = ConfigurationManager.AppSettings["Token"]; [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 + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。若是你在瀏覽器中看到這句話,說明此地址能夠被做爲微信公衆帳號後臺的Url,請注意保持Token一致。"); } } /// <summary> /// 檢查簽名是否正確 /// </summary> /// <param name="signature"></param> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="token"></param> /// <returns></returns> public static bool Check(string signature, string timestamp, string nonce, string token = null) { return signature == GetSignature(timestamp, nonce, token); } /// <summary> /// 返回正確的簽名 /// </summary> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="token"></param> /// <returns></returns> public static string GetSignature(string timestamp, string nonce, string token = null) { token = token ?? Token; var arr = new[] { token, timestamp, nonce }.OrderBy(z => z).ToArray(); var arrString = string.Join("", arr); //var enText = FormsAuthentication.HashPasswordForStoringInConfigFile(arrString, "SHA1");//使用System.Web.Security程序集 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); } return enText.ToString(); }
需求:一個後臺對應多個公衆號
在服務器地址加上token參數;在後臺服務中,經過獲取token的值,與數據庫中的APPID對應起來,生成不一樣的access_Token;固然不一樣的公衆號token是惟一的
提交配置;
若是提交失敗的話,能夠本身寫個日字查看緣由;
驗證成功纔可以繼續使用更多的功能;
-----------------------------------------------------------------------、
若是你以爲有幫助 請關注個人微信公衆號,沒有幫助你也能夠添加喲!o(∩_∩)o 哈哈