微信小程序发送订阅消息,服务端java代码

由于微信关闭了模版消息发送,所有改为订阅消息发送

微信小程序发送订阅消息,服务端java代码_第1张图片

首先先上官方文档

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html

发送订阅消息需要在小程序端先进行订阅,这里只是服务端代码

需要的实体类

SubscribeMessage.java
TemplateData.java


import java.util.Map;

/**
 * 订阅消息
 * @author  liangkesai
 * @email   [email protected]
 * @date    2020/1/7 10:57 
 */
public class SubscribeMessage {
    //接口调用凭证
    private String access_token;
    //接收者(用户)的 openid
    private String touser;
    //所需下发的订阅模板id
    private String template_id;
    //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
    private String page;
    //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
    private Map data;

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public String getTouser() {
        return touser;
    }

    public void setTouser(String touser) {
        this.touser = touser;
    }

    public String getTemplate_id() {
        return template_id;
    }

    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public Map getData() {
        return data;
    }

    public void setData(Map data) {
        this.data = data;
    }
}

 



/**
 * @author  liangkesai
 * @email   [email protected]
 * @date    2020/1/7 10:58 
 */
public class TemplateData {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public TemplateData(String value) {
        this.value = value;
    }

}

具体发送方法,获取AccessToken和sendPost就不在这里写了,我的其它文章中有

    /**
     * 发送订阅消息sendTemplateMessage
     * 小程序订阅消息,发送服务通知
     *
     * @param touser     接收者(用户)的 openid
     * @param templateId 所需下发的模板消息的id
     * @param page       点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
     */
    public static void subscribeMessage(String touser, String templateId, String page, Map map) {
//        String accessToken = GetTokenUtil.getAccessToken();
//        log.info("##accessToken:  " + accessToken);
        String accessToken = "29_ZtkUnQ9Ebt7pwqRsqqO1zuAhYWT48Bx5cSkfI7OTYXFc9ZB8d7K7gTYVFpXLaBwkCzHERFzV0lTay895TtepA9GescOmSMHTyOmpjemiXPqNXGuz6KBdMy0oJGUk8GvvY3S86R1sw9Gljjx6QTGaAFAFIV";
        SubscribeMessage subscribeMessage = new SubscribeMessage();
        //拼接数据
        subscribeMessage.setAccess_token(accessToken);
        subscribeMessage.setTouser(touser);
        subscribeMessage.setTemplate_id(templateId);
        subscribeMessage.setPage(page);
        subscribeMessage.setData(map);
        String json = JSONObject.toJSONString(subscribeMessage);
        log.info("##订阅发送JSON数据请求:  " + json);
        String ret = UrlUtils.sendPost(Wechat.SUBSCRIBEMESSAGE + accessToken, json);
        //如果不想找sendPost,可以借用Unirest 来发送 2选1 引的jar放在最下方了
//        JsonNode ret = null;
//        try {
//            ret = Unirest.post(Wechat.SUBSCRIBEMESSAGE + accessToken).body(json).asJson().getBody();
//        } catch (UnirestException e) {
//            e.printStackTrace();
//        }

        log.info("##订阅发送JSON数据返回:  " + ret);
        System.out.println(ret);
    }

使用Unirest发送需要引的jar



    com.mashape.unirest
    unirest-java
    1.4.9

 

测试

    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("thing4", new TemplateData("这是一个打卡名称2"));
        map.put("time2", new TemplateData("18:00"));
        map.put("thing6", new TemplateData("101次"));
        map.put("thing3", new TemplateData("大兴区北京印刷学院"));
        subscribeMessage("*****", Wechat.CLOCK_NOTICE_TEMPLATEID, "pages/*******", map);
    }

有问题欢迎指正。

你可能感兴趣的:(java,小程序通知,订阅消息,模版消息,小程序服务通知)