springboot完成拉取微信公众号关注列表并通过列表推送消息
微信开放文档
微信小程序和公众号中,同一个用户在不同的应用中的openId是不同的,也就是说同一个用户在一个小程序和对应的公众号上是无法通过openId对应的,需要用微信唯一的unionId进行对应,还需要进行unionid和openId的转换。
先写拉取关注公众号的用户数据列表。
数据库表结构:
/*Navicat Premium Data TransferSource Server : yixue1Source Server Type : MySQLSource Server Version : 80024Source Host : 110.42.3.22:3306Source Schema : yixueTarget Server Type : MySQLTarget Server Version : 80024File Encoding : 65001Date: 15/08/2022 16:40:25
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for wx_official_account_user
-- ----------------------------
DROP TABLE IF EXISTS `wx_official_account_user`;
CREATE TABLE `wx_official_account_user` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`subscribe_scene` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关注的渠道来源',`openid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '微信openid',`union_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '微信unionId',`subscribe_time` datetime NOT NULL COMMENT '用户关注时间',`create_time` datetime NOT NULL COMMENT '创建时间',`status` tinyint NULL DEFAULT 0 COMMENT '状态',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `openId`(`openid` ASC) USING BTREE,UNIQUE INDEX `unionId`(`union_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 146 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '微信公众号用户信息' ROW_FORMAT = DYNAMIC;SET FOREIGN_KEY_CHECKS = 1;
controller层代码:
@ApiOperation("公众号关注信息")@PostMapping("/")public void getOfficialUsers() throws WxErrorException {wxOfficialAccountUserService.getOfficialUsers();}
service层:
@Overridepublic void getOfficialUsers() throws WxErrorException {WxOfficialAccountUser user = this.getOne(Wrappers.<WxOfficialAccountUser>query().orderByDesc("subscribe_time").last("limit 1"));//获取关注公众号的所有openidWxMpUserList wxMpUserList = wxMpService.getUserService().userList(null);List<String> openIds = wxMpUserList.getOpenids();List<WxOfficialAccountUser> list = new ArrayList<>();//获取后将数据存入数据库for (String s:openIds) {WxMpUser wxMpUser = wxMpService.getUserService().userInfo(s);if(wxMpUser.getSubscribeTime()>(Timestamp.valueOf(user.getSubscribeTime()).getTime())) {WxOfficialAccountUser wxUser = new WxOfficialAccountUser();wxUser.setOpenid(s);wxUser.setUnionId(wxMpUser.getUnionId());wxUser.setSubscribeScene(wxMpUser.getSubscribeScene());wxUser.setCreateTime(LocalDateTime.now());wxUser.setSubscribeTime(LocalDateTime.ofInstant(Instant.ofEpochSecond(wxMpUser.getSubscribeTime()), ZoneId.systemDefault()));list.add(wxUser);}}this.saveBatch(list);}
AppID这些需要自行设置。
这样就拿到了关注公众号的用户数据列表,简单写一个通过unionId拿公众号openId的代码
@Overridepublic String getOfficialOpenId(String unionId) {//通过unionId拿openIdWxOfficialAccountUser user = this.getOne(Wrappers.<WxOfficialAccountUser>lambdaQuery().eq(WxOfficialAccountUser::getUnionId, unionId));return user.getOpenid();}
前置就完成了,接下来是通过获取的列表发送消息。
模板消息 | 微信开放文档
WxMpTemplateMessage的生成:
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder().toUser(表内的openId).templateId(自行申请的消息模板).miniProgram(new WxMpTemplateMessage.MiniProgram(appId,pagepath,false)).build();
根据模板把消息增加到templateMessage内:
map.put("first","first");map.put("keyword1",keyword1);map.put("keyword2",keyword1);map.put("keyword3",keyword1);map.put("remark",remark);map.forEach( (k,v)-> templateMessage.addData(new WxMpTemplateData(k, v, "#000000")));
推送消息:
try {wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);} catch (WxErrorException e) {count++;e.printStackTrace();}
这样就完成了消息的推送
springboot完成拉取微信公众号关注列表并通过列表推送消息相关推荐
- python实现微信公众号给你的重要用户推送消息
最近小红书上这个很火,觉得做起来应该也不会太难,捣鼓了两天有了初步成效,还有一些功能没实现(比如定时推送),保姆级教程,大家可以借鉴,动手给自己重要的人做一个,或许可以暖ta一整天- - 1.步骤一 ...
- 微信公众号发送小程序卡片_微信公众号将能够直接给用户推送小程序卡片,社交电商开始发力...
公众号或能在对话框中直接给粉丝推送小程序卡片了,这个功能似乎正在灰度测试中. 微信公众号将能够直接给用户推送小程序卡片,社交电商开始发力 一直以来,微信公众号和微信小程序一直是腾讯基于微信生态的两款明 ...
- 通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python) https://github.com/QInzhengk/Math-Model-and-Machine-Learn ...
- Android拉取微信公众号列表,Xposed实时获取微信公众号推送
友情提示:阅读本文需要稍微有一点点Xposed开发基础,一点点Android逆向的基础,以及一点点Kotlin基础 鸣谢:本项目基于@Gh0u1L5,开源的Xposedhook框架----Wechat ...
- 公众号开发 单独 给某个用户 推送消息_坡解版wetool有没有用-公众号
坡解版wetool有没有用-公众号 wetool个人版下载地址:/b015v08kb wetool企业版(管理软件)是一款可以对进行管理的管理工具,下载使用这款wetool管理软件可以让您对运营或者好 ...
- 公众号开发 单独 给某个用户 推送消息_韩国5G用户6月底已达134万 较5月底增加近70%...
中关村在线消息:韩国三大运营商SK.KT和LG率先于去年12月开始向企业用户提供商用5G 服务,今年4月初推出面向个人消费者的5G民用服务.韩国作为全球首个推出5G 服务的国家,他们的5G用户数量在6 ...
- Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章
前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...
- 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...
本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...
- 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...
9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...
最新文章
- 不断学习UI框架的写法
- git回滚到任意版本
- 9岁女孩联合国演讲上热搜,网友:自愧不如
- Linux笔记-bash批量启动、停止、重启、查询状态指定Java进程(其他进行通用)
- sigprocmask()函数实例详解,设置信号规定时间堵塞,取消信号堵塞
- 交出娃哈哈,宗庆后还是不放心?
- Docker学习总结(28)——Docker 容器健康检查机制
- Google 也要“勒紧腰带”过日子了!
- Xcode6无法安装VVDocumenter插件的解决方法
- MySql5.6操作时报错:You must SET PASSWORD before execut
- WRF Output Fields描述
- 微信小程序赞赏功能,非微信赞赏功能
- 几种常见的光纤接头(ST,SC,LC,FC)
- excel文档加密破解,简单操作亲测有效
- 【Ansys】什么软件模块是DS,它和workbench、mechanical的区别在哪里?
- python引用计数的原理_深入Python中引用计数
- Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 果酱 API 教程
- 隐马尔科夫模型一(概念理解)
- 学习路上——技术书籍摸爬滚打
- vue2.0 渲染列表在苹果手机加载不出来的问题