微信小程序中发送一次性订阅消息和设备长期订阅消息

1 发送一次性订阅消息代码

 /**
     * 发送一次性订阅消息
     */
    public static String sendWxAppMessage(String openId, String templateId, JSONObject json, String jumpAddress) {
        String url = Constants.WECHAT_GET_TOKEN + Constants.WECHAT_APPID + appId + Constants.WECHAT_SECRET + secret;
        String access_token = "";
        String code = "";
        try (Response response = OkHttpUtil.get(url)) {
            log.info("接口调用凭证:response=" + response.toString());
            if (response.isSuccessful()) {
                JSONObject resData = JSON.parseObject(response.body().string());
                Integer errcode = resData.getInteger("errcode");
                if (errcode == null || errcode == 0) {
                    access_token = resData.getString("access_token");
                    if (StringUtils.isNotEmpty(access_token)) {
                        log.info("接口调用凭证:access_token =" + access_token);
                        String sendUrl = Constants.WECHAT_SEND + access_token;
                        JSONObject param = new JSONObject();
                        param.put("touser", openId);
                        param.put("template_id", templateId);
                        param.put("page", jumpAddress);
                        param.put("miniprogram_state", "trial");
                        param.put("lang", "zh_CN");
                        param.put("data", json);
                        log.info("请求参数:" + param);
                        Response msgResponse = OkHttpUtil.postJson(sendUrl, null, param.toJSONString());
                        JSONObject msgJson = JSONObject.parseObject(msgResponse.body().string());
                        code = msgJson.getString("errcode");
                        log.info("返回结果:" + code);
                    }
                } else {
                    log.error("获取token失败:errcode = " + errcode);
                    return errcode.toString();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return code;
    }

2 设备订阅消息推送

2.1 官方文档:小程序设备消息 | 微信开放文档

2.2 具体代码

/**
     * @description:
     * @param: openIds 小程序openid集合
     * templateId  消息模板id
     * modelId  设备modelId
     * data     消息模板数据
     * sn       设备sn码
     */
    public static String sendWxAppDeviceMessage(List<String> openIds, String templateId, String modelId, Object data, String sn) {
        //获取access_token
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=?&secret=?";
        String access_token = "";
        String code = "";
        try (Response response = OkHttpUtil.get(url)) {
            log.info("接口调用凭证:response=" + response.toString());
            if (response.isSuccessful()) {
                JSONObject resData = JSON.parseObject(response.body().string());
                Integer errcode = resData.getInteger("errcode");
                if (errcode == null || errcode == 0) {
                    access_token = resData.getString("access_token");
                    log.info("token:" + access_token);
                    String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/device/subscribe/send?access_token=" + access_token;
                    JSONObject param = new JSONObject();
                    param.put("template_id", templateId);
                    param.put("sn", sn); 
                    //param.put("page","");
                    param.put("to_openid_list", openIds);
                    param.put("modelId", modelId);
                    param.put("data", data);
                    param.put("lang", "zh_CN");
                    Response msgResponse = OkHttpUtil.postJson(sendUrl, null, param.toJSONString());
                    JSONObject msgJson = JSONObject.parseObject(msgResponse.body().string());
                    log.info("返回结果:" + msgJson);
                    return "success";
                } else {
                    log.error("获取token失败:errcode = " + errcode);

                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

    /**
     * 获取设备票据
     */
    public static AjaxResult getSnTicket(String modelId, String sn) {
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=?&secret=?";
        String access_token = "";
        try (Response response = OkHttpUtil.get(url)) {
            log.info("接口调用凭证:response=" + response.toString());
            if (response.isSuccessful()) {
                JSONObject resData = JSON.parseObject(response.body().string());
                Integer errcode = resData.getInteger("errcode");
                if (errcode == null || errcode == 0) {
                    access_token = resData.getString("access_token");
                    String sendUrl = "https://api.weixin.qq.com/wxa/getsnticket?access_token=" + access_token;
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("sn", sn);
                    jsonObject.put("model_id", modelId);
                    Response msgResponse = OkHttpUtil.postJson(sendUrl, null, jsonObject.toJSONString());
                    JSONObject msgJson = JSONObject.parseObject(msgResponse.body().string());
                    if (msgJson.getString("errcode").equals("0")) {
                        return AjaxResult.success(msgJson.getString("sn_ticket"));
                    }
                    return AjaxResult.error();
                }
            }
        } catch (Exception ignored) {

        }
        return AjaxResult.error();
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值