小程序统一服务消息_小程序订阅消息2

上次用的订阅消息,使用的是小程序的云函数。本次将使用原生的https发送订阅消息。使用场景是:在考试建立好了之后,跟参加考试的人员发送提醒其需要参加考试的微信订阅消息。废话不说,现在后台管理界面,增加一个按钮,专门用来发送订阅消息。

7be86d03e6709abfe47d43ce376ccb7c.png

前端代码如下:

list.vue

 "mini"  // 发送提醒方法  pushPaper (row) {      let _this = this      examPaperApi.pushPaper(row.id).then(re => {        if (re.code === 1) {          _this.search()          _this.$message.success(re.message)        } else {          _this.$message.error(re.message)        }      })    }
                                               exampaper.js
pushPaper: id => post('/api/admin/send/wx/message/pushOneUser/' + id)
发送订阅消息三部曲:
  • 1,拿到用户的openid

  • 2,获取access_token

  • 3,调用小程序消息推送的接口

openid这个简单,在使用小程序的时候,登录进去就会默认把openid绑定到用户表中。根据试卷ID,即可查询到试卷所属的用户组。在用户组中,将所属于本组中的所有用户查询出来即可。然后轮流发送订阅消息。 access_token:可以通过微信官方通过的方法获取:

cc743795376a3f9c6282b0ac9271287a.png

    剩下最后一个就是调用小程序消息推送的接口了。

    后端代码如下所示:    先定义一个VO,用来发送微信消息
/* * 小程序推送所需数据 * dabenben * */ @Datapublic class WxMssVo {    private String touser;//用户openid    private String template_id;//订阅消息模版id    private String page = "pages/index/index";//默认跳到小程序首页    private Map<String, TemplateData> data;//推送文字   }

2、controller代码如下


/** * 作者:dabenben * 发送小程序订阅消息 */@RestController("AdminSendWxMessageController")@RequestMapping(value = "/api/admin/send/wx/message")@AllArgsConstructorpublic class SendWxMessageController extends BaseApiController {    private final ExamPaperService examPaperService;    private final UserService userService;    /*     * 发送订阅消息     * */    @RequestMapping(value = "/pushOneUser/{id}", method = RequestMethod.POST)    public RestResponse pushOneUser(@PathVariable Integer id) {        List userList=userService.selectByUserLevel(examPaperService.selectById(id).getGradeLevel());               for (User user: userList) {            if(null!=user.getWxOpenId()){                          push(user.getWxOpenId(),id);            }        }        return RestResponse.ok("发送成功!");    }    public String push(String openid,Integer examPaperId) {        RestTemplate restTemplate = new RestTemplate();        //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取)        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("TemplateId");//订阅消息模板id        wxMssVo.setPage("pages/index/index");        String PaperName=examPaperService.selectById(examPaperId).getName();        String renyuan=userService.selectByUserLevel(examPaperService.selectById(examPaperId).getGradeLevel()).get(0).getRealName();        Map<String, TemplateData> m = new HashMap<>();        m.put("thing1", new TemplateData("抓紧时间进入小程序,快要考试啦!"));        m.put("thing2", new TemplateData(PaperName));        m.put("thing15", new TemplateData("在线考试"));        m.put("thing16", new TemplateData(renyuan+"等相关人员"));        m.put("thing12", new TemplateData("请点击进入查看详情,如有问题请联系陈鹏!"));        wxMssVo.setData(m);        ResponseEntity<String> responseEntity =                restTemplate.postForEntity(url, wxMssVo, String.class);        return responseEntity.getBody();    }    /*     * 获取token     * */         @GetMapping("/getAccessToken")    public String getAccessToken() {        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 = JSONUtil.parseObj(body);        String Access_Token = object.getStr("access_token");        String expires_in = object.getStr("expires_in");        System.out.println("有效时长expires_in:" + expires_in);        return Access_Token;    }}
当然,微信的订阅消息模板,需要提前申请好,并且,订阅消息中的字段名称与你设置的字段名称需要一致。最后展示效果如下:1、需要点击订阅如下2条消息。

cdc991d9815ff14f5ad7910472b3becd.png2、后台点击发送消息后,

7be86d03e6709abfe47d43ce376ccb7c.png

3、手机端如下:

5c54458a2b6802f09c3dba3a7b5e7767.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值