• 微信公众号消息推送教程


    微信每日定时推送消息提醒,这样的技术男友谁不爱呢!

    欢迎专注微信公众号【凯小白学编程】

    一、注册一个公众号

    不多赘述,一般的程序员都会开一个自己的公众号来玩吧~

    二、启用测试账号

    因为公众号模板消息推送是服务号才有的功能,但是服务号只有企业才能注册,并且还得认证通过、显然对个人开发者很不友好,但是微信订阅号有一个功能是【公众平台测试账号】,这里可以体验服务号所有的功能

     三、设置模板消息

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

    appid和appsecret是获取我们token的唯一标识,而发送模板消息是token是必填的。用户关注后,就会在用户列表显示用户昵称和用户的openid,而这个openid就是我们发送模板消息时绑定的用户id,

     

    接着就是配置我们想要发送的模板消息的消息模板。 消息模板的格式定义如下

    自定义名称:{{value.DATA}}

    前面的自定义名称就是我们实际想发送的内容标题,value是变量,每天更新,所有的变量都要以DATA结尾。

    发出来的消息就类似于这样

     

    四、代码

    代码已经放在了github上可以下载直接运行

    微信推送代码

    https://github.com/kaixiaobai/WeChatMsg

    只包含了天行和高德部分接口,其他接口可以另外扩充

    主要的发送消息代码

    1. @Component
    2. public class WeChatMessage {
    3. private static final Logger logger = LoggerFactory.getLogger(WeChatMessage.class);
    4. public static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
    5. @Value("${WeChat.appid}")
    6. private String appid;
    7. @Autowired
    8. private RedisUtil redisUtil;
    9. @Autowired
    10. private WeChatToken weChatToken;
    11. /**
    12. * 微信模板消息,通用
    13. */
    14. public WeChatMsgResult sendPublicMessage(String templateId, String toUserId, Map valueMap) {
    15. WeChatMsgResult weChatMsgResult = new WeChatMsgResult();
    16. // 获取access_token
    17. String accessToken = weChatToken.getAccessToken();
    18. // 设置模板消息基本参数
    19. Map map = new HashMap<>();
    20. map.put("touser", toUserId);
    21. map.put("template_id", templateId);
    22. map.put("appid", appid);
    23. try {
    24. weChatMsgResult = sendMessage(TEMPLATE_URL + accessToken, map, valueMap);
    25. } catch (IllegalAccessException | InstantiationException e) {
    26. logger.error("发送模板消息异常:{}", e.getMessage());
    27. }
    28. return weChatMsgResult;
    29. }
    30. /**
    31. * 发送消息
    32. * @param url 微信模板消息url
    33. */
    34. private WeChatMsgResult sendMessage(String url, Map map, Map valueMap) throws IllegalAccessException, InstantiationException {
    35. map.put("data", valueMap);
    36. String msg = JSON.toJSONString(map);
    37. String post = HttpUtil.post(url, msg);
    38. logger.info("发送模板消息{}", msg);
    39. WeChatMsgResult weChatMsgResult = JSONObject.parseObject(post, WeChatMsgResult.class);
    40. logger.info("收到应答{}", weChatMsgResult.toString());
    41. return weChatMsgResult;
    42. }
    43. }

     

  • 相关阅读:
    考研计组chap3存储系统
    【网页设计】期末大作业:化妆品主题——绿色大气的html5响应式化妆品护肤品肌肤网页设计(11页)
    集合工具类的常用方法--小总和
    .netcore对传输类设置区分大小
    九号公司——高科技黑马的进击与困境
    WebStackHugo导航开源项目部署流程和内容一键配置
    分布式事务-TCC异常-空回滚
    JavaScript 的发展历史
    【算法与数据结构】669、LeetCode修剪二叉搜索树
    有哪些关于程序员的笑话?那些年,我们对计算机专业的误解太深了
  • 原文地址:https://blog.csdn.net/lk888666/article/details/126680132