From 46fe81658f679952833c6aa821b46cc6ce4bac7d Mon Sep 17 00:00:00 2001 From: aaron <> Date: Thu, 27 Feb 2025 18:41:49 +0800 Subject: [PATCH] update --- app/api/endpoints/wecom.py | 39 +++++++++++++++++++++++++++++++++++++- app/core/wecomclient.py | 2 +- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/api/endpoints/wecom.py b/app/api/endpoints/wecom.py index c902c17..890c581 100644 --- a/app/api/endpoints/wecom.py +++ b/app/api/endpoints/wecom.py @@ -10,6 +10,13 @@ import base64 from Crypto.Cipher import AES import typing import struct +from app.core.wecomclient import wecom_client +from app.models.user import UserDB +from app.api.deps import get_current_user +from fastapi import Depends +from sqlalchemy.orm import Session +from app.core.response import error_response, success_response +from pydantic import BaseModel router = APIRouter() @@ -134,4 +141,34 @@ async def wechat_corp_callback( except Exception as e: logging.exception("处理企业微信回调消息异常") - return Response(content="success", media_type="text/plain") \ No newline at end of file + return Response(content="success", media_type="text/plain") + + + +class RefreshRequest(BaseModel): + code: str + +@router.post("/refresh") +async def refresh( + request: RefreshRequest, + db: Session = Depends(get_db), + current_user: UserDB = Depends(get_current_user) +): + if current_user and (current_user.wecom_userid or current_user.wecom_pending_id): + return error_response(code=400, message="用户已绑定企业微信") + + user_info = await wecom_client.code2session(request.code) + print(f"获取到的企业微信用户信息: {user_info}") + if not user_info: + return error_response(code=400, message="获取企业微信用户信息失败") + + if user_info.get("userid"): + current_user.wecom_userid = user_info.get("userid") + else: + current_user.wecom_pending_id = user_info.get("pending_id") + + db.commit() + db.refresh(current_user) + + return success_response(message="企业微信用户信息刷新成功") + diff --git a/app/core/wecomclient.py b/app/core/wecomclient.py index b5c4d8d..c71c406 100644 --- a/app/core/wecomclient.py +++ b/app/core/wecomclient.py @@ -39,7 +39,7 @@ class WecomClient: logging.exception(f"获取企业微信访问令牌异常: {str(e)}") return None - async def miniprogram_to_userid(self, code: str) -> Optional[Dict[str, Any]]: + async def code2session(self, code: str) -> Optional[Dict[str, Any]]: """ 小程序code转换为企业微信userid