diff --git a/app/api/endpoints/wechat.py b/app/api/endpoints/wechat.py index 73c686f..905915b 100644 --- a/app/api/endpoints/wechat.py +++ b/app/api/endpoints/wechat.py @@ -68,7 +68,7 @@ async def wechat_phone_login( # # 获取企业微信的 userid wecom_client = WecomClient() - wecom_info = await wecom_client.miniprogram_to_userid(request.login_code) + wecom_info = await wecom_client.miniprogram_to_userid(openid=openid) print(f"获取到的企业微信用户信息: {wecom_info}") wecom_userid = None diff --git a/app/core/wecomclient.py b/app/core/wecomclient.py index d6f13e6..8b9c4d6 100644 --- a/app/core/wecomclient.py +++ b/app/core/wecomclient.py @@ -34,37 +34,42 @@ class WecomClient: logging.error(f"获取access_token失败: {str(e)}") raise - async def miniprogram_to_userid(self, code: str) -> Optional[Dict]: + async def miniprogram_to_userid(self, openid: str) -> Optional[Dict]: """ - 小程序code转换为企业微信userid - 注意:这里使用code而不是openid + 转换小程序身份到企业微信 + 可以使用code或openid """ try: + # 获取provider_token + provider_token = await self.get_provider_token() + + # 构建请求参数 url = "https://qyapi.weixin.qq.com/cgi-bin/miniprogram/jscode2session" params = { "access_token": await self.get_access_token(), - "js_code": code, - "grant_type": "authorization_code" + "appid": settings.WECHAT_APPID, } + # 根据传入参数类型选择 + params["openid"] = openid + async with aiohttp.ClientSession() as session: async with session.get(url, params=params) as response: result = await response.json() - print(result) + logging.info(f"转换结果: {result}") if result.get("errcode") == 0: - data = { - "userid": result.get("userid"), - "pending_id": result.get("pending_id"), + return { + "userid": result.get("userid"), # 如果是企业成员,返回userid + "pending_id": result.get("pending_id"), # 如果是外部联系人,返回pending_id + "openid": result.get("openid"), "session_key": result.get("session_key") } - return data else: - logging.error(f"code转换失败: {result}") + logging.error(f"身份转换失败: {result}") return None - except Exception as e: - logging.error(f"code转换失败: {str(e)}") + logging.error(f"身份转换失败: {str(e)}") return None async def get_user_info(self, userid: str) -> Optional[Dict]: