題記:最近公司需要開發微信服務號,由本人負責,以前雖然聽過微信開發,但并沒有認真的去了解,項目開發中,也邊看文檔邊開發,記錄自己的項目開發經驗;
1、注冊帳號--填寫服務器配置
在https://mp.weixin.QQ.com/ 微信公眾平臺上注冊帳號;
服務號是公司申請的微信公共賬號,訂閱號是個人申請的;
個人權限比較少;
登錄微信公眾平臺官網后,在公眾平臺后臺管理頁面 - 開發者中心頁,點擊“修改配置”按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信消息和事件 的接口URL。Token可由開發者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。 EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密密鑰。
同時,開發者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交后都會立即生效,請開發者謹慎填寫及選擇。加解密方式的默認狀態為明文模式,選擇兼容模式和安全模式需要提前配置好相關加解密代碼,詳情請參考消息體簽名及加解密部分的文檔。
URL 必須為80端口,并且只能在服務器上的;
驗證URL是否有效
開發者提交信息后,微信服務器將發送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 哈哈
新聞熱點
疑難解答