当前位置: 首页 > news >正文

微信公众号消息推送教程

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

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

一、注册一个公众号

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

二、启用测试账号

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

 三、设置模板消息

进入公众平台测试账号后就能看到测试账号的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<String, Object> valueMap) {
        WeChatMsgResult weChatMsgResult = new WeChatMsgResult();
        // 获取access_token
        String 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;
    }

}

 

相关文章:

  • MiddleWare ❀ Zookeeper基础概述
  • 多任务学习算法在推荐系统中的应用
  • webpack5入门教程
  • Python解决多个服务线程/进程重复运行定时任务的问题
  • webpack学习笔记
  • 01人机交互/打开CMD/常见CMD命令/CMD打开QQ并设置环境变量
  • QT汽车客运公司售票系统(改良版)
  • 初始Cpp之 六、内存分配
  • 【算法】重载sort的cmp的题
  • STC15单片机-LED闪烁(定时器)
  • Android 移动安全攻防实战 第一章
  • Docker 容器技术
  • 基于springboot的少儿识字系统
  • Hyperledger Besu环境搭建(Linux)
  • java毕业设计参考文献基于S2SH的仓库管理系统[包运行成功]
  • (三)从jvm层面了解线程的启动和停止
  • Asm.js的简单介绍
  • canvas绘制圆角头像
  • CEF与代理
  • CSS 提示工具(Tooltip)
  • ES6系列(二)变量的解构赋值
  • HashMap剖析之内部结构
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL主从复制读写分离及奇怪的问题
  • passportjs 源码分析
  • Protobuf3语言指南
  • Ruby 2.x 源代码分析:扩展 概述
  • Spring核心 Bean的高级装配
  • Vue.js源码(2):初探List Rendering
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 编写高质量JavaScript代码之并发
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 订阅Forge Viewer所有的事件
  • 时间复杂度与空间复杂度分析
  • 使用 @font-face
  • 写给高年级小学生看的《Bash 指南》
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (2)(2.10) LTM telemetry
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Python) SOAP Web Service (HTTP POST)
  • (SpringBoot)第二章:Spring创建和使用
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • .NET单元测试
  • .net对接阿里云CSB服务
  • :“Failed to access IIS metabase”解决方法
  • @Bean注解详解
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [C语言]一维数组二维数组的大小
  • [HackMyVM]靶场Boxing
  • [HJ56 完全数计算]
  • [iOS]如何删除工程里面用cocoapods导入的第三方库