V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
FatherMurker
V2EX  ›  分享创造

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

  •  
  •   FatherMurker · 2022-03-09 19:59:55 +08:00 · 4255 次点击
    这是一个创建于 990 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go Message

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

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

    配置

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

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

    用户信息

    • 用户名:随意,同时用于在推送消息时 URL 中辨识用户。例如:GET http://你的域名 /template/用户名
    • 密码:随意,仅用于登录后台系统。
    • 消息推送 Token:随意,在推送消息时携带,用于验证推送者身份。例如:GET http://你的域名 /template/用户名?token=hello

    微信测试号

    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/用户名

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

    • from
    • desc
    • remark

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

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

    效果:

    推送至企业微信应用

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

    纯文本消息

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

    必需参数字段:

    • content

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

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

    文字卡片消息

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

    必需参数字段:

    • title
    • desc
    • url (如果不填,则会使用配置时的默认 URL )

    注:如果用 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

    22 条回复    2022-03-13 08:50:28 +08:00
    wxyrrcj
        1
    wxyrrcj  
       2022-03-09 21:38:01 +08:00 via Android
    oneisall8955
        2
    oneisall8955  
       2022-03-09 22:13:52 +08:00 via Android
    好耶~赞
    czyt
        3
    czyt  
       2022-03-09 23:10:39 +08:00
    已经用上了,谢谢分享
    xxb
        4
    xxb  
       2022-03-09 23:54:21 +08:00 via iPhone
    不错,很赞!
    qile1
        5
    qile1  
       2022-03-10 00:56:38 +08:00 via Android
    能不能传人用户 id ,给其他人发送信息
    FatherMurker
        6
    FatherMurker  
    OP
       2022-03-10 08:43:56 +08:00
    @wxyrrcj 哈哈,这个仓库其实就是我的灵感来源
    FatherMurker
        7
    FatherMurker  
    OP
       2022-03-10 08:45:20 +08:00
    @czyt
    @oneisall8955
    @xxb 谢谢支持~
    FatherMurker
        8
    FatherMurker  
    OP
       2022-03-10 08:48:01 +08:00
    @qile1 不错的想法,后续会加上👍
    cuixiao603
        9
    cuixiao603  
       2022-03-10 09:05:31 +08:00
    必须要 GLIBC_2.28 吗
    mydebug
        10
    mydebug  
       2022-03-10 11:35:25 +08:00
    已用上,期待后续更新
    275761919
        11
    275761919  
       2022-03-10 11:59:05 +08:00
    很好,但还是感觉 qq bot 方便
    qile1
        12
    qile1  
       2022-03-10 12:05:47 +08:00 via Android
    @FatherMurker
    @FatherMurker
    示例: http://你的域名 /template/用户名?token=token&from=webpage&desc=Hello%20Wrold&remark=这是一条测试消
    这个用户名这是作为传人验证?把能在发送信息那里获取对应的用户名来发送给过个吗?
    qile1
        13
    qile1  
       2022-03-10 12:08:58 +08:00 via Android
    @qile1 @FatherMurker
    示例: http://你的域名 /template/用户名?token=token&from=webpage&desc=Hello%20Wrold&remark=这是一条测试消息
    这个用户名是否仅可以作为传入验证?如果能在发送信息那里获取到这个用户名来发送给对应用户模板消息就可以实现多人提醒啦?
    FatherMurker
        14
    FatherMurker  
    OP
       2022-03-10 13:34:18 +08:00
    @cuixiao603 应该不依赖吧,是在 Linux 编译出错了吗
    FatherMurker
        15
    FatherMurker  
    OP
       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
        16
    Ritter  
       2022-03-10 13:53:07 +08:00
    邮件没有接入吗
    danube533
        17
    danube533  
       2022-03-10 14:05:14 +08:00
    请问下截图里的英文字体是什么名字?
    FatherMurker
        18
    FatherMurker  
    OP
       2022-03-10 15:28:28 +08:00
    @Ritter 暂时还没有
    @danube533 小米手机默认字体 小米兰亭 Pro
    qile1
        19
    qile1  
       2022-03-11 02:10:27 +08:00 via Android
    @FatherMurker 顺便加个传递 accesstoken 的功能,这样其他接口可以和这个项目共享 token ,就可以一个公众号各个服务不冲突啦
    我个人公众号需要其他功能,如果 token 老是被更新,那就不好多个项目共存啦
    FatherMurker
        20
    FatherMurker  
    OP
       2022-03-11 13:22:36 +08:00
    @qile1 指的是让这个服务往外传 token ,还是接收外部进来的 token 呀?前者就好办,后者的话因为定时更新逻辑写死了不好动了
    qile1
        21
    qile1  
       2022-03-11 20:50:30 +08:00 via Android
    @FatherMurker 给服务传,这样发消息时候用这个服务,干别事情用其他服务就不担心 token 被更新失效啦
    bbis
        22
    bbis  
       2022-03-13 08:50:28 +08:00 via iPhone
    我就喜欢单文件运行的产品 ,回来试试,
    有个 go 语言写的东西,是 docker ,想做成单文件运行版,迫于不会 Go 语言,想加个好友探讨下
    https://cheen.cn 这里有我的联系方式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2783 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.