微信每日定时推送消息提醒,这样的技术男友谁不爱呢!
欢迎专注微信公众号【凯小白学编程】
不多赘述,一般的程序员都会开一个自己的公众号来玩吧~
因为公众号模板消息推送是服务号才有的功能,但是服务号只有企业才能注册,并且还得认证通过、显然对个人开发者很不友好,但是微信订阅号有一个功能是【公众平台测试账号】,这里可以体验服务号所有的功能

进入公众平台测试账号后就能看到测试账号的appid和secret

appid和appsecret是获取我们token的唯一标识,而发送模板消息是token是必填的。用户关注后,就会在用户列表显示用户昵称和用户的openid,而这个openid就是我们发送模板消息时绑定的用户id,
接着就是配置我们想要发送的模板消息的消息模板。 消息模板的格式定义如下
自定义名称:{{value.DATA}}
前面的自定义名称就是我们实际想发送的内容标题,value是变量,每天更新,所有的变量都要以DATA结尾。
发出来的消息就类似于这样
代码已经放在了github上可以下载直接运行
https://github.com/kaixiaobai/WeChatMsg

只包含了天行和高德部分接口,其他接口可以另外扩充
主要的发送消息代码
- @Component
- public class WeChatMessage {
- private static final Logger logger = LoggerFactory.getLogger(WeChatMessage.class);
-
- public static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
-
- @Value("${WeChat.appid}")
- private String appid;
-
- @Autowired
- private RedisUtil redisUtil;
-
- @Autowired
- private WeChatToken weChatToken;
- /**
- * 微信模板消息,通用
- */
- public WeChatMsgResult sendPublicMessage(String templateId, String toUserId, Map
valueMap) { - WeChatMsgResult weChatMsgResult = new WeChatMsgResult();
- // 获取access_token
- String accessToken = weChatToken.getAccessToken();
- // 设置模板消息基本参数
- Map
map = new HashMap<>(); - map.put("touser", toUserId);
- map.put("template_id", templateId);
- map.put("appid", appid);
-
- try {
- weChatMsgResult = sendMessage(TEMPLATE_URL + accessToken, map, valueMap);
- } catch (IllegalAccessException | InstantiationException e) {
- logger.error("发送模板消息异常:{}", e.getMessage());
- }
- return weChatMsgResult;
- }
- /**
- * 发送消息
- * @param url 微信模板消息url
- */
- private WeChatMsgResult sendMessage(String url, Map
map, Map valueMap) throws IllegalAccessException, InstantiationException { - map.put("data", valueMap);
- String msg = JSON.toJSONString(map);
- String post = HttpUtil.post(url, msg);
- logger.info("发送模板消息{}", msg);
- WeChatMsgResult weChatMsgResult = JSONObject.parseObject(post, WeChatMsgResult.class);
- logger.info("收到应答{}", weChatMsgResult.toString());
- return weChatMsgResult;
- }
-
- }