springboot实现小程序订阅消息推送

  • 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。。。。。。。。。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值