前言
有些场景下需要给自己的微信推送数据,达到通知的效果。这里的实现有很多,比如server酱等相关第三方平台,但是会随着腾讯的相关协议波动,并且有时候简短的消息需要跳转相关网页查看详情,有些许的不便,于是今天带来一种解决的办法,也就是替代品。结合服务器能做到不错的效果,也可以与合作的同学实现数据共享。

server酱首页链接
使用效果:

很明显的可以看出来,毕竟是第三方平台,不便于自己使用。
而使用企业微信的api我们可以给自己私人推送一些自己想要的数据或者是通知。也可以拉入自己小组的其他朋友,以实现数据共享。
实现步骤
注册企业微信
企业微信注册

注册后需要用到一些参数:
- 企业ID
- 应用id
- 应用密匙



访问接口

根据官方的文档我们可以清晰的看到使用步骤,这里只做部分的说明和实现。
接口定义
应用支持推送文本、图片、视频、文件、图文等类型。
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
参数说明:
参数 |
是否必须 |
备注 |
access_token |
是 |
接口凭证(有时效性) |
消息类型
文本消息
post请求data示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "touser" : "UserID1|UserID2|UserID3", "toparty" : "PartyID1|PartyID2", "totag" : "TagID1 | TagID2", "msgtype" : "text", "agentid" : 1, "text" : { "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href=\"http://work.weixin.qq.com\">邮件中心视频实况</a>,聪明避开排队。" }, "safe":0, "enable_id_trans": 0, "enable_duplicate_check": 0, "duplicate_check_interval": 1800 }
|
这里我们可以看到content中是支持a标签的,换行用转义过的\n,大概效果如下:

请求参数含义:
参数 |
是否必须 |
参数说明 |
touser |
否 |
成员ID列表(特殊情况:指定为@all,则向关注该企业应用的全部成员发送) |
toparty |
否 |
部门ID列表 |
totag |
否 |
标签ID列表 |
msgtype |
是 |
消息类型 |
agentid |
是 |
企业应用的id, int型 |
content |
是 |
消息内容,最长不超过2048个字节,超过将截断(支持id转译) |
safe |
否 |
表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0 |
enable_duplicate_check |
否 |
表示是否开启重复消息检查,0表示否,1表示是,默认0 |
duplicate_check_interval |
否 |
表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时 |
这里需要注意的是,touser、toparty、totag不能同时为空
其他消息
支持的消息类型有:

文本卡片消息展现 :

图文消息展现:

markdown示例效果:

任务卡片消息展现 :

等等等等。
值得注意的是部分消息普通微信无法查看,例如markdown类型,需要使用企业微信才可以查看,失去了我们图求的便利性,故放弃。

实例
这里放上编写的代码实例,简单调用了text类型的发送,这里的小米运动的实现可以参照之前的博文。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import requests import json from 小米运动.小米运动刷步 import domain from 爬虫基础.天气查询 import get_weather
corpid = '企业id' corpsecret = '应用密匙' token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}'.format(corpid, corpsecret) common_headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63' } ACCESS_TOKEN = requests.get(url=token_url, headers=common_headers).json().get('access_token') vx_api = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}'.format(ACCESS_TOKEN)
def send_message(message, text_type): data = { "touser": '@all', "msgtype": text_type, "agentid": '应用id', text_type: {'content': message} } data = bytes(json.dumps(data), 'utf-8') result = requests.post(url=vx_api, headers=common_headers, data=data).text print(result)
if __name__ == '__main__': weather = get_weather('无为') send_message(weather, 'text') res = domain(user=小米账号, pwd="密码", step=步数) send_message(message=res, text_type='text')
|
运行结果

根据微信企业微信的api文档,我们可以做很多的事情,例如定时任务,收到指定关键字回复消息等,可以根据服务器完美的融合。

具体请参照企业微信官网开发文档:
官方开发文档
注意事项
有时候可能根据api返回的json错误码说明,仍然不知道自己的参数在哪里出错,此时可以在接口请求url里加上debug=1参数。
然后根据返回的实例,在微信的错误码查询工具中根据hint码值查看相关错误。
错误码查询工具
