微信企业号开发(一)
前言
有段时间要迁移zabbix,迁移之后就不太想使用原来的短信报警和email,每天收到一大堆短信或者邮件真的很烦,虽然不一定都是报警信息。后来看到有人使用微信报警,感觉这个不错,即及时,又不影响生活。
更多关注:http://www.mknight.cn/
微信企业号准备
微信企业号其实和公众号差不多,至少在我这个业余的人来说,两者都是面向用户的一种平台。但是企业号申请注册时候填写为团队,就可以省事很多,不用再提交一大堆资料,也不用申请什么认证之类的东西。
- 申请地址 https://mp.weixin.qq.com/
1、注册,记得选择的是企业号
2、填写注册信息
3、新建用户用于测试信息,也可以把用户加入到分组或者标签。
4、新建应用
5、应用设置,权限等等
这里要记住应用ID,和可见范围,以后用的到,毕竟你要知道是给谁发信息,谁又是否有权限。
连接微信企业号
主动调用是最基本的连接模式,当你的应用调用企业号时,需使用Https协议、Json数据格式、UTF8编码,访问域名为https://qyapi.weixin.qq.com,数据包不需要加密。
在每次主动调用企业号接口时需要带上AccessToken参数。AccessToken参数由CorpID和Secret换取。
CorpID是企业号的标识,每个企业号拥有一个唯一的CorpID;Secret是管理组凭证密钥。
系统管理员可通过管理端的权限管理功能创建管理组,分配管理组对应用、通讯录的访问权限。完成后,管理组即可获得唯一的secret。系统管理员可通过权限管理查看所有管理组的secret,其他管理员可通过设置中的开发者凭据查看。
当企业应用调用企业号接口时,企业号后台为根据此次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。
获取AccessToken
AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。
AccessToken需要用CorpID和Secret来换取,不同的Secret会返回不同的AccessToken。
请求说明:
- Https请求方式: GET
- 请求地址 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
请求参数:
- corpid 必须 企业Id
- corpsecret 必须 管理组的凭证密钥
import json
from urllib import request,parse
from urllib.error import HTTPError
class WeChat(object):
__token_id = ''
# init attribute
def __init__(self, url):
self.__url = url.rstrip('/')
self.__corpid = 'wxxxxxxxxxx'
self.__secret = '_2Dxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# Establish a connection
def getToken(self, data, url_prefix='/'):
#拼接URL
url = self.__url + url_prefix + 'gettoken?'
print('url',url)
try:
response = request.Request(url + data)
except KeyError:
raise KeyError
result = request.urlopen(response)
#对数据解码
content = json.loads(result.read().decode('utf-8'))
print('建立连接', content)
return content
# Get TokenID
def authID(self):
params = {'corpid': self.__corpid, 'corpsecret': self.__secret}
#对ID和secret进行编码,注意Python2和Python3的方式是不一样的
data = parse.urlencode(params)
content = self.getToken(data)
print('con',content)
try:
self.__token_id = content['access_token']
print('token', content['access_token'])
except KeyError:
raise KeyError
# Get sendmessage,url
def postData(self, data, url_prefix='/'):
#拼接URL
url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
print(url, self.__token_id)
data = data.encode('utf-8')
try:
res = request.urlopen(url, data)
except HTTPError as e:
if hasattr(e, 'reason'):
print('reason', e.reason)
elif hasattr(e, 'code'):
print('code', e.code)
return 0
else:
content = json.loads(res.read().decode('utf-8'))
res.close()
return content
# send message
def sendMessage(self, touser, subject, content):
self.authID()
data = json.dumps({
#接收者,也可以是部门或者标签
'touser': touser,
#发送数据类型,也可以为图片等等
'msgtype': "text",
#应用ID
'agentid': "1",
#文本内容,可以拼接subject和content
'text': {
'content': subject + '\n' + content
},
'safe': "0"
}, ensure_ascii=False)
response = self.postData(data)
if __name__ == '__main__':
#初始化
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
# a.sendMessage(sys.argv[1],sys.argv[2],sys.argv[3]) 用户,主题,信息
msm = '试试能不能发消息'
project = "Test"
a.sendMessage('hahah', project, msm)
这段代码很容易理解,初始化类的时候,首先执行getToken,获取token后传入authID进行验证。之后再执行sendMessage准备好要提交的数据,最后再用postData提交就结束啦。
现在既然可以做到通过企业号发信息,那么接下来的使用zabbix也必定简单多了,当然还有别的用途,比如定时发个笑话啦,天气预报啦等等。