微信是一个比较完美的消息提醒工具——基本手机必备、常驻后台、大厂免被进程被杀,不打开应用也能收到消息,利用企业微信API搭建个人微信消息提醒服务,其实比想象中要简单得多。
准备工作
注册企业微信账号,个人不需要企业也免费注册。官网 (https://work.weixin.qq.com/wework_admin/register_wx
) 填写基本信息就好。
加入企业
注册成功后进入管理后台,加入企业。
开启微信插件
登录企业微信后台,「我的企业」->「微信插件」,用微信扫码关注微信插件,即可在微信中接收企业通知和使用企业应用。
测试微信接收消息
登录企业微信后台,「应用管理」->「选择应用」->「发送消息」,选择发送范围,输入发送的消息内容。
微信正常收到推送消息,则为成功加入企业并且成功使用微信插件。
推送消息
方法一,自建企业微信应用
需要有固定IP的服务器和域名,消息为企业微信应用直接对个人,可以选择发送多人或者只给某个成员,实现一对一消息推送。
方法二,使用企业微信机器人
没有其它额外要求,所有人可以使用。消息为企业微信群内显示, 使用接口实现群内机器人发送消息,只能群发,但是可以通过建立一个只有一人+机器人的群,实现一对一消息推送效果。
自建企业微信应用推送消息
需要有固定IP的服务器和域名,如果没有可以直接看方法二。
https://work.weixin.qq.com/wework_admin/frame#/apps
1. 登录企业微信后台,找到 「应用管理」->「自建」->「创建应用」
上传应用 Logo,填写应用名称,比如我就叫它“消息助手”。
应用创建成功后,把三个关键信息记下来,它们是后续所有操作的“身份凭证”。
AgentId
应用IDSecret
应用密钥,需要用企业微信 App 扫码接收查看CorpId
企业ID,在后台「我的企业」页面,拉到页面底部查看
2. 配置企业可信IP
配置企业可信IP前,需要先设置可信域名或设置接收消息服务器URL。
2.1 设置可信域名(跟2.2 设置接收消息服务器URL二选一)
填写域名,然后点击申请校验,根据提示下载文件后,放到自己的域名根目录下,然后点击确定按钮,提示成功即可。
2.2 设置接收消息服务器URL(跟2.1 设置可信域名二选一)
https://developer.work.weixin.qq.com/document/path/90930
验证URL有效性
当点击“保存”提交以上信息时,企业微信会发送一条验证消息到填写的URL,发送方法为GET。
企业的接收消息服务器接收到验证请求后,需要作出正确的响应才能通过URL验证。
附1:发起请求及服务端处理
# 1. 假设 $_GET 参数如下
$msg_signature = "20379a6bc4ba6034743d852ecf0640d5f4c6e9cf";
$timestamp = "1752914524";
$nonce = "1752607644";
$echo_str = '8LbshUbbJqKwYrb5JvHjf2+5fKsZmzuQ4/ae3ag3oWlqA7Ng2lh/iwTWkJmmTTJ/XNrx5Rlq3mLY5bo8p9z5Bw==';
# 2. 模拟验证URL发起请求
curl 'https://www.xxx.com/wechat?msg_signature=20379a6bc4ba6034743d852ecf0640d5f4c6e9cf×tamp=1752914524&nonce=1752607644&echostr=8LbshUbbJqKwYrb5JvHjf2+5fKsZmzuQ4/ae3ag3oWlqA7Ng2lh/iwTWkJmmTTJ/XNrx5Rlq3mLY5bo8p9z5Bw%3D%3D'
# 3. 服务器需要处理
# $_GET 数据为
# Array
# (
# [msg_signature] => 20379a6bc4ba6034743d852ecf0640d5f4c6e9cf
# [timestamp] => 1752914524
# [nonce] => 1752607644
# [echostr] => 8LbshUbbJqKwYrb5JvHjf2+5fKsZmzuQ4/ae3ag3oWlqA7Ng2lh/iwTWkJmmTTJ/XNrx5Rlq3mLY5bo8p9z5Bw==
# )
#(1)对收到的请求做 Urldecode 处理
#(2)通过参数 msg_signature 对请求进行校验,确认调用者的合法性
#(3)解密 echostr 参数得到消息内容(即 msg 字段,此例 msg 为 1889695795980761982)
#(4)在1秒内原样返回明文消息内容(不能加引号,不能带bom头,不能带换行符)
附2:企业微信消息加解密规则
https://developer.work.weixin.qq.com/document/path/90968#%E5%8E%9F%E7%90%86%E8%AF%A6%E8%A7%A3
2.2.1 明文msg的加密过程
(1)拼接明文字符串
rand_msg = random(16B) + msg_len(4B) + msg + corpId
明文字符串由16个字节的随机字符串、4个字节的msg长度、明文msg和corpId拼接组成。其中msg_len为msg的字节数,网络字节序。
(2)对明文字符串加密并Base64编码
msg_encrypt = Base64_Encode(AES_Encrypt(rand_msg))
将明文字符串AESKey加密后,再进行Base64编码,即获得密文msg_encrypt。
2.2.2 密文解密得到msg的过程
(1)对密文BASE64解码
aes_msg=Base64_Decode(msg_encrypt)
(2)使用AESKey做AES-256-CBC解密
rand_msg=AES_Decrypt(aes_msg)
去掉rand_msg头部的16个随机字节和4个字节的msg_len,截取msg_len长度的部分即为msg,剩下的为尾部的 corpId
验证解密后的 corpId、msg_len。
2.3 配置企业可信IP
配置完后,就可以配置企业可信IP,多个IP地以英文;
分隔。
企业可信IP为本企业服务器的IP地址,仅所配IP可通过接口获取企业数据。
3. 发送消息
发送消息前先把需要的参数取到。
3.1. 获取 agentid
每个应用都有唯一的 agentid
。在管理后台->“应用管理”->“应用”,点进某个应用,即可看到 agentid
。
3.2. 获取 access_token
access_token
是企业后台去企业微信的后台获取信息时的重要票据,由 corpid
和 secret
产生。
# 获取的 access_token
# https://developer.work.weixin.qq.com/document/path/91039
curl 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corp_id}&corpsecret=${secret}'
注意:access_token
有效期为两小时,可以缓存起来,减少请求次数。
3.3. 获取 userid
每个成员都有唯一的userid
,即所谓“账号”。在管理后台 「通讯录」->「点击某个成员的详情页」 可以看到。
通过用户手机号码获取 userid
# 通过用户手机号码获取userid
# https://developer.work.weixin.qq.com/document/path/95402
curl -X POST 'https://qyapi.weixin.qq.com/cgi-bin/user/getuserid?access_token=${access_token}' \
-H 'content-type: application/json' \
-d '{
"mobile": "13xxxxxxxxx"
}'
3.4. 发送消息
# 发送群消息
# https://developer.work.weixin.qq.com/document/path/90248
curl -X POST 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${access_token}' \
-H 'content-type: application/json' \
-d '{
"touser": "@all",
"msgtype": "text",
"agentid": 1000002,
"text": {
"content": "Hello World"
},
"safe": 0,
"enable_id_trans": 0,
"enable_duplicate_check": 0
}'
touser
值为 @all
是群发消息,值为上一步获取的具体的 userid
则为发指定用户消息。
使用企业微信机器人推送消息
如果没有固定IP服务器和域名,上面的方法不适合,下面的方法可以适用于所有人。
- 创建与添加机器人
打开企业微信手机客户端 ,进入全员群(只要你加入了企业,就会自动进入这个群),点击右上角进入详情,选择“群机器人”,然后进入,点击右上角“添加”,然后进入后再点右上角“新建”,然后输入机器人名字,即可新建一个机器人。
建立成功后,会给你一个 Webhook 地址并且机器人已经添加到群。
- 发送消息
# content 必须是 utf8 编码
# https://developer.work.weixin.qq.com/document/path/99110
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "text",
"text": {
"content": "hello world"
}
}'
PS:发现自己在实践撰写本文过程中,企业微信管理界面已经发生改版了,之前上下栏结构,改版成现在是比较清晰的左右栏结构。