千家信息网

C#开发微信之微信企业号消息和事件接收处理及解密的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家分享的是有关C#开发微信之微信企业号消息和事件接收处理及解密的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、企业号回调模式的设置和公众号一样,微信
千家信息网最后更新 2026年11月01日C#开发微信之微信企业号消息和事件接收处理及解密的示例分析

这篇文章给大家分享的是有关C#开发微信之微信企业号消息和事件接收处理及解密的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、企业号回调模式的设置

和公众号一样,微信企业号如果需要进行二次开发,也是需要在后台设置好对应的回调参数,如下界面所示。

设置好这些后,检查通过后,我们就可以在自己微信应用服务器上进行消息的收发操作了。

在回调的消息入口处,我们需要对POST数据和普通的GET数据进行分开处理,GET数据是微信自身的验证处理,POST数据是微信消息的交互操作。

    ///     /// 企业号回调信息接口。统一接收并处理信息的入口。    ///     public class corpapi : IHttpHandler    {        ///         /// 处理企业号的信息        ///         ///         public void ProcessRequest(HttpContext context)        {

上面我们定义了一个一般应用处理程序来对消息进行处理。

然后我们分开不同的消息类型(POST、GET 方式),针对性的进行处理。

                    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、微信回调消息的验证

下面是微信对于回调模式,验证URL的说明。

验证URL有效性

当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功。

参数描述是否必带
msg_signature微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体是
timestamp时间戳是
nonce随机数是
echostr加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文首次校验时必带

企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业应用对echostr参数解密并原样返回echostr明文(不能加引号),则接入验证生效,回调模式才能开启。

后续回调企业时都会在请求URL中带上以上参数(echostr除外),校验方式与首次验证URL一致。

根据上面的说明,我们需要获取这些参数,然后调用微信提供的消息处理函数进行加解密处理。

在验证URL的Auth(accountInfo);操作里面,我们可以看到核心的内容如下所示,就是获取到这些传递过来的参数信息,然后交给基类处理消息的签名内容。

                        #region 具体处理逻辑                        string echoString = HttpContext.Current.Request.QueryString["echoStr"];                        string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企业号的 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

验证代码部门如下所示。

        ///         /// 验证企业号签名        ///         /// 企业号配置的Token        /// 签名内容        /// 时间戳        /// nonce参数        /// 企业号ID标识        /// 加密键        /// 内容字符串        /// 返回的字符串        ///         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、企业号的消息处理

上面介绍了,微信企业号对URL的验证过程,还有另外一个消息处理过程,就是微信服务器把消息发送给我们自己的应用服务器进行处理的过程,我们应用服务器需要在收到消息后,及时进行常规回复处理。

也就是下面的代码逻辑。

                    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);                        }                    }

同样,我们给微信服务器回应消息的时候,我们也需要获得相应的参数,然后再行构造信息回答。

            string echoString = HttpContext.Current.Request.QueryString["echoStr"];            string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企业号的 msg_signature            string timestamp = HttpContext.Current.Request.QueryString["timestamp"];            string nonce = HttpContext.Current.Request.QueryString["nonce"];

而另外一些参数信息,则是来源于我们企业号账号的配置参数。

            //获取配置参数并对加解密函数初始化            string CorpToken = accountInfo.Token;            string AESKey = accountInfo.EncodingAESKey;            string CorpId = accountInfo.CorpID;

然后使用微信提供的消息加解密类,就可以顺利对消息进行加解密的处理了。具体操作代码如下所示。

            //根据参数信息,初始化微信对应的消息加密解密类            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(CorpToken, AESKey, CorpId);            //对收到的密文进行解析处理            string sMsg = "";  // 解析之后的明文            int flag = wxcpt.DecryptMsg(signature, timestamp, nonce, postStr, ref sMsg);            if (flag == 0)            {                //LogTextHelper.Info("记录解密后的数据:");                //LogTextHelper.Info(sMsg);//记录解密后的数据                CorpApiDispatch dispatch = new CorpApiDispatch();                string responseContent = dispatch.Execute(sMsg);                //加密后并发送                //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("解密消息失败!");            }

最终,我们把解密完成的消息交给对应的封装类进行统一处理就可以了。

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

这样我们在企业号API的封装,就可以只需要关注消息如何应答的逻辑就可以了,其他的不用关心。

感谢各位的阅读!关于"C#开发微信之微信企业号消息和事件接收处理及解密的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

企业 消息 处理 参数 验证 信息 内容 数据 加密 服务器 应用 服务 明文 代码 字符 字符串 模式 过程 逻辑 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 高科技互联网 科技互联网公司装修 关于新基建和互联网科技 未来的互联网科技 奇酷互联网络科技公司 联恩商钥互联网科技有限公司 互联网巨头投资的硬核科技 北京三清互联网科技 深圳前海聚择互联网科技有限公司 天速互联网络科技有限公司 科技互联网的估值 团飞科技与伯堂互联网服务平台 互联网经济与金融科技 苏州铭阳互联网科技有限公司 哈尔滨屹滨互联网科技有限公司 中国科技创新与世界互联网大会 银行科技岗属于互联网吗 互联网科技股为什么大涨 科技互联网公司两年变化 科技美学互联网 艺术 互联网科技的发展 齐家互联网科技 沃里互联网科技 科技伦理 互联网公司 衡水科技产业互联网平台 青海省互联网新科技 成都玖崟互联网科技有限公司乐商圈怎么样 内蒙古九一互联网科技 新氧科技和美国互联网有关系吗 六子台科技互联网展会
0