【开源自荐】微信推送服务
开源微信推送服务
使用 Spring Boot 4.0 和 GraalVM Native
通过企业微信(WeCom),将系统消息稳定、合规地推送到用户的微信中接收。
整体消息流转路径如下:
最终效果是: 用户在微信中收到消息,但技术通道使用的是企业微信。
为什么选择企业微信?
相比微信公众号,企业微信具备天然的系统通知优势:
无缝触达:消息最终可到达 微信 App(需关注插件)。
主动推送:支持无限制的主动消息推送,适合通知。
稳定合规:官方允许的系统消息通道,不涉及内容风控。
简单易用:无需复杂的模板消息申请,开发接口清晰。
有什么需要的或者想法可以提,交流一下
教程
1. 注册企业微信
谁都可以注册企业微信,无需认证,按说明注册并使用微信扫二维码完成管理员绑定
2. 微信插件
选择我的企业,点击微信插件,使用手机扫码关注
3. 添加应用
添加 logo 和应用名称以及可见范围,选择一个部门或者自己都行,创建应用
4. 配置应用
4.1 查看 Secret
创建完成后会进入当前页面,点击查看可以看 Secret
点击发送,可前往企业微信查看消息
点击查看,保存好,不要泄露,至关重要
4.2 配置可信 IP
在配置可信 IP 之前,我们需要先设置可信域名
可信域名需要校验域名,点击 申请校验域名 获得认证信息
下载文件放置到一个网站的根目录下,我这里放置到了自己在 cloudflare 的 Workers 和 Pages 博客上 https://mazepeng.com/
当文件可以访问到的时候就可以设置可信域名了
现在推送消息的服务必须有可信 IP,如何获得自己的 IP 呢
访问 https://ifconfig.me/ 或者直接百度 IP 就可以看到自己的公网 IP 了
点击应用管理,点击应用,拉倒最下面,配置可信 IP
5. 运行 push-server
支持 docker 部署和本地应用部署,这里我就介绍一下 docker 部署
5.1 docker 命令部署
docker run -d \
--name push-server \
-p 8000:8000 \
-e PUSH_AUTH_KEY="替换为自己的key" \
-e PUSH_WECOM_APP_KEY="你的应用AppKey" \
-e PUSH_WECOM_APP_SECRET="你的应用AppSecret" \
-e PUSH_WECOM_AGENT_ID="1000001" \
qingzhoudev/push-server:latest
#安全设置,默认值为下方值,需要修改添加环境变量修改
docker run -d \
--name push-server \
-p 8000:8000 \
-e PUSH_AUTH_KEY="替换为自己的key" \
-e PUSH_WECOM_APP_KEY="你的应用AppKey" \
-e PUSH_WECOM_APP_SECRET="你的应用AppSecret" \
-e PUSH_WECOM_AGENT_ID="1000001" \
-e PUSH_SECURITY_BLOCK_MINUTES="30" \
-e PUSH_SECURITY_FAIL_WINDOW_MINUTES="5" \
-e PUSH_SECURITY_MAX_FAILS="5" \
-e PUSH_SECURITY_RATE_LIMIT_CAPACITY="10" \
-e PUSH_SECURITY_RATE_LIMIT_QPS="1" \
qingzhoudev/push-server:latest
- PUSH_AUTH_KEY 请求头密钥,需要自己设置一个复杂的即可
- PUSH_WECOM_APP_KEY 就是企业 ID
- PUSH_WECOM_APP_SECRET 就是保存的 Secret
- PUSH_WECOM_AGENT_ID 应用 ID
替换后直接 docker 启动
5.2 使用 Docker Compose
services: push-server: qingzhoudev/push-server:latest container_name: push-server ports: - "8000:8000" volumes: - ./application-prod.yml:/app/config/application-prod.yml:ro restart: unless-stopped application-prod.yml 文件
push: auth: key: "CHANGE_ME" security: block-minutes: 30 fail-window-minutes: 5 max-fails: 5 rate-limit-capacity: 10 rate-limit-qps: 1 wecom: app-key: "CHANGE_ME" app-secret: "CHANGE_ME" agent-id: 1000001 webhook-url: server: port: 8000 5.3 企业 ID
5.4 应用 ID
6 推送消息
和正常接收微信消息一样,没有什么区别
curl -X POST http://localhost:8000/api/v1/push \
-H "X-API-Key: 替换为自己的key" \
-H "Content-Type: application/json" \
-d '{
"target": "ZhangSan|LiSi",
"type": "TEXT",
"content": "系统通知:您的任务已构建完成。"
}'
curl -X POST http://localhost:8000/api/v1/push \
-H "X-API-Key: 替换为自己的key" \
-H "Content-Type: application/json" \
-d '{
"target": "MaZePeng",
"type": "TEXT_CARD",
"title": "测试Push Server",
"content": "我是 Push Server,这是我作为服务端的第一条消息",
"url": "https://www.mazepeng.com"
}'
curl -X POST http://localhost:8000/api/v1/push \
-H "X-API-Key: 替换为自己的key" \
-H "Content-Type: application/json" \
-d '{
"target": "MaZePeng",
"type": "NEWS",
"articles": [
{
"title": "测试 Article",
"description": "我是描述",
"url": "https://www.mazepeng.com",
"picUrl": "https://mazepeng.com/img/bg/a_larger_image_of_the_homepage.jpg"
}
]
}' 类型有:
- TEXT
- MARKDOWN(微信不支持)
- TEXT_CARD
- NEWS














