一般處理程序ashx接入微信服務器配置

首先在威信後台填寫服務器相關配置,這裡按照說明直接填寫就好了。配置提交前在需要在我們服務端先準備號接受微信請求的url,對請求內容做驗證。

 

 

 

1、準備接口配置信息

A、服務器URL

該URL用於開發者接入時微信驗證的GET請求地址,後繼普通用戶通過您的微信公眾賬號發送的信息或各種操作產生的事件,微信服務器也會轉發並POST到這個URL上。這樣您就可以根據不同的消息類型做URL路由,分別處理不同的消息或事件。要注意的是,目前只支持http方式,不支持https方式,而且只支持默認的80端口。

B、Token字符串

Token是用來生成簽名的一個字符串,您可以隨便填寫(必須是英文字母或數字,最少3個字符,最多32個字符),只要你驗證微信加密簽名有效性時使用這個Token就可以了。它生成微信加密簽名的一個參數,主要用於驗證接入的安全性。

提示:如果您用的是測試號,配置上述信息即可;但如果是正式開發中,微信最新的要求還需要填寫「消息加密密鑰」並選擇「消息加解密方式」。

C、消息加密密鑰

消息加密密鑰(EncodingAESKey)是微信最新的要求,其由43個字符組成,你可以自己手動填寫,也可以點擊「隨機生成」。消息加密密鑰只能是英文字母或數字,它的作用是「給消息體加密和解密」。

D、消息加解密方式

消息加解密的方式有三種,即「明文方式」、「兼容模式」和「安全模式」。

明文模式下消息加密密鑰就廢了,消息體不會使用上述密鑰進行加密,安全系統較低;

兼容模式主要用於開發者調試程序,此時明明文和密文共同存在;

安全模式是微信推薦使用的方式,消息體被加密成純密文,安全系統較高,但開發者需要自己加密和解密。

2、編寫響應微信GET請求的代碼

A、Get請求

// <summary>
        /// 開發者指定的Token
        /// </summary>
        const string token = "pmlaomao";
 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
 
            switch (context.Request.HttpMethod)
            {
                case "GET":
                    //接入成功後可以注釋此行
                    JoinWeixin(context);
                    break;
                case "POST":
                    //解析微信請求的XML消息文檔
                    ParseXmlDocument(context);
                    break;
                default:
                    context.Response.Write("不支持" + context.Request.HttpMethod + "方式!");
                    break;
            }
 
            context.Response.End();
        }

 

 B、驗證微信簽名有效性

 
        /// <param name="signature">
        /// 微信加密簽名
        ///     <para>signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。</para>
        /// </param>
        /// <param name="timestamp">時間戳</param>
        /// <param name="nonce">隨機數</param>
        /// <returns></returns>
        private bool CheckSignature(string signature, string timestamp, string nonce)
        {
            string[] tmpArr = { token, timestamp, nonce };//將token、timestamp、nonce三個參數進行字典序排序
            Array.Sort(tmpArr);
            string tmpStr = string.Join("", tmpArr);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//將三個參數字符串拼接成一個字符串進行sha1加密
            tmpStr = tmpStr.ToLower();
 
            return tmpStr == signature;//開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信
        }

 

 C、原樣返回echostr參數

/// <summary>
        /// 接入微信
        ///     <para>返回echostr參數內容,則接入生效,否則接入失敗。 </para>
        /// </summary>
        /// <param name="context"></param>
        private void JoinWeixin(HttpContext context)
        {
            string signature = context.Request.QueryString["signature"];
            string timestamp = context.Request.QueryString["timestamp"];
            string nonce = context.Request.QueryString["nonce"];
            string echostr = context.Request.QueryString["echostr"];
 
            if (CheckSignature(signature, timestamp, nonce))
            {
                if (!string.IsNullOrEmpty(echostr))
                {
                    context.Response.Write(echostr);
                }
                else
                {
                    context.Response.Write("隨機字符串為空!");
                }
            }
            else
            {
                context.Response.Write("微信加密簽名驗證失敗!");
            }
 
            context.Response.End();
        }

 

3、配置頁面提交申請

完成上述代碼編寫並部署到您的服務器後,您就可以在微信公眾平台「開發者中心」->「配置項」中填寫上述準備好的接口配置信息,然後點擊「提交」按鈕將配置信息提交給微信服務器。微信服務器收到信息之後,會向您提交的URL地址發送一條GET請求.

完成上述工作後,在微信後台提交配置就可以進行驗證,注意Token一定要與微信配置中的一直。