微信企业号开发(第一篇)

微信企业号开发--通知系统(第一篇)

如果只是需要一个简易的通知系统,那么可以使用 Server酱 /* 配置方便 也比较快捷 */ 代替这些,下面的内容都是自己重复造轮子学习的过程 。

  • 开发起因: 在开发生活中很多需要用到通知到个人的事情,例如某一api接口出现问题、某某大佬更新了博客前去膜拜等等。那么在这些情况下身为一个python 的初学者(学生),就想着怎么去利用手头的 微信/QQ 来给自己实时的通知功能。//重复造轮子2333
  • 开发最终实现目的: 能够在web服务宕机、每日推送服务器运行信息、监控某商品价格等想要及时通知到个人的时候最快速度通知到个人
  • 开发利用到的语言及模块:python3.x + flask
  • 开发利用的平台:微信,企业微信

首先我们需要注册企业微信(非企业公众号)

大家可以直接通过 https://work.weixin.qq.com/ 进行注册(具体过程等有时间)

在创建好企业微信后我们需要创建一个自建应用

应用与小程序 - 应用 - 自建 - 创建应用
创建应用

添加好后点击应用进入 获取你的agentid 以及secret值

获取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 大佬,虽然因为一些个人原因(水平比较低)不能做到博客 高产量高质量。但是也会努力加油的哈

猜你喜欢

转载自www.cnblogs.com/sgdream/p/10263075.html