Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说用企业微信小程序发送消息[通俗易懂],希望能够帮助你!!!。
在企业开发中,经常会碰到一些消息要及时推送到企业员工的手中。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
@Service
public 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<String, Object> 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<MediaType> 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
文采不好,请多包涵