微信每日定时推送消息提醒,这样的技术男友谁不爱呢!
欢迎专注微信公众号【凯小白学编程】
一、注册一个公众号
不多赘述,一般的程序员都会开一个自己的公众号来玩吧~
二、启用测试账号
因为公众号模板消息推送是服务号才有的功能,但是服务号只有企业才能注册,并且还得认证通过、显然对个人开发者很不友好,但是微信订阅号有一个功能是【公众平台测试账号】,这里可以体验服务号所有的功能
三、设置模板消息
进入公众平台测试账号后就能看到测试账号的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;@Autowiredprivate RedisUtil redisUtil;@Autowiredprivate WeChatToken weChatToken;/*** 微信模板消息,通用*/public WeChatMsgResult sendPublicMessage(String templateId, String toUserId, Map<String, Object> valueMap) {WeChatMsgResult weChatMsgResult = new WeChatMsgResult();// 获取access_tokenString accessToken = weChatToken.getAccessToken();// 设置模板消息基本参数Map<String, Object> 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<String, Object> map, Map<String, Object> 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;}}