WXPush 技能
微信模板消息推送,支持三种 API 格式切换(对应三个不同项目)。
配置
配置文件:~/.config/wxpush/wxpush.env
bash
WXPUSHAPIURL=https://your-service.com # 服务地址
WXPUSHAPITOKEN=your_token # API Token(edgeone 可选,wxpush 必填,go-wxpush 留空)
WXPUSH_MODE=edgeone # API 模式: edgeone | wxpush | go-wxpush
WXPUSHAPPID=wxappid # 微信 AppID(go-wxpush 必填)
WXPUSHSECRET=wxsecret # 微信 Secret(go-wxpush 必填)
WXPUSH_USERID=openid1|openid2 # 默认接收用户
WXPUSHTEMPLATEID=template_id # 模板 ID
WXPUSH_SKIN= # 皮肤(可选,edgeone 原生支持)
WXPUSHBASEURL= # 跳转 URL(可选)
如配置文件不存在,引导用户创建:询问 mode、token、wx 配置等,写入 ~/.config/wxpush/wxpush.env 并设权限 600。
配置完成后,务必发送一条测试消息以确认配置正确。
发送消息
读取 ~/.config/wxpush/wxpush.env,根据 mode 选择 curl 或 Python 发送请求。
优先使用 curl(最简洁),不可用时用 Python(标准库,无需额外依赖)。
edgeone 模式(默认)
bash
curl
curl -s -X POST ${WXPUSH
APIURL}/wxsend \
-H Content-Type: application/json \
-d {\title\:\标题\,\content\:\内容\,\token\:\${WXPUSH
APITOKEN}\}
Python(标准库,无需安装)
python3 -c
import json, os, sys
from urllib.request import Request, urlopen
cfg = {k.strip(): v.strip() for k, _, v in (l.partition(=) for l in open(os.path.expanduser(~/.config/wxpush/wxpush.env)) if = in l and not l.startswith(#))}
data = json.dumps({title: sys.argv[1], content: sys.argv[2], token: cfg.get(WXPUSH
APITOKEN,)}).encode()
req = Request(cfg.get(WXPUSH
APIURL,).rstrip(/) + /wxsend, data=data, headers={Content-Type:application/json})
print(urlopen(req, timeout=15).read().decode())
标题 内容
wxpush 模式
bash
curl
curl -s -X POST ${WXPUSH
APIURL}/wxsend \
-H Authorization: ${WXPUSH
APITOKEN} \
-H Content-Type: application/json \
-d {\title\:\标题\,\content\:\内容\}
Python
python3 -c
import json, os, sys
from urllib.request import Request, urlopen
cfg = {k.strip(): v.strip() for k, _, v in (l.partition(=) for l in open(os.path.expanduser(~/.config/wxpush/wxpush.env)) if = in l and not l.startswith(#))}
data = json.dumps({title: sys.argv[1], content: sys.argv[2]}).encode()
req = Request(cfg.get(WXPUSH
APIURL,).rstrip(/) + /wxsend, data=data, headers={Content-Type:application/json,Authorization:cfg.get(WXPUSH
APITOKEN,)})
print(urlopen(req, timeout=15).read().decode())
标题 内容
go-wxpush 模式
bash
curl
curl -s -X POST ${WXPUSH
APIURL}/wxsend \
-H Content-Type: application/json \
-d {\title\:\标题\,\content\:\内容\,\appid\:\${WXPUSH
APPID}\,\secret\:\${WXPUSHSECRET}\,\userid\:\${WXPUSH
USERID}\,\templateid\:\${WXPUSH
TEMPLATEID}\}
Python
python3 -c
import json, os, sys
from urllib.request import Request, urlopen
cfg = {k.strip(): v.strip() for k, _, v in (l.partition(=) for l in open(os.path.expanduser(~/.config/wxpush/wxpush.env)) if = in l and not l.startswith(#))}
data = json.dumps({title: sys.argv[1], content: sys.argv[2], appid: cfg.get(WXPUSH
APPID,), secret: cfg.get(WXPUSHSECRET,), userid: cfg.get(WXPUSH
USERID,), templateid: cfg.get(WXPUSH
TEMPLATEID,)}).encode()
req = Request(cfg.get(WXPUSH
APIURL,).rstrip(/) + /wxsend, data=data, headers={Content-Type:application/json})
print(urlopen(req, timeout=15).read().decode())
标题 内容
三种 API 格式差异
https://wxpush.hunluan.space | 无(自填) | https://push.hzz.cool |
| token | 可选 |
必填 |
无 |
| token 传递方式 | query / body / header | query / header | — |
| wx 配置 | 无 token 时必填 | 服务端有默认值 |
必填(无默认值) |
| skin | 原生支持 | 需配合 wxpushSkin | 需配合 wxpushSkin |
| 独有参数 | — | — | tz(时区) |
| 成功响应 | 标准微信响应 | {msg: Successfully sent...} | {errcode: 0} |
mode 选择指南
- - edgeone:默认地址 https://wxpush.hunluan.space,支持有/无 token 两种方式
- wxpush:需自填服务地址,必须配置 token,wx 配置在服务端
- go-wxpush:默认地址 https://push.hzz.cool,无 token,每次调用必须传完整 wx 配置
详细 API 文档
根据用户选择的 mode,加载对应 reference 文件:
皮肤列表(edgeone 原生支持)
MacOSHackerTheme-LGT、aurora-glass、cyberpunk、hacker-dark、minimalist-light、ocean-breeze、quiet-night、sakura、sunset-glow、terminal-neon、warm-magazine
安全提示
- - 默认端点(wxpush.hunluan.space、push.hzz.cool)为第三方服务,AppID/Secret/Token 会发送至对应服务
- 如不信任默认端点,请自行部署服务并设置 WXPUSHAPIURL
- 配置文件权限建议设为 600(仅当前用户可读写)