微信公衆平臺入門開發教程.Net(C#)框架

1、序言

  一直在想第一次寫博客,應該寫點什麼好?正好最近在研究微信公衆平臺開發,索性就記錄下,分享下本身的心得,也分享下本人簡單模仿asp.net運行機制所寫的通用的微信公衆平臺開發.Net(c#)框架吧。因爲本人知識有限、文字組織能力有限,若有錯誤或不足,請多多指教!html

2、微信公衆平臺.Net(C#)框架介紹

 

  運行流程:WeiXinRequestHandler.ashx接收微信服務器post請求,建立WeiXinApplication實例,構造函數中設置WeiContext(WeiXinRequest,WeiXinResponse)請求上下文屬性,執行WeiXinApplication的GetResponseXml()方法,使用WeiXinHandlerFactory工廠類動態加載程序集,遍歷程序集裏的Type集合,反射獲取控制器中的WeiXinMsgType屬性值判斷是否與請求消息上下文WeiXinRequest的WeiXinMsgType屬性值一致建立相對應的消息處理控制器實例,並返回這個實例,賦值給WeiXinApplication中IWeiXinHandler屬性值,調用ProcessWeiXin(WeiXinContext context)方法,執行完畢後,返回WeiXinResponse對象中的響應消息。web

3、微信公衆平臺註冊/接入相關事宜

一、註冊:c#

  填寫基本信息,激活郵箱,登記信息......公衆號信息。值得一提的是:目前我的只容許註冊訂閱號,公司單位才能註冊服務號,服務號能夠實現自定義菜單;公衆號名稱一經確認就沒法修改!服務器

二、接入:(必須條件:擁有本身的公網可訪問的服務器)微信

   ①、成爲開發者:在公衆平臺網站的高級功能 – 開發模式頁,點擊「成爲開發者」按鈕,根據官方文檔填寫相關接口配置信息並提交。
微信公衆平臺

   ②、驗證url有效性:開發者提交信息後,微信服務器將發送GET請求到填寫的URL上,GET請求攜帶四個參數:框架

 

參數 描述
signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字符串

 

  開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。asp.net

 

加密/校驗流程以下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信

驗證工具類:UtilityHelper

     #region 檢查加密簽名是否一致 - public static bool CheckSignature(string signature, string timestamp, string nonce)

        /// <summary>
        /// 檢查加密簽名是否一致
        /// </summary>
        /// <param name="signature">微信加密簽名</param>
        /// <param name="timestamp">時間戳</param>
        /// <param name="nonce">隨機數</param>
        /// <returns></returns>
        public static bool CheckSignature(string signature, string timestamp, string nonce)
        {
            List<string> stringList = new List<string> {Token, timestamp, nonce};
            // 字典排序
            stringList.Sort();
            return Sha1Encrypt(string.Join("", stringList)) == signature;
        }

        #endregion

        #region 對字符串SHA1加密 - public static string Sha1Encrypt(string targetString)

        /// <summary>
        /// 對字符串SHA1加密
        /// </summary>
        /// <param name="targetString">源字符串</param>
        /// <returns>加密後的十六進制字符串</returns>
        private static string Sha1Encrypt(string targetString)
        {
            byte[] byteArray = Encoding.Default.GetBytes(targetString);
            HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
            byteArray = hashAlgorithm.ComputeHash(byteArray);
            StringBuilder stringBuilder = new StringBuilder();
            foreach (byte item in byteArray)
            {
                stringBuilder.AppendFormat("{0:x2}", item);
            }
            return stringBuilder.ToString();
        }

        #endregion

        #region 根據加密類型對字符串SHA1加密 - public static string Sha1Encrypt(string targetString, string encryptType)

        /// <summary>
        /// 根據加密類型對字符串SHA1加密
        /// </summary>
        /// <param name="targetString">源字符串</param>
        /// <param name="encryptType">加密類型:MD5/SHA1</param>
        /// <returns>加密後的字符串</returns>
        private static string Sha1Encrypt(string targetString, string encryptType)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(targetString, encryptType);
        }

        #endregion

  

4、微信公衆平臺運行原理介紹

 

5、結束

  字窮了...~~~!附源碼吧。看web.config,打開Test.html進行測試。添加本身的消息控制器必須繼承WeiXinHandlerType,程序集生成插件目錄bin/WeiXinPlugins。ide

源碼下載:WeiXin.Framework函數

相關文章
相關標籤/搜索