Python实现企业微信Token自动获取到SQLite存储

背景

我们有很多跟企业微信对接数据集成的项目,企微的access_token是有有效期的,一个应用的token可能会多个任务共用,实现了一个工具类来保存access_token

环境准备

  • Python 3.6+
  • 所需库:
    • requests(用于HTTP请求)
    • sqlite3(Python内置数据库操作)

3. 实现方案

数据库设计

我们使用SQLite作为Token存储方案,具有以下优点:

  • 单文件数据库,无需额外服务
  • 轻量级,适合小型应用
  • 支持基本的SQL操作

直接上代码

python 复制代码
#-*- coding:utf-8 -*-
#Author:Evan
#Mail:evan#chengwenit.com

#管理企微应用token

import requests
import cjcconfig
import time
import chw_sqllite_client

class workwechatapp():
    # 从企业微信获取token写入sqllite数据库的app表
    def get_qwtoken_cjcdb(self,corpid,appsecret,appname):
        """
        获取企业微信应用access_token
        appsecret:应用密钥
        appid:应用id
        return:access_token
        """
        params = {'corpId': corpid,
                'corpSecret': appsecret}
        response = requests.get(url=cjcconfig.get_token_url,params=params)
        if response.status_code == 200:
            response = response.json()
            if response['errcode'] == 0:
                print('获取token成功')
                sql = chw_sqllite_client.sqllitToolSql(cjcconfig.sqldbname)
                sql.execute("REPLACE INTO chw_qw_app (appsecret,apptoken,synctime,memo) values(?,?,?,?);",(appsecret,response['access_token'],str(time.time()),appname))
                if sql.execute:
                    print("更新token成功")
                    sql.close()
                    return True
                else:
                    print("更新token失败")
                    sql.close()
                    return False
            else:
                print('获取token失败')
                return False
        else:
            print('请求失败')
            return False   

    # 根据appname从sqllite数据库企微APP表中获取token
    def get_cjc_qw_app_token(self,appname):
        # 获取企业微信token
        sql = chw_sqllite_client.sqllitToolSql(cjcconfig.sqldbname)
        res = sql.query("select apptoken from chw_qw_app where memo=?;",(appname,))
        if res is None:
            return False
        else:
            return res[0][0]

if __name__ == "__main__":
    """
    测试代码
    """

    # 从企业微信获取token更新到sqllite中
    #x = workwechatapp()
    #applist = cjcconfig.applist
    #for i in range(len(applist)):
    #    x.get_qwtoken_cjcdb(cjcconfig.corpId,applist[i]["appsecret"],applist[i]["appname"])
    ## 从sqllite中获取token
    #a = x.get_cjc_qw_app_token("企微通讯录")
    #b = x.get_cjc_qw_app_token("企微成集云")
    #print(a)
    #print(b)
    ```
## 注意事项
- Token过期处理
- 数据库文件权限
- 并发访问考虑
- 错误处理与重试机制
相关推荐
zhaoshuzhaoshu14 分钟前
主流 AI 编程助手工具特点与对比
人工智能·python
Daydream.V15 分钟前
Python 多线程编程从入门到精通:基础 + 实战 + 避坑全攻略
python·线程·threading·线程教学
神仙别闹18 分钟前
基于Python实现(控制台)个人信息系统
开发语言·python
a95114164221 分钟前
c++如何解析二进制协议中的可选字段读取逻辑及其反序列化【详解】
jvm·数据库·python
曾阿伦28 分钟前
AES 加密解密详解及示例
python·加密解密
Hello eveybody29 分钟前
介绍最大公因数和最小公约数(Python)
开发语言·python
weixin_5806140032 分钟前
golang如何实现时间格式化_golang时间格式化方法详解
jvm·数据库·python
forEverPlume33 分钟前
c++怎么利用std--span实现在不拷贝数据的前提下解析大规模文件【进阶】
jvm·数据库·python
Ulyanov34 分钟前
《PySide6 GUI开发指南:QML核心与实践》 第十篇:综合实战——构建完整的跨平台个人管理应用
开发语言·python·qt·ui·交互·qml·雷达电子战系统仿真
aq553560037 分钟前
数字资源分发的技术革命与未来趋势
java·开发语言·python·php