最近刚学习了微信企业号推送消息方面的开发,做个小总结记录一下~废话不多说,上干货!

准备阶段

首先你需要一个企业号,因为推送消息的接口需要使用企业号的一些信息,可以从这个网址直接申请,在这里就不赘述啦~

点我申请企业号

可以先看一下官方文档:https://work.weixin.qq.com/api/doc#90000/90003/90556

实现消息的推送就需要调用微信的接口,下图是从官方api上截的图,已经说的很明白了,由此可以看出要想推送消息,首先我们需要获取access_token

获取access_token需要两个参数,大家要注意一下每日调用接口是有次数限制的,具体大家可以根据自己情况去官方文档的附录上去查看,每获取一次access_token有效期是两个小时
在企业号管理后台可以看到企业ID,即corpid,企业的唯一标识(用来获取access_token)


在应用管理中,点击要推送消息的应用,可以获取到agentid即应用id(用来发送消息)和secret(用来获取access_token)

好了~我们需要准备的都在这里啦,接下来就是要动手实践啦!

实现应用推送消息

发送消息的类型有很多种,以下以发送文本卡片消息为例,可以根据自己需求进行调整

可以把企业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#微信企业号开发之消息推送相关推荐

  1. 微信企业号下的消息推送接口

    一般在微信企业号下做软件开发,基本都会用到消息推送,用户在完成一个操作之后,会在企业号中推送一条消息,这条消息可能是文本.图文等不同类型,在具有审批流程的消息推送中,下一级人员审批完成会给上一级推送一 ...

  2. 小程序云开发之消息推送功能

    小程序云开发之消息推送功能(图文) 一:新建项目 APPID获取方法:1.在微信公众平台上注册账号,选择小程序(也可以从服务号注册,前提你有一个服务号)注册后登录,登录时微信扫码验证一下 2.填写小程 ...

  3. iOS开发之消息推送 —— 远程消息推送入门

    每次看到iOS的远程消息推送,总是感觉很头大,即便后来项目都做完了,还是觉得摸不着远程推送的脉门,网上介绍的资料虽多,但不是写的太简单了,就是写的太详细了,不能一下抓住要点,今天终于能够抽出点时间,来 ...

  4. JAVA对接企业微信,实现文本消息推送

    对接企业微信,实现文本消息推送,可分为以下两部: 1.根据企业ID+应用的凭证密钥,获取Token 2.根据Token+要传输的body,实现文本消息推送 1.根据企业ID+应用的凭证密钥,获取Tok ...

  5. android开发之消息推送

    本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...

  6. 微信公众号开发(消息推送)

    文章目录 微信公众号开发 运行效果 微信公众号简介 注册微信公众号 注册测试公众号 搭建微信本地调试环境 微信公众号接入(校验签名) 给指定用户推送消息 网页授权获取用户openid 给指定用户发送模 ...

  7. Nodejs + express 开发微信公众号模板消息推送功能

    第一步:申请测试号 1.打开微信测试号申请平台 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.点击"登录&q ...

  8. 微信企业号开发:接收消息和事件

    接收到的消息和事件,其实都是微信post到我们配置的URL的消息.接收普通消息就是用户给公众号发送的消息,事件是由于用户的特定操作,微信post给我们的消息.被动响应消息是我们收到微信post过来的普 ...

  9. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

  10. 【微信小程序】消息推送服务器配置及服务器域名配置(记录坑)

    我最近想在微信小程序推送通知,于是开始学怎么弄模板消息. 首先要配置服务器域名和消息推送配置. 先配置服务器域名吧,这个简单. 配置服务器域名 首先进入小程序后台>>开发>>开 ...

最新文章

  1. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
  2. LINUX分区空间扩容操作
  3. python脚本实例手机端-python链接手机用Python实现命令行闹钟脚本实例
  4. 基于GRU和am-softmax的句子相似度模型 | 附代码实现
  5. [vue-cli]怎么使用vue-cli3创建一个项目?
  6. 论文浅尝 - ICLR2020 | 知识图谱中数值规则的可微学习
  7. L325 如何睡觉
  8. 使用layer 实现点击 显示大图
  9. php 四叉树quadtree,线性四叉树十进制编码原理 四叉树(Quadtrees)一共有多少种?...
  10. 【“科大讯飞杯”第十七届同济大学】A 张老师和菜哭武的游戏
  11. 极米发布极光RS Pro、H3、Z8X三款新品
  12. 什么是绩效点、奖励加分、处罚扣分
  13. c语言课程设计查找分数与删除元素,c语言课程设计学生成绩管理系统
  14. Linux LCD 驱动
  15. OpenCV-图像色温
  16. 与黑客讨价还价,勒索攻击企业数据是关键
  17. Streams AQ: qmn coordinator waiting for slave to start
  18. 免费看小说,国产浏览器出手了,吊打各类阅读软件
  19. 数组按照中文名称排序
  20. JavaScript的内存作用域闭包

热门文章

  1. canvas火焰效果
  2. JavaScript blog式日历控件
  3. 360怎样修改wifi服务器,360路由器怎么设置无线网络
  4. Oracle Toad 导数,麒峰
  5. 弘辽科技:拼多多新店推广的5个方法是什么?怎么推广?
  6. OSPF协议总结5(六种LSA)
  7. 鸡得呼吸道病会易发啥病 鸡喂什么药预防打喷嚏
  8. 网站网页不能正常显示图片或显示不完整的原因
  9. 移动端300ms延迟_移动端300ms延迟原因及解决方案
  10. openstack常用命令