这一章主要讲应用菜单点击事件的接收

要接收企业微信消息,首先要配置API,这里不进行详细介绍了,具体请参考企业微信官方文档

另外还需要用代码设置菜单,菜单点击事件无法手动设置,至少要用代码设置一次之后才能手动设置点击事件,需要设置菜单代码的可以留言联系方式

企业微信接收与回复消息需要加密以及解密,官方有提供算法库,目前已有 c++/python/php/java/golang/c# 等语言版本,我用的是C#库

1.封装接收消息帮助类

private string sToken { get; set; }private string sEncodingAESKey { get; set; }Tencent.WXBizMsgCrypt Wxcpt { get; set; }public  ReceiveMsgHelper(string sToken, string sEncodingAESKey){this.sToken = sToken;this.sEncodingAESKey = sEncodingAESKey;this.Wxcpt = new Tencent.WXBizMsgCrypt(sToken, sEncodingAESKey, corpid);}/// <summary>/// 获取响应消息对象/// </summary>/// <param name="RequestStr"></param>/// <returns></returns>public HttpResponseMessage getHttpRespMsg(string RequestStr){return new HttpResponseMessage{Content = new StringContent(RequestStr, Encoding.GetEncoding("UTF-8"), "text/xml")};}/// <summary>/// 验证VerifyURL/// </summary>/// <returns></returns>public  string VerifyURL(string msg_signature, string timestamp, string nonce, string echostr){string sEchoStr = "";int ret = Wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr, ref sEchoStr);if (ret != 0){LogHelper.Error("ERR: VerifyURL fail, ret: " + ret);return string.Empty;}return sEchoStr;}/// <summary>/// DecryptMsg,解密/// </summary>/// <returns></returns>public  string DecryptMsg(string msg_signature, string timestamp, string nonce, string ciphertext){string sEchoStr = "";int ret = Wxcpt.DecryptMsg(msg_signature, timestamp, nonce, ciphertext, ref sEchoStr);if (ret != 0){LogHelper.Error("ERR: DecryptMsg fail, ret: " + ret);return string.Empty;}return sEchoStr;}/// <summary>/// EncryptMsg ,加密/// </summary>/// <returns></returns>public string EncryptMsg(string timestamp, string nonce, string text){string sEchoStr = "";int ret = Wxcpt.EncryptMsg(text, timestamp, nonce, ref sEchoStr);if (ret != 0){LogHelper.Error("ERR: EncryptMsg fail, ret: " + ret);return string.Empty;}return sEchoStr;}

这里我的应用id,以及接收配置字符串都写在了配置文件里

2.接收消息接口

private ReceiveMsgHelper wx{get { return new ReceiveMsgHelper(base.sToken, base.sEncodingAESKey); }}[AllowAnonymous, HttpPost, HttpGet]public HttpResponseMessage Receive(){var msg_signature = HttpContext.Current.Request.QueryString["msg_signature"].ToString();var timestamp = HttpContext.Current.Request.QueryString["timestamp"].ToString();var nonce = HttpContext.Current.Request.QueryString["nonce"].ToString();var RequestStr = "";//回复消息内容//验证URLif (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET"){var echostr = HttpContext.Current.Request.QueryString["echostr"].ToString();var sEchoStr = wx.VerifyURL(msg_signature, timestamp, nonce, echostr);RequestStr = sEchoStr;}else{//捕捉事件var evnentXml = string.Empty;using (StreamReader sr = new StreamReader(HttpContext.Current.Request.InputStream)){//读取evnentXml = sr.ReadToEnd();}//解密evnentXml = wx.DecryptMsg(msg_signature, timestamp, nonce, evnentXml);LogHelper.Debug(evnentXml);//转xml对象XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(evnentXml);//获取回复消息内容RequestStr = this.getRespDataImg(xmlDoc, timestamp, nonce);if (string.IsNullOrEmpty(RequestStr)){return null;}}//响应消息return wx.getHttpRespMsg(RequestStr);}

企业微信在配置的时候发送的请求是GET方式,但在接收时的请求是POST方式,所以API要同时允许两种请求方式

获取回复消息方法

private string getRespDataImg(XmlDocument xmlDoc, string timestamp, string nonce){var sRespData = "";//回复消息文本 var ToUserName = xmlDoc.DocumentElement.SelectSingleNode("ToUserName").InnerText;var FromUserName = xmlDoc.DocumentElement.SelectSingleNode("FromUserName").InnerText;var CreateTime = xmlDoc.DocumentElement.SelectSingleNode("CreateTime").InnerText;var MsgType = xmlDoc.DocumentElement.SelectSingleNode("MsgType").InnerText;//消息类型if (MsgType != "event")//事件类型消息{return null;}var Event = xmlDoc.DocumentElement.SelectSingleNode("Event").InnerText;//事件类型if (Event != "click")//点击事件{return null;}var EventKey = xmlDoc.DocumentElement.SelectSingleNode("EventKey").InnerText;//点击事件值//获取图片的媒体idstring media_id = powerBIHelper.getMedia_idByTaskId(EventKey);if (!string.IsNullOrEmpty(media_id)){sRespData = $@"<xml><ToUserName><![CDATA[{ToUserName}]]></ToUserName><FromUserName><![CDATA[{FromUserName}]]></FromUserName> <CreateTime>{CreateTime}</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[{media_id}]]></MediaId></Image></xml>";}else{//查不到报表sRespData = $@"<xml><ToUserName><![CDATA[{ToUserName}]]></ToUserName><FromUserName><![CDATA[{FromUserName}]]></FromUserName> <CreateTime>{CreateTime}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[没有查询到报表哦!如有问题可以联系开发人员]]></Content></xml>";}//加密并返回return wx.EncryptMsg(timestamp, nonce, sRespData);}

更多消息格式请参考企业微信官方文档

如果在post接收企业微信消息时出现415错误,可以尝试在WebApiConfig文件中加上如下代码

var formatter = GlobalConfiguration.Configuration.Formatters.Where(f => f is System.Net.Http.Formatting.JsonMediaTypeFormatter).FirstOrDefault();if (!formatter.SupportedMediaTypes.Any(mt => mt.MediaType == "text/xml"))formatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));config.Formatters.Add(formatter);

