# 微信公众号每日推送
**Repository Path**: lcz2000/WechatPush
## Basic Information
- **Project Name**: 微信公众号每日推送
- **Description**: 微信公众号每日推送-实时定位,天气预报,纪念日等
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 3
- **Created**: 2023-12-28
- **Last Updated**: 2025-04-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# (JAVA)微信公众号推送早安问候以及天气
## 教程:
### **1.注册微信测试账号,编辑模板**
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
把appId、secret都配置到application.yml。
扫码关注得到用户的id,配置到application.yml的userId。
编辑模板:
```
今天是{{date.DATA}}
{{lunar.DATA}} {{festival.DATA}}
{{remark.DATA}}
{{city.DATA}}的天气: {{weather.DATA}}
最低气温: {{low.DATA}}度
最高气温: {{high.DATA}}度
风力: {{wc_day.DATA}}
风向: {{wd_day.DATA}}
今天是我们恋爱的第{{loveDays.DATA}}天
距离宝宝的生日还有{{birthdays.DATA}}天
{{rainbow.DATA}}
```

模板ID配置到application.yml的templateId
### **2.打开百度地图开放平台:**
**地址:https://lbsyun.baidu.com/apiconsole/center#/home**
**天气服务接口文档:** **https://lbs.baidu.com/index.php?title=webapi/weather**
**创建应用:选择服务端,ip地址不知道怎么填就填 0.0.0.0/0 不要泄露自己的AK就行**
**https://lbsyun.baidu.com/apiconsole/key#/home**
应用AK配置到application.yml的ak。
要查询的城市ID配置到application.yml的district_id。
备注:城市对应ID可在https://lbs.baidu.com/index.php?title=webapi/weather 的服务文档的请求参数的district_id一栏下载 “**行政区划编码**” 查看
### **3.彩虹屁平台**
https://www.tianapi.com/
apiKey配置到application.yml的rainbowKey
备注:需要在天行数据注册账号并申请该接口
### **4.如何运行?**
只需修改application.yml里的配置即可运行,代码其他部分无需任何修改。

启动项目后打开浏览器输入 localhost/test 即可手动调用。
定时任务默认每天早8点推送,如需修改可去application.yml上修改cron表达式。(不会写cron表达式的可以百度搜索:在线cron表达式)
### **5.功能介绍?**
#### 5.1获取地址位置
在微信公众平台页面向下拉,找到获取用户地理位置的API,然后需要打开。这个意思是申请访问订阅者的地理位置,以便于实时根据订阅者地理位置推送天气

这里需要让订阅者打开位置信息服务,微信打开关注好的接口测试号,进入设置,

然后将聊天中使用地理位置按钮点开即可。


注意:这里第一次设置完成后,退出关注的公众号的聊天对话框界面,然后再次进入,来记录当前的位置。(只有第一次打开位置信息需要这样,以后每次收到信息之后,会自动更新一次实时位置)
## 常见问题
### **1.推送失败:{"errcode":40003,"errmsg":"invalid openid rid: 630576d8-1139d71c-6d68a976"}**
这个是由于userId填的不对,userId是微信公众号上扫码关注后生成的一串字符串,不是关注人的微信号。

改成下面红框里的重启程序即可。
如果只推送一个人,就把空白的userId注释掉,否则也会报这个错。

### **2.推送失败:{"errcode":40125,"errmsg":"invalid appsecret rid: 6305aafd-5a6dbc88-1da22e34"}**
这是由于微信的appsecret没填对
## 代码优化
### **1.关于大家遇到的空指针问题都做了优化处理**。
现在异常情况会反馈到界面上,你们可以根据报错信息查找原因,而不是面对NullPointerException

### 2.为了满足你们的需求,增加了推送给多个关注用户的功能,在userId配置多个即可。
**注意**:
模版消息本身是不支持群发的。这些通知的对象都是单个人,而非群体,所以微信接口并没有允许一次传递多个openid。
代码实现的发送给多个人,本质上是多次调接口(填写几个userId就会调用几次微信发送消息的接口,天气接口和天行数据接口不会重复调用,不会消耗调用次数)。
一天最多推送100000条。
具体可查看 [https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277](https://gitee.com/link?target=https%3A%2F%2Fmp.weixin.qq.com%2Fwiki%3Ft%3Dresource%2Fres_main%26id%3Dmp1433751277)
### 3.新增农历生日计算,可在配置界面选择你的生日计算方式。
如果当天是二十四节气或者重大节日(国庆中秋等)也会显示出来。