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过期处理
- 数据库文件权限
- 并发访问考虑
- 错误处理与重试机制
相关推荐
IVEN_13 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang14 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮14 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling14 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮17 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽18 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞1 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽2 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers