在企业开发中,经常会碰到一些消息要及时推送到企业员工的手中。so 下面来说怎么向企业微信中的员工发消息。

本人只是记录下开发过程,详细参考https://work.weixin.qq.com/api/

1.准备

注册企业微信公司

获取企业ID

新开企业微信应用

获取应用的Agentid,Secret

参考:https://work.weixin.qq.com/api/doc/90000/90135/90665

2.开发

应用支持推送文本、图片、视频、文件、图文等类型。以下以推送文本为例。

1)获取access_token

请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

ID :企业id

SECRET:应用的凭证密钥(Secret)

返回结果如下,我们需要记录access_token

{   "errcode": 0,   "errmsg": "ok",   "access_token": "3YY3ZRP-nl3s25idin-Qay5bOL5503uzqz45OKFtd7R1E8AE40I3paB8v7wzeWucH8nS9y-95eJzivzEbRKHgBurmAwPZ6AkU4mDuiXSSl5S8v6Keal3_MRF5BxheLRfEThR5LFBFOE9PZluB4Z_JvdRUluNfWKKCqMUL0xwAnJ1bs2OuDVsdLeMiO5hQcl94diHsENz2O1T3_C5WRvp1w",   "expires_in": 7200}

注:access_token的有效期大概2小时左右。每天获取access_token的次数也是有限的(大概200次左右)

所以下面可以写个公共类

WechatService.java

@Servicepublic class WechatService{    private static org.apache.log4j.Logger logger = Logger.getLogger(WechatService.class);    RestTemplate client = new RestTemplate();    private RestTemplate restTemplate = RestTemplateUtil.getInstance();    private static AccessToken at ;    @Value("${appId}")    private String appId;    @Value("${appSecret}")    private String appSecret;    //向外暴露获取accessToken    public String getAccessToken() {        if(at==null||at.isExpired()){            getToken();        }        if(at!=null){            return at.getAccessToken();        }        return null;    }    //私有    private void getToken(){        String accessTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+appId+ "&corpsecret="+appSecret;        logger.debug("URL for getting accessToken accessTokenUrl="+accessTokenUrl);        Map rtnMap = restTemplate.getForObject(accessTokenUrl, Map.class);        if(rtnMap!=null){            Integer errcode = (Integer)rtnMap.get("errcode");            logger.debug("GETToken errcode:"+errcode);            if(errcode==0){                String accessToken = (String)rtnMap.get("access_token");                logger.debug("accessToken:"+accessToken);                Integer expiresIn = (Integer)rtnMap.get("expires_in");                //创建token对象,并保存                at = new AccessToken(accessToken, expiresIn);            }        }    }}

RestTemplateUtil.java

public class RestTemplateUtil {    public static RestTemplate getInstance() {        RestTemplate restTemplate = new RestTemplate();        restTemplate.getMessageConverters().add(new WxConverter());        return restTemplate;    }}

WxConverter.java

public class WxConverter extends MappingJackson2HttpMessageConverter {    public WxConverter(){        List mediaTypes = new ArrayList<>();        mediaTypes.add(MediaType.TEXT_PLAIN);        mediaTypes.add(MediaType.TEXT_HTML);        setSupportedMediaTypes(mediaTypes);    }}

AccessToken.java

public class AccessToken {    private String accessToken;//token    private Long expiresTime;//过期时间 时间戳    public String getAccessToken() {        return accessToken;    }    public void setAccessToken(String accessToken) {        this.accessToken = accessToken;    }    public Long getExpiresTime() {        return expiresTime;    }    public void setExpiresTime(Long expiresTime) {        this.expiresTime = expiresTime;    }    public AccessToken(String accessToken,Integer expiresIn){        super();        this.accessToken = accessToken;        this.expiresTime = System.currentTimeMillis()+expiresIn*1000;    }    /**     * 判断当前token是否过期     * @return     */    public Boolean isExpired(){        return System.currentTimeMillis()>expiresTime;    }}

以上的代码本人认为是比较麻烦的,so 全部记录下来了

2)发送消息正文

请求方式:POST(HTTPS)

请求地址:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

ACCESS_TOKEN是上面GET请求得到的

请求示例

{   "touser" : "UserID1|UserID2|UserID3",   "toparty" : "PartyID1|PartyID2",   "totag" : "TagID1 | TagID2",   "msgtype" : "text",   "agentid" : 1,   "text" : {       "content" : "第一次发送成功啦!"   },   "safe":0,   "enable_id_trans": 0,   "enable_duplicate_check": 0}

touser:发送的人,可多个

msgtype:类型

content:主题内容

......

其他不是必填字段,可以自己去看官方文档吧。

返回示例

 {   "errcode" : 0,   "errmsg" : "ok",   "invaliduser" : "userid1|userid2",   "invalidparty" : "partyid1|partyid2",   "invalidtag": "tagid1|tagid2" }

errcode:0 代表发送成功了

有些地方不是很详细,作为自己以后工作参考用。。。

还是建议大家多去官网看看API

文采不好,请多包涵

企业微信加密消息体_用企业微信小程序发送消息相关推荐

  1. axure小程序模板_公众号和小程序模板消息

    前言 今天和大家简单聊聊微信公众号和微信小程序的模板消息机制,大家在做微信小程序或者微信公众号消息通知的时候可以参考. 微信小程序 订阅消息 推送位置:服务通知 跳转能力:可以跳转到小程序页面 解释: ...

  2. java微信小程序发送消息

    首先参考文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subsc ...

  3. 小程序发送消息订阅报错{“errcode“:40003,“errmsg“:“invalid openid rid: 641bece8-5b5ed5f9-7c0705a8“}

    检查了accessToken跟openid 都是对的 为什么就是会报错呢??? 我们做的项目有两个小程序端 一个是患者端 一个是医护端 在患者端接口给医护端发送订阅消息  结果一直拿着患者端的open ...

  4. 小程序统一服务消息_微信团队发布小程序模板消息能力调整通知:小程序订阅消息接口正式上线...

    10月13日,微信团队发布了小程序模板消息能力调整通知.微信团队表示,此前的模板消息接口将停止使用,小程序订阅消息接口正式上线.据了解,新上线的小程序订阅消息,同时支持一次性和长期性订阅消息,用户可以 ...

  5. 微信小程序订阅消息推送(附带后台java代码)

    官方文档: 小程序前端:点击进入 小程序服务端:点击进入 一,代码实现(后端) ①定义实体类 package com.saic.fin.system.sendInfo;import lombok.Da ...

  6. 有赞“小程序订阅消息”功能上线 支持商家主动推送「活动通知」

    12月7日消息,有赞微商城"小程序订阅消息"功能正式上线,设置领券.订单.签到等多个场景的授权,并支持商家主动推送营销活动类「活动通知」给消费者.目前,此功能已支持食品.服饰鞋包. ...

  7. 企业微信加密消息体_加解密方案的详细说明

    关于加解密方案的详细说明 术语及说明 开启回调模式时,有以下术语需要了解: 1.msg_signature是签名,用于验证调用者的合法性.具体算法见以下'消息体签名'章节 2.EncodingAESK ...

  8. 企业微信 消息推送使用(新建应用、发送消息)

    1 新建应用 第一步,登录企业微信管理端. https://work.weixin.qq.com/nl/sem/registe?s=c&from=1014309098&bd_vid=7 ...

  9. php+实现群发微信模板消息_使用php实现微信小程序发送模板消息(附代码)

    本篇文章给大家带来的内容是关于使用php实现微信小程序发送模板消息(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本章将会简单说一下微信小程序的模板消息发送,相对来说比较简 ...

最新文章

  1. Python使用matplotlib可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Dendrogram)
  2. 普通平键的主要尺寸有_快来收下这份家装尺寸表,衣柜不再鸡肋
  3. 6001.Cacti监控华为S8512核心交换机多块板卡的CPU和内存
  4. Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au...
  5. linux关于禁用硬件xinput使用
  6. xmppframework for iOS client (一) XMPPFramework环境配置
  7. 2018--Linux命令总结整理复习版
  8. mysql 按月统计代码_SQL对数据进行按月统计或对数据进行按星期统计的实例代码...
  9. JS制作常见通知信息(适用于手机通知信息和电脑通知信息)
  10. [Leedcode][JAVA][第289题][生命游戏]
  11. 为什么Siri总是像个智障?智能助手背后的技术到底有多难?
  12. 【转载】关于RabbitMQ的高可用性
  13. Gradle初级使用教程
  14. Oracle 锁表问题查询处理
  15. 与合作伙伴合作,如何正确的“吵架”
  16. 金融工程中的蒙特卡罗方法
  17. bdd 启动 data processing进程报错 Can't locate LWP.pm in @INC
  18. 中国染料医用激光器行业市场供需与战略研究报告
  19. 使用mycat实现分库分表
  20. Java基础练习题2

热门文章

  1. 进入opencv内部函数调试
  2. 图像的旋转和尺度缩放在对数极坐标系下的研究
  3. Redis系列三、redis的五种数据结构和相关指令之Hash
  4. mac php errorlog,Mac下使用php的error_log()函数发送邮件
  5. java中final是修饰符么_Java final修饰符详解
  6. mysql 命令 _Mysql常用命令行大全
  7. 数学C语言编程,数学规划 (最速下降法,c语言编程).doc
  8. linux unix域socket_python3从零学习-5.8.1、socket—底层网络接口
  9. js br不生效_前端标注工具-AILabel.js
  10. 前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考