微信开发:微信公众号给粉丝推送通知消息(模板消息)

329 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

1.获取模板

模版消息接口文档 mp.weixin.qq.com/advanced/tm…

从公共模板库选择模板加入自己的模板库,如下模板:

在这里插入图片描述

模板按照Json格式如下:

{
	"touser": "OPENID",
	"template_id": "ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
	"url": "http://weixin.qq.com/download",
	"topcolor": "#FF0000",
	"data": {
		"first": {
			"value": "xxx酒店,贵酒店有2张订单等待处理",
			"color": "#173177"
		},
		"unConfirmCount": {
			"value": "3",
			"color": "#173177"
		},
		"waitAuditCount": {
			"value": "2",
			"color": "#173177"
		},
		"todayCheckInCount": {
			"value": "4",
			"color": "#173177"
		},
		"remark": {
			"value": "为保证客人入住正常,请及时处理",
			"color": "#173177"
		}
	}
}

post请求

api.weixin.qq.com/cgi-bin/mes…

2.获取ACCESS_TOKEN

查看微信开发文档

developers.weixin.qq.com/doc/offiacc…

get请求获取token:

api.weixin.qq.com/cgi-bin/tok… 在这里插入图片描述

3.开发

Idea安装GsonFormatPlus插件

在这里插入图片描述

新建MessageTemplate,鼠标放在类中

在这里插入图片描述

按下Alt+s键,弹出GsonFormatPlus框,把消息模板对应的Json内容复制到左侧框中

在这里插入图片描述

点击ok

在这里插入图片描述

再点击OK 模板类就生成了。

import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@Data
public class MessageTemplate {

    private String touser;
    private String template_id;
    private String url;
    private String topcolor;
    private DataDTO data;

    @NoArgsConstructor
    @Data
    public static class DataDTO {
        private FirstDTO first;
        private UnConfirmCountDTO unConfirmCount;
        private WaitAuditCountDTO waitAuditCount;
        private TodayCheckInCountDTO todayCheckInCount;
        private RemarkDTO remark;

        @NoArgsConstructor
        @Data
        public static class FirstDTO {
            private String value;
            private String color;
        }

        @NoArgsConstructor
        @Data
        public static class UnConfirmCountDTO {
            private String value;
            private String color;
        }

        @NoArgsConstructor
        @Data
        public static class WaitAuditCountDTO {
            private String value;
            private String color;
        }

        @NoArgsConstructor
        @Data
        public static class TodayCheckInCountDTO {
            private String value;
            private String color;
        }

        @NoArgsConstructor
        @Data
        public static class RemarkDTO {
            private String value;
            private String color;
        }
    }
}

测试demo

import com.fasterxml.jackson.databind.JsonNode;
import org.springblade.core.http.HttpRequest;
import org.springblade.core.tool.jackson.JsonUtil;

public class SendWebChatMessage {
    public static void main(String[] args) {
        String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";    //get请求
        String grant_type = "client_credential";
        String appid = "wx3dc8b956af234fxx";
        String secret = "2d3820b8cc2d29ef265722xxcb759exx";
        //获取token
        StringBuilder sb = new StringBuilder();
        sb.append(tokenUrl);
        sb.append("?grant_type=" + grant_type);
        sb.append("&appid=" + appid);
        sb.append("&secret=" + secret);
        HttpRequest httpRequest = HttpRequest.get(sb.toString());
        JsonNode jsonNode = httpRequest.execute().asJsonNode();
        String  accessToken = jsonNode.get("access_token").asText();
        System.out.println("获取的accessToken为:" + accessToken);
        int expires_in = jsonNode.get("expires_in").asInt();
        System.out.println("获取的accessToken有效期为:" + expires_in);
        //构建消息发送JSON对象
        MessageTemplate messageTemplate = new MessageTemplate();
        messageTemplate.setTemplate_id("LZQYI4NgxFzBwRYtE04KiaSt8bR71xfn8x5rvp6bmxx");
        messageTemplate.setTopcolor("#FF0000");
        messageTemplate.setTouser("oMbxz53a9_7gVpWjpb2ApxxGByxx");
        messageTemplate.setUrl("www.baidu.com");  //点击通知消息,跳转的页面
        MessageTemplate.DataDTO dataDTO = new MessageTemplate.DataDTO();
        MessageTemplate.DataDTO.FirstDTO firstDTO = new MessageTemplate.DataDTO.FirstDTO();
        firstDTO.setColor("#173177");
        firstDTO.setValue("xxx酒店,贵酒店有2张订单等待处理");
        MessageTemplate.DataDTO.UnConfirmCountDTO unConfirmCountDTO = new MessageTemplate.DataDTO.UnConfirmCountDTO();
        unConfirmCountDTO.setColor("#173177");
        unConfirmCountDTO.setValue("3");
        MessageTemplate.DataDTO.WaitAuditCountDTO waitAuditCountDTO = new MessageTemplate.DataDTO.WaitAuditCountDTO();
        waitAuditCountDTO.setColor("#173177");
        waitAuditCountDTO.setValue("2");
        MessageTemplate.DataDTO.TodayCheckInCountDTO todayCheckInCountDTO = new MessageTemplate.DataDTO.TodayCheckInCountDTO();
        todayCheckInCountDTO.setColor("#173177");
        todayCheckInCountDTO.setValue("4");
        MessageTemplate.DataDTO.RemarkDTO remarkDTO = new MessageTemplate.DataDTO.RemarkDTO();
        remarkDTO.setColor("#173177");
        remarkDTO.setValue("为保证客人入住正常,请及时处理");
        dataDTO.setFirst(firstDTO);
        dataDTO.setUnConfirmCount(unConfirmCountDTO);
        dataDTO.setWaitAuditCount(waitAuditCountDTO);
        dataDTO.setTodayCheckInCount(todayCheckInCountDTO);
        dataDTO.setRemark(remarkDTO);
        messageTemplate.setData(dataDTO);
        //发送消息
        HttpRequest sendRequest = HttpRequest.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken);
        sendRequest.bodyString(JsonUtil.toJson(messageTemplate)); //消息的json对象转Json放在请求的body体里面
        JsonNode execute = sendRequest.execute().asJsonNode();
        String errcode = execute.get("errcode").asText();
        String errmsg = execute.get("errmsg").asText();
        System.out.println(errcode + errmsg);
    }
}

控制台消息

获取的accessToken为:48_UcDsmGvqBEJLWWiaPgfJgeIgUFq0L7YM3C7OL34ab4Uo-uaiEBO6THHjGot1WCXZ_zA2SNcn15Lfjy-ddyefB15MNzb_OcWyL9jtvvkP99d00DwKX-_sINsNx9PkSsoofaja5JoF-djDdNllYHFfADACLJ
获取的accessToken有效期为:7200
0ok

公众号收到的通知如下图:

在这里插入图片描述