用企业微信小程序发送消息[通俗易懂]

小程序 (72) 2023-07-17 18:12

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

文采不好,请多包涵

用企业微信小程序发送消息[通俗易懂]_https://bianchenghao6.com/blog_小程序_第1张

发表回复