增加一些配置性工作
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
from .wx_com import wecom_service,wxcpt
|
||||
from .wx_com import wxcpt
|
||||
from .wx_utils import get_request_params,decrypt_message,extract_message_content
|
||||
|
||||
__all__ = [
|
||||
"wecom_service",
|
||||
"wxcpt",
|
||||
"get_request_params",
|
||||
"decrypt_message",
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
from wecom_sdk.exceptions.general import SDKException
|
||||
from wecom_sdk.modules.base import WecomBaseClient
|
||||
from wecom_sdk.utils.requests import HttpxRequest
|
||||
|
||||
class WecomContactClient(WecomBaseClient):
|
||||
|
||||
async def get_contact_list(self , userid: str):
|
||||
"""
|
||||
获取联系人列表
|
||||
@param userid: 用户id
|
||||
|
||||
@return: 联系人列表
|
||||
"""
|
||||
url = self.BASE_URL + "/externalcontact/list"
|
||||
params = {"access_token": await self.access_token , "userid": userid}
|
||||
resp = await HttpxRequest.post(url=url, params=params)
|
||||
|
||||
if resp.errcode == 0:
|
||||
return resp.external_contact_list
|
||||
else:
|
||||
raise SDKException(resp.errcode, resp.errmsg)
|
||||
|
||||
async def get_contact_detail(self , external_userid: str , cursor : None | str = None):
|
||||
"""
|
||||
获取联系人详情
|
||||
@param userid: 用户id
|
||||
@param external_userid: 外部联系人id
|
||||
@param cursor: 分页游标
|
||||
|
||||
@return: 联系人详情
|
||||
"""
|
||||
url = self.BASE_URL + "/externalcontact/get"
|
||||
params = {"access_token": await self.access_token , "external_userid": external_userid }
|
||||
params.update({"cursor": cursor} if cursor else {})
|
||||
|
||||
resp = await HttpxRequest.post(url=url, params=params)
|
||||
|
||||
if resp.get("errcode") == 0:
|
||||
return resp.get("external_contact" , {})
|
||||
else:
|
||||
raise SDKException(resp.errcode, resp.errmsg)
|
||||
@@ -1,66 +0,0 @@
|
||||
from wecom_sdk.schemas.base import BaseSchema
|
||||
from typing import List, Optional
|
||||
|
||||
class TextAttr(BaseSchema):
|
||||
value: str
|
||||
|
||||
class WebAttr(BaseSchema):
|
||||
url: str
|
||||
title: str
|
||||
|
||||
class MiniProgramAttr(BaseSchema):
|
||||
appid: str
|
||||
pagepath: str
|
||||
title: str
|
||||
|
||||
class ExternalAttr(BaseSchema):
|
||||
type: int
|
||||
name: str
|
||||
text: Optional[TextAttr] = None
|
||||
web: Optional[WebAttr] = None
|
||||
miniprogram: Optional[MiniProgramAttr] = None
|
||||
|
||||
class ExternalProfile(BaseSchema):
|
||||
external_attr: List[ExternalAttr]
|
||||
|
||||
class ExternalContact(BaseSchema):
|
||||
external_userid: str
|
||||
name: str
|
||||
position: Optional[str] = None
|
||||
avatar: Optional[str] = None
|
||||
corp_name: Optional[str] = None
|
||||
corp_full_name: Optional[str] = None
|
||||
type: int
|
||||
gender: int
|
||||
unionid: Optional[str] = None
|
||||
external_profile: Optional[ExternalProfile] = None
|
||||
|
||||
class Tag(BaseSchema):
|
||||
group_name: str
|
||||
tag_name: str
|
||||
tag_id: Optional[str] = None
|
||||
type: int
|
||||
|
||||
class WechatChannels(BaseSchema):
|
||||
nickname: str
|
||||
source: int
|
||||
|
||||
class FollowUser(BaseSchema):
|
||||
userid: str
|
||||
remark: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
createtime: int
|
||||
tags: Optional[List[Tag]] = None
|
||||
remark_corp_name: Optional[str] = None
|
||||
remark_mobiles: Optional[List[str]] = None
|
||||
oper_userid: str
|
||||
add_way: int
|
||||
state: Optional[str] = None
|
||||
wechat_channels: Optional[WechatChannels] = None
|
||||
|
||||
class ContactResponse(BaseSchema):
|
||||
errcode: int
|
||||
errmsg: str
|
||||
external_contact: ExternalContact
|
||||
follow_user: List[FollowUser]
|
||||
next_cursor: Optional[str] = None
|
||||
@@ -1,13 +1,6 @@
|
||||
from uvicorn.server import logger
|
||||
from wecom_sdk import Wecom
|
||||
from utils.wxcom.modules.contact import WecomContactClient
|
||||
|
||||
from config import setting
|
||||
from .WXBizMsgCrypt3 import WXBizMsgCrypt
|
||||
|
||||
|
||||
class WecomPro(Wecom , WecomContactClient):
|
||||
pass
|
||||
from config import Settings
|
||||
from utils.wxcom.WXBizMsgCrypt3 import WXBizMsgCrypt
|
||||
|
||||
|
||||
def get_wxcpt():
|
||||
@@ -20,46 +13,22 @@ def get_wxcpt():
|
||||
try:
|
||||
# 验证企业微信配置是否完整
|
||||
required_configs = [
|
||||
setting.env.WECOM_APP_TOKEN,
|
||||
setting.env.WECOM_APP_ENCODING_AES_KEY,
|
||||
setting.env.WECOM_CORPID
|
||||
Settings().WECOM_APP_TOKEN,
|
||||
Settings().WECOM_APP_ENCODING_AES_KEY,
|
||||
Settings().WECOM_CORPID
|
||||
]
|
||||
|
||||
|
||||
if not all(required_configs):
|
||||
raise ValueError("企业微信配置不完整")
|
||||
|
||||
return WXBizMsgCrypt(
|
||||
setting.env.WECOM_APP_TOKEN, # 设置的Token
|
||||
setting.env.WECOM_APP_ENCODING_AES_KEY, # 设置密钥
|
||||
setting.env.WECOM_CORPID # 企业ID
|
||||
Settings().WECOM_APP_TOKEN, # 设置的Token
|
||||
Settings().WECOM_APP_ENCODING_AES_KEY, # 设置密钥
|
||||
Settings().WECOM_CORPID # 企业ID
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"初始化WXBizMsgCrypt失败: {str(e)}")
|
||||
raise
|
||||
|
||||
|
||||
def get_wecom_service():
|
||||
"""
|
||||
初始化并返回 Wecom 服务实例
|
||||
|
||||
:param setting_env: 配置环境对象,包含企业微信相关配置
|
||||
:return: Wecom 服务实例
|
||||
"""
|
||||
try:
|
||||
# 验证企业微信配置是否完整
|
||||
required_configs = [
|
||||
setting.env.WECOM_CORPID,
|
||||
setting.env.WECOM_CORPSECRET
|
||||
]
|
||||
if not all(required_configs):
|
||||
raise ValueError("企业微信配置不完整")
|
||||
|
||||
return WecomPro(
|
||||
corpid=setting.env.WECOM_CORPID,
|
||||
corpsecret=setting.env.WECOM_CORPSECRET
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"初始化Wecom服务失败: {str(e)}")
|
||||
raise
|
||||
|
||||
wecom_service = get_wecom_service()
|
||||
wxcpt = get_wxcpt()
|
||||
|
||||
Reference in New Issue
Block a user