1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析-創(chuàng)新互聯(lián)

      這篇文章給大家分享的是有關(guān)C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

      為米林等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及米林網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、米林網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

      1、企業(yè)號(hào)回調(diào)模式的設(shè)置

      和公眾號(hào)一樣,微信企業(yè)號(hào)如果需要進(jìn)行二次開(kāi)發(fā),也是需要在后臺(tái)設(shè)置好對(duì)應(yīng)的回調(diào)參數(shù),如下界面所示。

      C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析

      設(shè)置好這些后,檢查通過(guò)后,我們就可以在自己微信應(yīng)用服務(wù)器上進(jìn)行消息的收發(fā)操作了。

      在回調(diào)的消息入口處,我們需要對(duì)POST數(shù)據(jù)和普通的GET數(shù)據(jù)進(jìn)行分開(kāi)處理,GET數(shù)據(jù)是微信自身的驗(yàn)證處理,POST數(shù)據(jù)是微信消息的交互操作。

          /// 
          /// 企業(yè)號(hào)回調(diào)信息接口。統(tǒng)一接收并處理信息的入口。    /// 
          public class corpapi : IHttpHandler
          {        /// 
              /// 處理企業(yè)號(hào)的信息        /// 
              /// 
              public void ProcessRequest(HttpContext context)
              {

      上面我們定義了一個(gè)一般應(yīng)用處理程序來(lái)對(duì)消息進(jìn)行處理。

      然后我們分開(kāi)不同的消息類型(POST、GET 方式),針對(duì)性的進(jìn)行處理。

                          if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
                          {                        using (Stream stream = HttpContext.Current.Request.InputStream)
                              {
                                  Byte[] postBytes = new Byte[stream.Length];
                                  stream.Read(postBytes, 0, (Int32)stream.Length);
                                  postString = Encoding.UTF8.GetString(postBytes);
                              }                        if (!string.IsNullOrEmpty(postString))
                              {
                                  Execute(postString, accountInfo);
                              }
                          }                    else
                          {
                              Auth(accountInfo);
                          }

      2、微信回調(diào)消息的驗(yàn)證

      下面是微信對(duì)于回調(diào)模式,驗(yàn)證URL的說(shuō)明。

      驗(yàn)證URL有效性

      當(dāng)你提交以上信息時(shí),企業(yè)號(hào)將發(fā)送GET請(qǐng)求到填寫的URL上,GET請(qǐng)求攜帶四個(gè)參數(shù),企業(yè)在獲取時(shí)需要做urldecode處理,否則會(huì)驗(yàn)證不成功。

      參數(shù)描述是否必帶
      msg_signature微信加密簽名,msg_signature結(jié)合了企業(yè)填寫的token、請(qǐng)求中的timestamp、nonce參數(shù)、加密的消息體
      timestamp時(shí)間戳
      nonce隨機(jī)數(shù)
      echostr加密的隨機(jī)字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四個(gè)字段,其中msg即為echostr明文首次校驗(yàn)時(shí)必帶

      企業(yè)通過(guò)參數(shù)msg_signature對(duì)請(qǐng)求進(jìn)行校驗(yàn),如果確認(rèn)此次GET請(qǐng)求來(lái)自企業(yè)號(hào),那么企業(yè)應(yīng)用對(duì)echostr參數(shù)解密并原樣返回echostr明文(不能加引號(hào)),則接入驗(yàn)證生效,回調(diào)模式才能開(kāi)啟。

      后續(xù)回調(diào)企業(yè)時(shí)都會(huì)在請(qǐng)求URL中帶上以上參數(shù)(echostr除外),校驗(yàn)方式與首次驗(yàn)證URL一致。

      根據(jù)上面的說(shuō)明,我們需要獲取這些參數(shù),然后調(diào)用微信提供的消息處理函數(shù)進(jìn)行加解密處理。

      在驗(yàn)證URL的Auth(accountInfo);操作里面,我們可以看到核心的內(nèi)容如下所示,就是獲取到這些傳遞過(guò)來(lái)的參數(shù)信息,然后交給基類處理消息的簽名內(nèi)容。

                              #region 具體處理邏輯                        string echoString = HttpContext.Current.Request.QueryString["echoStr"];                        string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企業(yè)號(hào)的 msg_signature
                              string timestamp = HttpContext.Current.Request.QueryString["timestamp"];                        string nonce = HttpContext.Current.Request.QueryString["nonce"];                        string decryptEchoString = "";                        if (new CorpBasicApi().CheckSignature(token, signature, timestamp, nonce, corpId, encodingAESKey, echoString, ref decryptEchoString))
                              {                            if (!string.IsNullOrEmpty(decryptEchoString))
                                  {
                                      HttpContext.Current.Response.Write(decryptEchoString);
                                      HttpContext.Current.Response.End();
                                  }
                              } 
                              #endregion

      驗(yàn)證代碼部門如下所示。

              /// 
              /// 驗(yàn)證企業(yè)號(hào)簽名        /// 
              /// 企業(yè)號(hào)配置的Token
              /// 簽名內(nèi)容
              /// 時(shí)間戳
              /// nonce參數(shù)
              /// 企業(yè)號(hào)ID標(biāo)識(shí)
              /// 加密鍵
              /// 內(nèi)容字符串
              /// 返回的字符串
              /// 
              public bool CheckSignature(string token, string signature, string timestamp, string nonce, string corpId, string encodingAESKey, string echostr, ref string retEchostr)
              {
                  WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, corpId);            int result = wxcpt.VerifyURL(signature, timestamp, nonce, echostr, ref retEchostr);            if (result != 0)
                  {
                      LogTextHelper.Error("ERR: VerifyURL fail, ret: " + result);                return false;
                  }            return true;
              }

      3、企業(yè)號(hào)的消息處理

      上面介紹了,微信企業(yè)號(hào)對(duì)URL的驗(yàn)證過(guò)程,還有另外一個(gè)消息處理過(guò)程,就是微信服務(wù)器把消息發(fā)送給我們自己的應(yīng)用服務(wù)器進(jìn)行處理的過(guò)程,我們應(yīng)用服務(wù)器需要在收到消息后,及時(shí)進(jìn)行常規(guī)回復(fù)處理。

      也就是下面的代碼邏輯。

                          if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
                          {                        using (Stream stream = HttpContext.Current.Request.InputStream)
                              {
                                  Byte[] postBytes = new Byte[stream.Length];
                                  stream.Read(postBytes, 0, (Int32)stream.Length);
                                  postString = Encoding.UTF8.GetString(postBytes);
                              }                        if (!string.IsNullOrEmpty(postString))
                              {
                                  Execute(postString, accountInfo);
                              }
                          }

      同樣,我們給微信服務(wù)器回應(yīng)消息的時(shí)候,我們也需要獲得相應(yīng)的參數(shù),然后再行構(gòu)造信息回答。

                  string echoString = HttpContext.Current.Request.QueryString["echoStr"];            string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企業(yè)號(hào)的 msg_signature
                  string timestamp = HttpContext.Current.Request.QueryString["timestamp"];            string nonce = HttpContext.Current.Request.QueryString["nonce"];

      而另外一些參數(shù)信息,則是來(lái)源于我們企業(yè)號(hào)賬號(hào)的配置參數(shù)。

                  //獲取配置參數(shù)并對(duì)加解密函數(shù)初始化
                  string CorpToken = accountInfo.Token;            string AESKey = accountInfo.EncodingAESKey;            string CorpId = accountInfo.CorpID;

      然后使用微信提供的消息加解密類,就可以順利對(duì)消息進(jìn)行加解密的處理了。具體操作代碼如下所示。

                  //根據(jù)參數(shù)信息,初始化微信對(duì)應(yīng)的消息加密解密類
                  WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(CorpToken, AESKey, CorpId);            //對(duì)收到的密文進(jìn)行解析處理
                  string sMsg = "";  // 解析之后的明文
                  int flag = wxcpt.DecryptMsg(signature, timestamp, nonce, postStr, ref sMsg);            if (flag == 0)
                  {                //LogTextHelper.Info("記錄解密后的數(shù)據(jù):");                //LogTextHelper.Info(sMsg);//記錄解密后的數(shù)據(jù)
                      CorpApiDispatch dispatch = new CorpApiDispatch();                string responseContent = dispatch.Execute(sMsg);                //加密后并發(fā)送                //LogTextHelper.Info(responseContent);
                      string encryptResponse = "";
                      timestamp = DateTime.Now.DateTimeToInt().ToString();
                      wxcpt.EncryptMsg(responseContent, timestamp, nonce, ref encryptResponse, ref signature);
      
                      HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                      HttpContext.Current.Response.Write(encryptResponse);
                  }            else
                  {
                      LogTextHelper.Info("解密消息失敗!");
                  }

      最終,我們把解密完成的消息交給對(duì)應(yīng)的封裝類進(jìn)行統(tǒng)一處理就可以了。

                      CorpApiDispatch dispatch = new CorpApiDispatch();                string responseContent = dispatch.Execute(sMsg);

      這樣我們?cè)谄髽I(yè)號(hào)API的封裝,就可以只需要關(guān)注消息如何應(yīng)答的邏輯就可以了,其他的不用關(guān)心。

      C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析

      感謝各位的閱讀!關(guān)于“C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


      分享標(biāo)題:C#開(kāi)發(fā)微信之微信企業(yè)號(hào)消息和事件接收處理及解密的示例分析-創(chuàng)新互聯(lián)
      本文URL:http://www.ef60e0e.cn/article/coieih.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        怀远县| 高邮市| 湖州市| 兴义市| 湘阴县| 永靖县| 梁山县| 潮州市| 石城县| 湟源县| 太原市| 陆河县| 高要市| 抚州市| 遵义市| 会东县| 黑水县| 鹿邑县| 正定县| 宕昌县| 金华市| 鞍山市| 剑阁县| 邢台市| 攀枝花市| 武夷山市| 延安市| 天祝| 大竹县| 福清市| 凉城县| 平度市| 丹东市| 建湖县| 涿州市| 田东县| 政和县| 城口县| 娄底市| 宜州市| 兴城市|