微信企业号开发--通知系统(第一篇)
如果只是需要一个简易的通知系统,那么可以使用 Server酱
/* 配置方便 也比较快捷 */ 代替这些,下面的内容都是自己重复造*学习的过程 。
- 开发起因: 在开发生活中很多需要用到通知到个人的事情,例如某一api接口出现问题、某某大佬更新了博客前去膜拜等等。那么在这些情况下身为一个python 的初学者(学生),就想着怎么去利用手头的 微信/QQ 来给自己实时的通知功能。//重复造*2333
- 开发最终实现目的: 能够在web服务宕机、每日推送服务器运行信息、监控某商品价格等想要及时通知到个人的时候最快速度通知到个人
- 开发利用到的语言及模块:python3.x + flask
- 开发利用的平台:微信,企业微信
首先我们需要注册企业微信(非企业公众号)
大家可以直接通过 https://work.weixin.qq.com/ 进行注册(具体过程等有时间)
在创建好企业微信后我们需要创建一个自建应用
应用与小程序 - 应用 - 自建 - 创建应用
添加好后点击应用进入 获取你的agentid 以及secret值
打开 我的企业 --企业信息 记录下企业ID
下面的是很简单的一个给自己发送信息的一个例子
// 下面的代码写于18年09月 初学python时候一点一点写的,有些重复的代码可以优化(包括命名),原本想重新写下,想了下还是把最初的代码放上来。
// 初学时候写的代码,写的不太好,大佬们轻点吐槽。。
#encoding=utf-8
import json
import time
import requests
class WeiXinsend():
def __init__(self):
self.expireTime=7200 # token 过期时间
self.corpid='***************' # 企业ID
self.agentid = 1000002 # "企业应用" 第一行 agentid
self.corpsecret = '*********' # "企业应用" 第二行 secret
self.touser = "********" # "通讯录"->"成员详情" 的帐号 (就是你自己的账号名)
self.toparty = "1" # "通讯录" 左侧部门最右边的三个点里的ID
self.db_save = './token.json' # 保存token值的文件
self.GETaccess_token()
def GETaccess_token(self):
try:
with open(self.db_save, 'r') as load_f:
load_dict = json.load(load_f)
if load_dict['req_time'] >= (int(time.time())):
print("[+] token在有效期内")
self.access_token = load_dict['access_token']
self.access_token_time = load_dict['req_time']
return (load_dict['access_token']) # 判断tocken没有过期
else:
print("[-] token已过期")
except:
a = 1 # 没有token文件或者token过期
tokenurl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + self.corpid + "&corpsecret=" + self.corpsecret
backtokenmsg = requests.get(tokenurl).json()
# print(backtokenmsg)
if backtokenmsg['errcode'] == 0:
self.access_token = backtokenmsg['access_token']
self.access_token_time = int(time.time()) + self.expireTime - 30 # token 时间+过期时间-30秒保证不会卡点
savetoken = {
'access_token': self.access_token,
'req_time': self.access_token_time
}
with open(self.db_save, "w") as f:
json.dump(savetoken, f)
print("[+] token更新成功")
return self.access_token
def Checkaccess_token(self, Getnew=None):
'''
用来检测access_token 是否过期 如果没有过期则直接返回access_tocken的值
:Getnew: 如果不为空则重新获取一次token
:return:
'''
if Getnew == None:
if self.access_token_time >= (int(time.time())):
# 判断是否在有效期内
return self.access_token
tokenurl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + self.corpid + "&corpsecret=" + self.corpsecret
backtokenmsg = requests.get(tokenurl).json()
if backtokenmsg['errcode'] == 0:
self.access_token = backtokenmsg['access_token']
self.access_token_time = int(time.time()) + self.expireTime - 30
savetoken = {
'access_token': self.access_token,
'req_time': self.access_token_time
}
with open(self.db_save, "w") as f:
json.dump(savetoken, f)
print("[+] token更新成功")
return self.access_token
def API_sendMsg(self, content):
# 应用类send 文本信息
msg = {"touser": self.touser, "toparty": self.toparty, "msgtype": "text", "agentid": self.agentid,
"text": {"content": content}}
msg = (bytes(json.dumps(msg), 'utf-8'))
url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.Checkaccess_token()
backmsg = requests.post(url, msg).json()
if backmsg['errcode'] == 0:
print("[+] 信息发送成功")
return 0
elif backmsg['errcode'] == 42001:
url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.Checkaccess_token(Getnew=1)
backmsg = requests.post(url, msg).json()
if backmsg['errcode'] == 0:
print("[+] 信息发送成功")
return 0
else:
print("[-] 信息发送失败")
print(backmsg)
return 101
def API_sendCardMsg(self, title="1", content="Nothings", url="https://www.sgdream.cn", btntxt="查看"):
now_time = ((time.strftime('%Y-%m-%d-%H-%M', time.localtime(time.time()))).split("-"))
now_time = """<div class=\"gray\">{now_time0}年{now_time1}月{now_time2}日 {now_time3}:{now_time4}</div><div></div>""".format(
now_time0=now_time[0], now_time1=now_time[1], now_time2=now_time[2], now_time3=now_time[3],
now_time4=now_time[4])
msg = {
"touser": self.touser,
"toparty": self.toparty,
"msgtype": "textcard",
"agentid": self.agentid,
"textcard": {
"title": title,
"description": now_time + "<div class=\"normal\">" + content + "</div>",
"url": url,
"btntxt": "更多"
}
}
msg = (bytes(json.dumps(msg), 'utf-8'))
url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.Checkaccess_token()
backmsg = requests.post(url, msg).json()
if backmsg['errcode'] == 0:
print("[+] 信息发送成功")
return 0
elif backmsg['errcode'] == 42001:
url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.Checkaccess_token(Getnew=1)
backmsg = requests.post(url, msg).json()
if backmsg['errcode'] == 0:
print("[+] 信息发送成功")
return 0
else:
print("[-] 信息发送失败")
print(backmsg)
return 101
if __name__ == '__main__':
WeiXinsend().API_sendCardMsg("测试", "test")
在自己的 微信上接受到的信息效果:
题外话 : 膜 Angel_Kitty 大佬,虽然因为一些个人原因(水平比较低)不能做到博客 高产量高质量。但是也会努力加油的哈