Python3调用企业微信用于告警
代码实现请见文末
前段时间利用py爬虫抓取一些网页信息,然后通过wxpy发送到微信群,以用作日常告警,感觉还是很方便。
但好景不长,我的小号微信被腾讯封了(很常见咯), 显示无法登录网页版微信,至今已经有半个多月了。
怎么办,已经体验过微信告警的方便后,无法回归原始人工查看了。思来想去,决定探(bai)索(du)Python调用微信企业号试试看;
一、申请企业微信
具体见企业微信官网:https://work.weixin.qq.com/wework_admin/register_wx?from=myhome_mp_home
反正比较麻烦,我是怎么申请的?我当了一次伸手党,前期有同事申请过微信公众号,后来直接升级为企业微信。经过深层次的沟通,同事给我加了个管理员权限,哈哈!
开发之前还是要认真研究一下企业微信的API文档
二、创建应用
1、管理员进入企业微信“管理后台” — “企业应用”创建应用
2、设置应用logo、名称、描述、可见范围等。
开发阶段“应用可见范围”可先选择小范围可见,待开发完成后再开放给企业员工。
三、获取access_token
开发者可以使用access_token来访问企业微信的接口。需要注意的是,所有的接口需使用Https协议、Json数据格式、UTF8编码。
请求方式:GET(HTTPS)
请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
权限说明:
每个应用有独立的secret,所以每个应用的access_token应该分开来获取
术语介绍
- corpid:每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看(需要有管理员权限)
- secret:secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。通讯录接口的密钥在“管理工具”-“通讯录同步”里面查看,企业自定义的应用的密钥可以在企业应用的详情里面手动生成
- access_token:access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限
corpid:
secret:
四、发送消息
应用支持推送文本、图片、视频、文件、图文等类型。
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
五、代码实现
import urllib.request import json #-------------------------------- # 获取企业微信token #-------------------------------- def get_token(url, corpid, corpsecret): token_url = '%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (url, corpid, corpsecret) token = json.loads(urllib.request.urlopen(token_url).read().decode())['access_token'] return token #-------------------------------- # 构建告警信息json #-------------------------------- def messages(msg): values = { "touser": '@all', "msgtype": 'text', "agentid": 1000002, #偷懒没有使用变量了,注意修改为对应应用的agentid "text": {'content': msg}, "safe": 0 } msges=(bytes(json.dumps(values), 'utf-8')) return msges #-------------------------------- # 发送告警信息 #-------------------------------- def send_message(url,token, data): send_url = '%s/cgi-bin/message/send?access_token=%s' % (url,token) respone=urllib.request.urlopen(urllib.request.Request(url=send_url, data=data)).read() x = json.loads(respone.decode())['errcode'] # print(x) if x == 0: print ('Succesfully') else: print ('Failed') ##############函数结束######################## corpid = 'wx***********************' corpsecret = 'Iwy******************************' url = 'https://qyapi.weixin.qq.com' msg='test,Python调用企业微信测试' #函数调用 test_token=get_token(url, corpid, corpsecret) msg_data= messages(msg) send_message(url,test_token, msg_data)