- 1,拿到用户的openid
- 2,获取access_token
- 3,调用小程序消息推送的接口
一,获取用户的openid
关于openid的获取百度一大堆方法,有兴趣的可以去查看一下,此处不在赘述。。。。。
二,获取access_token
关于access_token官方给出的解答如下
其实access_token就是小程序官方给我们提供的一个凭证,你要调用小程序官方的接口,就必须先拿到access_token
注意:grant_type是一个固定的值,只有appid和secret是需要我们填入的,这两个值在我们的小程序后台就可以拿到
话不多说,直接上代码
我这里用了springboot自带的RestTemplate来做网络请求。就是用RestTemplate来实现一个get请求
原代码:
//获取Access_Token public String getAccessToken() throws Exception{ RestTemplate restTemplate = new RestTemplate(); Map<String, String> params = new HashMap<>(); params.put("APPID", AppId); // params.put("APPSECRET", AppSecret); // ResponseEntity<String> responseEntity = restTemplate.getForEntity( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params); String body = responseEntity.getBody(); JSONObject object = JSON.parseObject(body); String Access_Token = object.getString("access_token"); String expires_in = object.getString("expires_in"); log.info("有效时长expires_in:" + expires_in); return Access_Token; }
注意点:
access_token是存在有效期的,先看官方解释
所以在获取到 access_token后可以存到数据库或者缓存中(推荐放到缓存中),之后用的时候直接判断是否超出2小时,超出后重新获取
通过上面两步就正式拿到access_token了,接下来就开始调用发送消息的接口,老规矩先看官方文档
上面的参数都是发送消息使用到的,模板id在小程序后台配置好模板后复制出来就可以了
推送消息代码如下
//发送订阅消息 private String push(String openid) throws Exception{ RestTemplate restTemplate = new RestTemplate(); //TODO 没有整合redis 每次获取最新的sendUrl String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken(); //拼接推送的模版 WxMssVo wxMssVo = new WxMssVo(); wxMssVo.setTouser(openid);//用户的openid wxMssVo.setTemplate_id("xxxxxxxxx");//订阅消息模板id wxMssVo.setPage("pages/index/index"); Map<String, TemplateData> m = new HashMap<>(); m.put("thing1", new TemplateData("审核通知")); wxMssVo.setData(m); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class); return responseEntity.getBody(); }
最后再把对应的两个封装了放到下面,至此推送消息的接口就全部完成
WxMssVo用来封装请求参数
package com.scanapp.fangguanerscanapp.entity; import lombok.Data; import java.util.Map; /** * @author zxy * @date 2021/10/11 * @description 封装请求微信参数 */ @Data public class WxMssVo { private String touser;//用户openid private String template_id;//订阅消息模版id private String page = "pages/index/index";//默认跳到小程序首页 private Map<String, TemplateData> data;//推送文字 }
TemplateData定义消息内容
package com.scanapp.fangguanerscanapp.entity; import lombok.Data; /** * @author zxy * @date 2021/10/11 * @description 定义消息内容 */ @Data public class TemplateData { private String value; public TemplateData(String value) { this.value = value; } }
END。。。。。。。。。