C# 微信公衆平臺開發(1)-- 服務器配置

題記:最近公司須要開發微信服務號,由本人負責,之前雖然聽過微信開發,但並無認真的去了解,項目開發中,也邊看文檔邊開發,記錄本身的項目開發經驗;數據庫

一、註冊賬號--填寫服務器配置瀏覽器

在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();
        }
View Code

需求:一個後臺對應多個公衆號

在服務器地址加上token參數;在後臺服務中,經過獲取token的值,與數據庫中的APPID對應起來,生成不一樣的access_Token;固然不一樣的公衆號token是惟一的

 

提交配置;

若是提交失敗的話,能夠本身寫個日字查看緣由;

驗證成功纔可以繼續使用更多的功能;

 -----------------------------------------------------------------------、

若是你以爲有幫助 請關注個人微信公衆號,沒有幫助你也能夠添加喲!o(∩_∩)o 哈哈

相關文章
相關標籤/搜索