.NET开发企业微信应用接收用户消息相关推荐

  1. 《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第3章,第3.1节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第3章 基 础 ...

  2. nodejs 开发企业微信第三方应用入门教程

    最近公司要开发企业微信端的 Worktile,以前做的是企业微信内部应用,所以只适用于私有部署客户,而对于公有云客户就无法使用.所有本文就准备开发企业微信的第三方应用,主要介绍在调研阶段遇到的山珍海味 ...

  3. Nodejs版本的企业微信中接收消息与腾讯对接之验证URL 代码已经上传,可以去下载

    1 当我们开发企业微信中的消息推送的时候,如果要接收来自用户的信息,需要提供一个接收消息的服务器地址来对接,如果使用nodejs来开发的话,按照文档说明,你可能不会成功.下面总结下我自己的步骤,已经成 ...

  4. AWS Lambda 开发企业微信消息机器人

    AWS Lambda 开发企业微信消息机器人 实验介绍 本次实验中,我们将了解 AWS Lambda 的常见应用场景,并使用 AWS Lambda 构建能够定时将空气质量数据推送到企业微信的消息机器人 ...

  5. vue php企业站案例,vue 开发企业微信整合案例分析

    本文实例讲述了vue 开发企业微信整合.分享给大家供大家参考,具体如下: 概述 手机端程序可以和企业微信进行整合,我们也可以使用企业微信JSSDK功能,实现一些原生的功能. 整合步骤 在整合之前需要阅 ...

  6. 如何用邮件(微信)接收交易信号?

    问:人在外地,仿真策略刚出信号,我能够接收到吗? 掘金小Q:谢邀,当然可以.不过电话和短信通知,通常都是收费的,用邮件或微信来通知信息就显得性价比很高了.阅读下文,教你如何快速实现邮件(微信)接收交易 ...

  7. 如何禁止PC端微信自动接收视频附件(不适用于3.7.0.29以后版本)

    因为工作环境的原因,不想电脑端微信自动接收聊天中的视频,怎么办呢? 旧版本中PC微信,这些内容都是存在用户名\FileStorage\Video下的,只要把这个目录设置成只读就可以了 据观察,新版本的 ...

  8. 实现个人微信同时接收企业号消息

    1.用户通过微信扫 企业号后台微信插件页面的二维码方式,关注的企业号.在联系人中可以找到对应企业号,可以实现在个人微信中访问企业号中可见应用. 2.在客户端企业微信app中设置,关闭只在企业微信中接收 ...

  9. 微信收到消息很慢无法连接服务器,微信消息接收出现延迟?教你这样设置,问题立马得到解决...

    原标题:微信消息接收出现延迟?教你这样设置,问题立马得到解决 微信是大家日常生活工作中主要交流工具,可以说微信的出现在改变交流方式的同时,也方便了大家.但是近期有网友反应,微信出现信息接收延迟的现象, ...

  10. 手机微信里面接收好友的文档怎么打印

    在手机中安装的软件,使用频率较高的就是微信,微信不仅可以用于日常的工作交流,同时还可以传输一些文档.图片.文件等进行共享,而且手机微信中接收到的文档,大家还可以选择到打印店去打印. 考虑到现在大家的工 ...

最新文章

  1. 基于Proxy的小程序状态管理
  2. 每日一皮:没想到现实比赛里也能和拳皇一样蓄力攻击...
  3. 《剑指offer》从尾到头打印链表
  4. NoClassDefFoundError: org/apache/flink/streaming/api/datastream/DataStream一例解决
  5. 三维重建 几何方法 深度学习_基于深度学习的视觉三维重建研究总结
  6. typescript 使用_如何使用TypeScript轻松修改Minecraft
  7. 职称计算机考试有哪些题,职称计算机考试判断复习题「有答案」
  8. linux root所在目录,Linux下误删root目录
  9. ERP项目实施记录05
  10. 模板类成员函数特例化写法
  11. 设计模式笔记(15)---命令模式(行为型)
  12. termux安装渗透工具一
  13. 2021.1.19上海冬令营day2
  14. window7系统电脑屏幕亮度调节
  15. 应用程序编程接口大全_应用程序编程接口101
  16. sass基础操作记录
  17. linux安装activeMQ 5.16 以及集群环境
  18. 4月以来北京,上海,广州,深圳,杭州Java程序员涨工资400倒500,南京涨了800元
  19. SSH Tunnel 使用
  20. R语言进行多重样本t检验代码问题

热门文章

  1. PnetLab添加自己制作的镜像
  2. android+背景图片不显示,手机端背景图片在安卓不显示ios就可以显示
  3. 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 5 栈
  4. 申宝优配-股指震荡上行创新高
  5. 「亲测可用」Adobe Camera Raw 16 for win/mac 官方下载
  6. Java基础--多线程(上)
  7. 移动支付的类型及运行模式
  8. eclipse无法build project 编译项目或者类的解决方法
  9. leetcode---生命游戏
  10. python统计单词频率、存放在字典中_词频统计(python)