❓:为什么先说完成的效果呢?
🙋:就像射箭🏹找不到箭靶🧿,那每天拉弓的意义在哪呢?
先来了解一下本次练习要实现的效果、结果。
通过代码编写,项目部署,能达到让用户关注改公众号后,每天定时推送(你想要的消息),例如:天气预报推送、生日推送、疫情相关数据推送(感染人数、风险地区)

上面二维码是楼主自己做的,感兴趣的话可以扫码体验体验
完成此练习的前提:1、拥有java代码基础 2、有一台云服务器或者永不关机的电脑💻(才能实现每天定点推送)(看网上说使用github也能实现定时推送)
本练习使用 JAVA 语言实现,知识点包括:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

点击此链接,使用微信扫码登录后,会自动创建一个测试公众号,重点注意appID、appsecret(等会要用)记住自己的就行,我这里打码为了账号安全

分为两种:(这个分类是我自己取的名字,不是微信官方的)
❓:固定类推送?什么意思?
🙋:就是对每一个关注者都推送几乎相同的东西,不太通用,例如上面图片中的星座,每个关注者可能是不同的,固定类就相当于把它写死
❓:固定类推送有什么好处/优劣吗?
🙋:代码相对简单、适用于只给一个人推送消息
🙋:通用类就是会对每一个关注者发送的消息会有不同。比如星座,用户关注后,公众号怎么知道关注者的星座,需要关注者自行设置生日,然后存储到数据库中,再发送消息模板时,读取关注者的生日,才能知道其星座(如果没懂,可以扫码关注最上面的二维码体验体验)
🙋:代码相对复杂一些、有通用性
maven依赖:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.4.3version>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.github.binarywanggroupId>
<artifactId>weixin-java-mpartifactId>
<version>3.3.0version>
dependency>
<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-allartifactId>
<version>5.7.16version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-testartifactId>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
先来做个最简单的推送,明白其过程,后面自然就通
将你注册的测试公众号的appiD和appsecret写上去,解耦
wx:
appID: 你的appID
appsecret: 你的appsecret
写一个类,类名随便
@Component
public class SendController {
@Value("${wx.appID}")
private String appID;
@Value("${wx.appsecret}")
private String appsecret;
public void push(){
//1,配置
WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
wxStorage.setAppId(appID);
wxStorage.setSecret(appsecret);
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxStorage);
//2,推送消息
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser