c#微信企业号开发之消息推送
最近刚学习了微信企业号推送消息方面的开发,做个小总结记录一下~废话不多说,上干货!
准备阶段
首先你需要一个企业号,因为推送消息的接口需要使用企业号的一些信息,可以从这个网址直接申请,在这里就不赘述啦~
点我申请企业号
可以先看一下官方文档:https://work.weixin.qq.com/api/doc#90000/90003/90556
实现应用推送消息
发送消息的类型有很多种,以下以发送文本卡片消息为例,可以根据自己需求进行调整
可以把企业id、应用id跟应用秘钥放在配置文件里
<!--企业号id--><add key="CorpId" value="企业id"/><!--企业号消息推送配置信息--><add key="Secret" value="推送消息应用的secret"/><add key="agentId" value="应用id"/>
首先我们需要准备一个发送消息类
public class PushMessageModel{/// <summary>/// 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个) 特殊情况:指定为@all,则向关注该企业的全部成员发送/// </summary>public string touser { get; set; }/// <summary>/// 部门ID列表,多个接收者用‘|’分隔,最多支持100个,当touser为@all忽略本参数/// </summary>public string toparty { get; set; }/// <summary>/// 标签ID列表,多个接收者用‘|’分隔,最多支持100个,当touser为@all忽略本参数/// </summary>public string totag { get; set; }/// <summary>/// 消息类型/// </summary>public string msgtype { get; set; }/// <summary>/// 企业应用ID,整型,可在应用设置页面查看/// </summary>public string agentid { get; set; }/// <summary>/// 表示是否开启id转译,0表示否,1表示是,默认0/// </summary>public string enable_id_trans { get; set; }/// <summary>/// 表示是否开启重复消息检查,0表示否,1表示是,默认0/// </summary>public string enable_duplicate_check { get; set; }/// <summary>/// 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时/// </summary>public string duplicate_check_interval { get; set; }#region 发送文本卡片消息/// <summary>/// 标题,不超过128个字节,超过会自动截断/// </summary>public string title { get; set; }/// <summary>/// 描述,不超过512个字节,超过会自动截断/// </summary>public string description { get; set; }/// <summary>/// 点击后跳转的链接/// </summary>public string url { get; set; }/// <summary>/// 按钮文字,默认为“详情”,不超过四个文字,超过自动截断/// </summary>public string btntxt { get; set; }#endregion 发送文本卡片消息
一个返回token参数类
public class TokenResultModel{//出错返回码,为0表示成功,非0表示调用失败public string errcode { get; set; }//返回码提示语public string errmsg { get; set; }获取到的凭证,最长为512字节public string access_token { get; set; }//凭证的有效时间(秒)public string expires_in { get; set; }}
一个返回推送信息类,主要是用来处理返回值
public class MessageResultModel{/// <summary>/// 出错返回码,为0表示成功,非0表示调用失败/// </summary>public string errcode { get; set; }/// <summary>/// 返回码提示语/// </summary>public string errmsg { get; set; }public string invaliduser { get; set; } }
然后就是实现发送消息啦~这里数据我是直接写死,一开始只是想实现推送消息没有联系到业务,为了方便测试直接写在一般处理程序里,可以直接发布调用测试,大家也可以根据业务需求灵活使用
#region 发送消息public string SendMessages(HttpContext context){string msg = "";string agentid = ConfigurationManager.AppSettings["agentId"];PushMessageModel model = new PushMessageModel();PushMeaaageBLL bll = new PushMeaaageBLL();model.touser = "@all";//成员id列表model.agentid = agentid;//应用idmodel.msgtype = "textcard";model.duplicate_check_interval = "";//检测重复消息时间间隔model.enable_duplicate_check = "";//是否开启重复消息model.enable_id_trans = "";//是否开启id转义model.title = "1111111";model.description = "22222222";model.url = "url";model.btntxt = "";string token = AccessToken(context);if (!string.IsNullOrEmpty(token)){MessageResultModel result = bll.Send(model, token);msg = "{'msg':" + result.errmsg + ",'code':" + result.errcode + "}";}else{msg = "未获取到token";}return msg;}#endregion 发送消息#region 获取access_token/// <summary>/// 获取access_token/// </summary>public string AccessToken(HttpContext context){string access_token = string.Empty;string corpid = ConfigurationManager.AppSettings["CorpId"];string secret = ConfigurationManager.AppSettings["Secret"];access_token = GetToken.ReturnToken(corpid, secret, context);return access_token;}
获取token类
public class GetToken{#region 根据属性获取json值/// <summary>/// 根据属性获取值(仅适用于获取token返回的json)/// </summary>/// <param name="str">json字符串</param>/// <param name="key">属性</param>/// <returns></returns>public static string GetJsonValue(string str, string key){JavaScriptSerializer Serializer = new JavaScriptSerializer();TokenResultModel model = Serializer.Deserialize<TokenResultModel>(str);switch (key){case "errcode":return model.errcode;case "errmsg":return model.errmsg;case "access_token":return model.access_token;case "expires_in":return model.expires_in.ToString();default:return "";}}#endregion#region 获取Token/// <summary>/// 获取Token/// </summary>/// <param name="corpid">企业id</param>/// <param name="secret">应用的凭证密钥</param>/// <param name="context"></param>/// <returns></returns>public static string ReturnToken(string corpid, string secret, HttpContext context){string url =string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", corpid,secret);string strJson = HttpRequestRseult.GetResult(url);//context.Session["time"] = DateTime.Now;string token = GetJsonValue(strJson, "access_token");//context.Session["access_token"] = token;//context.Session.Timeout = 121;return token;}#endregion}
}
实现发送消息类
public class PushMeaaageBLL{/// <summary>/// 发送消息/// </summary>/// <param name="model"></param>/// <param name="token"></param>/// <returns></returns>public MessageResultModel Send(PushMessageModel model,string token){string url =string.Format("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}", token);string postData = SendMessageParameter(model);string result = HttpRequestRseult.GetResult(url,postData);JavaScriptSerializer Serializer = new JavaScriptSerializer();MessageResultModel resultModel = Serializer.Deserialize<MessageResultModel>(result);return resultModel;}/// <summary>/// 格式化发送消息参数/// </summary>/// <param name="model"></param>/// <returns></returns>public string SendMessageParameter(PushMessageModel model){string touser =model.touser;string toparty = model.toparty;string totag = model.totag;string msgtype = model.msgtype;string agentid = model.agentid;string enable_id_trans = model.enable_id_trans;string enable_duplicate_check = model.enable_duplicate_check;string duplicate_check_interval = model.duplicate_check_interval;string title = model.title;string description = model.description;string url =model.url;string btntxt = model.btntxt;string message = "{\"title\":\"" + title + "\",\"description\":\"" + description + "\",\"url\":\"" + url + "\",\"btntxt\":\"" + btntxt + "\"}";string postData = "{\"touser\":\"" + touser + "\",\"toparty\":\"" + toparty + "\",\"totag\":\"" + totag + "\",\"msgtype\":\"" + msgtype + "\",\"agentid\":\"" + agentid + "\",\"textcard\":" + message + ",\"enable_id_trans\":\"" + enable_id_trans + "\",\"enable_duplicate_check\":\"" + enable_duplicate_check + "\"}";return postData;}}
好啦~我们的消息此时就已经推送成功了!
大家如果还有什么疑问欢迎评论区讨论,或者还有什么好的建议也可以写下来,大家一起交流一起进步~还请多多指教
c#微信企业号开发之消息推送相关推荐
- 微信企业号下的消息推送接口
一般在微信企业号下做软件开发,基本都会用到消息推送,用户在完成一个操作之后,会在企业号中推送一条消息,这条消息可能是文本.图文等不同类型,在具有审批流程的消息推送中,下一级人员审批完成会给上一级推送一 ...
- 小程序云开发之消息推送功能
小程序云开发之消息推送功能(图文) 一:新建项目 APPID获取方法:1.在微信公众平台上注册账号,选择小程序(也可以从服务号注册,前提你有一个服务号)注册后登录,登录时微信扫码验证一下 2.填写小程 ...
- iOS开发之消息推送 —— 远程消息推送入门
每次看到iOS的远程消息推送,总是感觉很头大,即便后来项目都做完了,还是觉得摸不着远程推送的脉门,网上介绍的资料虽多,但不是写的太简单了,就是写的太详细了,不能一下抓住要点,今天终于能够抽出点时间,来 ...
- JAVA对接企业微信,实现文本消息推送
对接企业微信,实现文本消息推送,可分为以下两部: 1.根据企业ID+应用的凭证密钥,获取Token 2.根据Token+要传输的body,实现文本消息推送 1.根据企业ID+应用的凭证密钥,获取Tok ...
- android开发之消息推送
本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...
- 微信公众号开发(消息推送)
文章目录 微信公众号开发 运行效果 微信公众号简介 注册微信公众号 注册测试公众号 搭建微信本地调试环境 微信公众号接入(校验签名) 给指定用户推送消息 网页授权获取用户openid 给指定用户发送模 ...
- Nodejs + express 开发微信公众号模板消息推送功能
第一步:申请测试号 1.打开微信测试号申请平台 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.点击"登录&q ...
- 微信企业号开发:接收消息和事件
接收到的消息和事件,其实都是微信post到我们配置的URL的消息.接收普通消息就是用户给公众号发送的消息,事件是由于用户的特定操作,微信post给我们的消息.被动响应消息是我们收到微信post过来的普 ...
- java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...
我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...
- 【微信小程序】消息推送服务器配置及服务器域名配置(记录坑)
我最近想在微信小程序推送通知,于是开始学怎么弄模板消息. 首先要配置服务器域名和消息推送配置. 先配置服务器域名吧,这个简单. 配置服务器域名 首先进入小程序后台>>开发>>开 ...
最新文章
- 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
- LINUX分区空间扩容操作
- python脚本实例手机端-python链接手机用Python实现命令行闹钟脚本实例
- 基于GRU和am-softmax的句子相似度模型 | 附代码实现
- [vue-cli]怎么使用vue-cli3创建一个项目?
- 论文浅尝 - ICLR2020 | 知识图谱中数值规则的可微学习
- L325 如何睡觉
- 使用layer 实现点击 显示大图
- php 四叉树quadtree,线性四叉树十进制编码原理 四叉树(Quadtrees)一共有多少种?...
- 【“科大讯飞杯”第十七届同济大学】A 张老师和菜哭武的游戏
- 极米发布极光RS Pro、H3、Z8X三款新品
- 什么是绩效点、奖励加分、处罚扣分
- c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统
- Linux LCD 驱动
- OpenCV-图像色温
- 与黑客讨价还价,勒索攻击企业数据是关键
- Streams AQ: qmn coordinator waiting for slave to start
- 免费看小说,国产浏览器出手了,吊打各类阅读软件
- 数组按照中文名称排序
- JavaScript的内存作用域闭包