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过期处理
- 数据库文件权限
- 并发访问考虑
- 错误处理与重试机制
相关推荐
程序员龙叔11 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户83562907805113 小时前
使用 Python 操作 Word 内容控件
后端·python
码云骑士15 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
ApacheSeaTunnel15 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
闵孚龙15 小时前
《PyTorch 深度修炼》Dataset 和 DataLoader:数据如何喂给模型
人工智能·pytorch·python
goldenrolan16 小时前
A公司物料替代测试系统 v1.7:从需求到 exe/apk 的 AI 辅助全链路实践
android·自动化测试·软件测试·python·ai
菜板春16 小时前
jupyter入门-手册-特征探索
python·jupyter
Metaphor69216 小时前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
极光代码工作室16 小时前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化