用 Go 写了个微信消息推送的系统,欢迎大家使用

2022-03-09 19:59:55 +08:00
 FatherMurker

Go Message

使用微信测试号和企业微信应用搭建自己的消息推送服务。只要向自己的服务器发送一个简单的 GET 请求,即可将消息推送至你的手机微信上。

https://github.com/LeeJiangWei/go-message

配置

在推送之前,需要先在系统上配置好微信相关的设置。登录系统后台,注册一个新用户,然后参考以下信息配置。

微信测试号和企业微信应用可以只配置其中一个,但必须填写所有字段,否则无法推送。

用户信息

微信测试号

  1. 前往 微信公众平台
  2. 测试号信息 一栏中获取 appID 和 appsecret 。
  3. 测试号二维码 一栏中扫描二维码关注自己的测试号,并在右侧列表中获取自己的微信号,作为接收者 ID 。
  4. 模板消息接口 一栏中新增模板,模板标题随意填写,模板内容填入:From: {{from.DATA}} {{description.DATA}} {{remark.DATA}},提交后获取模板 ID 。
  5. 接口配置信息 一栏中,URL 填入自己服务器的域名 / IP 加上后缀,例如:http://你的域名 /verify/用户名;填入任意 Token 作为接口配置 Token 。填完先不要点击验证,先在回到推送系统中填好接口配置 Token 并成功修改后,再点击验证。

企业微信应用

  1. 企业微信 注册一个企业微信号(不需要企业资质)。
  2. 企业信息 页面最下方获取企业 ID 。
  3. 微信插件 页面用微信扫码关注,这样消息才会直接推送到微信上。
  4. 应用管理 页面创建一个新应用,并获取应用的 AgentId 和 Secret 。消息将通过这个应用推送。
  5. 通讯录 页面右侧列表中,点击自己进入详情,获取自己的账号最为接收者 ID (一般是自己名字的拼音)。
  6. 卡片消息默认 URL 可以随意填写,用于卡片消息点进去的页面,但是必须要有而且要保证是合法 URL ,否则微信服务器会报错。可以使用系统的主页作为 URL 。

推送

发送简单 GET 或 POST 请求到自己服务器上即可完成推送。

注意:所有推送必须携带 token 参数来验证身份,值为用户信息配置中的消息推送 Token 。可以在 URL 中用 query params 的方式,也可以用 form data 的方式。

推送至微信测试号

微信测试号仅支持模板消息。

模板消息

推送 URL ( GET / POST ):http://你的域名 /template/用户名

可选参数字段(用于显示在模板的不同位置):

注:如果用 GET 请求,参数需要全部用 query params 的方式。如果使用 POST 请求,需要全部用 form data 的方式。

示例:http://你的域名 /template/用户名?token=token&from=webpage&desc=Hello%20Wrold&remark=这是一条测试消息

效果:

推送至企业微信应用

企业微信应用支持纯文本消息、文字卡片消息。

纯文本消息

推送 URL ( GET / POST ):http://你的域名 /plaintext/用户名

必需参数字段:

注:如果用 GET 请求,参数需要全部用 query params 的方式。如果使用 POST 请求,需要全部用 form data 的方式。

示例:http://你的域名 /plaintext/用户名?token=token&content=Hello,%20traveller

文字卡片消息

推送 URL ( GET / POST ):http://你的域名 /textcard/用户名

必需参数字段:

注:如果用 GET 请求,参数需要全部用 query params 的方式。如果使用 POST 请求,需要全部用 form data 的方式。

示例:http://你的域名 /textcard/用户名?token=token&title=Hello&desc=World

效果:

部署

直接运行打包好的二进制文件即可。初次运行会产生一个配置文件,里面可以配置 JWT 签发相关设置,是否启用 Redis 作为缓存(默认否),服务运行的端口(默认 80 )。重启服务器后生效。

编译

Windows

GOPROXY=https://goproxy.cn,direct GOOS=windows GOARCH=amd64 go build -o go-message go-message-pusher

Linux

GOPROXY=https://goproxy.cn,direct CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o go-message go-message-pusher

GitHub 地址: https://github.com/LeeJiangWei/go-message

4256 次点击
所在节点    分享创造
22 条回复
wxyrrcj
2022-03-09 21:38:01 +08:00
oneisall8955
2022-03-09 22:13:52 +08:00
好耶~赞
czyt
2022-03-09 23:10:39 +08:00
已经用上了,谢谢分享
xxb
2022-03-09 23:54:21 +08:00
不错,很赞!
qile1
2022-03-10 00:56:38 +08:00
能不能传人用户 id ,给其他人发送信息
FatherMurker
2022-03-10 08:43:56 +08:00
@wxyrrcj 哈哈,这个仓库其实就是我的灵感来源
FatherMurker
2022-03-10 08:45:20 +08:00
@czyt
@oneisall8955
@xxb 谢谢支持~
FatherMurker
2022-03-10 08:48:01 +08:00
@qile1 不错的想法,后续会加上👍
cuixiao603
2022-03-10 09:05:31 +08:00
必须要 GLIBC_2.28 吗
mydebug
2022-03-10 11:35:25 +08:00
已用上,期待后续更新
275761919
2022-03-10 11:59:05 +08:00
很好,但还是感觉 qq bot 方便
qile1
2022-03-10 12:05:47 +08:00
@FatherMurker
@FatherMurker
示例: http://你的域名 /template/用户名?token=token&from=webpage&desc=Hello%20Wrold&remark=这是一条测试消
这个用户名这是作为传人验证?把能在发送信息那里获取对应的用户名来发送给过个吗?
qile1
2022-03-10 12:08:58 +08:00
@qile1 @FatherMurker
示例: http://你的域名 /template/用户名?token=token&from=webpage&desc=Hello%20Wrold&remark=这是一条测试消息
这个用户名是否仅可以作为传入验证?如果能在发送信息那里获取到这个用户名来发送给对应用户模板消息就可以实现多人提醒啦?
FatherMurker
2022-03-10 13:34:18 +08:00
@cuixiao603 应该不依赖吧,是在 Linux 编译出错了吗
FatherMurker
2022-03-10 13:44:19 +08:00
@qile1 确实可以,目前用户名就是对应了自己的接收者 ID ,多用户的话只要在接受参数的时候顺便接受其他用户就好了,后续就打算做这个;或者其实企业微信推送的 API 本来就支持多用户,只要在配置界面里把其他企业成员的 ID 也加上去就好了,例如 "XiaoMing|LiuHua",或者 "@all" (我还没试过),详见: https://developer.work.weixin.qq.com/document/path/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF
Ritter
2022-03-10 13:53:07 +08:00
邮件没有接入吗
danube533
2022-03-10 14:05:14 +08:00
请问下截图里的英文字体是什么名字?
FatherMurker
2022-03-10 15:28:28 +08:00
@Ritter 暂时还没有
@danube533 小米手机默认字体 小米兰亭 Pro
qile1
2022-03-11 02:10:27 +08:00
@FatherMurker 顺便加个传递 accesstoken 的功能,这样其他接口可以和这个项目共享 token ,就可以一个公众号各个服务不冲突啦
我个人公众号需要其他功能,如果 token 老是被更新,那就不好多个项目共存啦
FatherMurker
2022-03-11 13:22:36 +08:00
@qile1 指的是让这个服务往外传 token ,还是接收外部进来的 token 呀?前者就好办,后者的话因为定时更新逻辑写死了不好动了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839219

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX