update
This commit is contained in:
parent
d7efef091f
commit
f843a4ceb1
@ -65,7 +65,7 @@ def decrypt_msg(msg_encrypt: str, signature: str, timestamp: str, nonce: str) ->
|
|||||||
return xml_content.decode()
|
return xml_content.decode()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("解密企业微信消息失败")
|
logger.exception("解密企业微信消息失败")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@router.get("")
|
@router.get("")
|
||||||
@ -85,7 +85,7 @@ async def verify_callback(
|
|||||||
return Response(content=decrypted_str, media_type="text/plain")
|
return Response(content=decrypted_str, media_type="text/plain")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("验证回调配置失败")
|
logger.exception("验证回调配置失败")
|
||||||
return Response(status_code=403)
|
return Response(status_code=403)
|
||||||
|
|
||||||
@router.post("")
|
@router.post("")
|
||||||
@ -113,18 +113,18 @@ async def wechat_corp_callback(
|
|||||||
# 解析解密后的XML
|
# 解析解密后的XML
|
||||||
msg_root = ET.fromstring(decrypted_msg)
|
msg_root = ET.fromstring(decrypted_msg)
|
||||||
|
|
||||||
logging.info(f"企业微信回调消息:{decrypted_msg}")
|
logger.info(f"企业微信回调消息:{decrypted_msg}")
|
||||||
|
|
||||||
# 解析基本信息
|
# 解析基本信息
|
||||||
msg_type = msg_root.find('MsgType').text
|
msg_type = msg_root.find('MsgType').text
|
||||||
|
|
||||||
logging.info(f"msg_type: {msg_type}")
|
logger.info(f"msg_type: {msg_type}")
|
||||||
|
|
||||||
# 处理事件消息
|
# 处理事件消息
|
||||||
if msg_type == 'event':
|
if msg_type == 'event':
|
||||||
event = msg_root.find('Event').text
|
event = msg_root.find('Event').text
|
||||||
|
|
||||||
logging.info(f"event: {event}")
|
logger.info(f"event: {event}")
|
||||||
|
|
||||||
# 处理外部群聊变更事件
|
# 处理外部群聊变更事件
|
||||||
if event == 'change_external_chat':
|
if event == 'change_external_chat':
|
||||||
@ -134,13 +134,13 @@ async def wechat_corp_callback(
|
|||||||
|
|
||||||
join_user_id = None
|
join_user_id = None
|
||||||
if update_detail == 'add_member' and msg_root.find('JoinScene') is not None:
|
if update_detail == 'add_member' and msg_root.find('JoinScene') is not None:
|
||||||
logging.info(f"有新成员加入群聊")
|
logger.info(f"有新成员加入群聊")
|
||||||
# 获取加入的成员ID
|
# 获取加入的成员ID
|
||||||
join_user_id_elem = msg_root.find('JoinUserID')
|
join_user_id_elem = msg_root.find('JoinUserID')
|
||||||
if join_user_id_elem is not None:
|
if join_user_id_elem is not None:
|
||||||
join_user_id = join_user_id_elem.text
|
join_user_id = join_user_id_elem.text
|
||||||
|
|
||||||
logging.info(f"chat_id: {chat_id}, change_type: {change_type}, update_detail: {update_detail}, join_user_id: {join_user_id}")
|
logger.info(f"chat_id: {chat_id}, change_type: {change_type}, update_detail: {update_detail}, join_user_id: {join_user_id}")
|
||||||
|
|
||||||
# 处理群聊变更事件
|
# 处理群聊变更事件
|
||||||
await wecom_client.handle_chat_change_event(
|
await wecom_client.handle_chat_change_event(
|
||||||
@ -151,13 +151,13 @@ async def wechat_corp_callback(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if update_detail == 'add_member' and join_user_id:
|
if update_detail == 'add_member' and join_user_id:
|
||||||
logging.info(f"发送欢迎消息到群聊:{chat_id}")
|
logger.info(f"发送欢迎消息到群聊:{chat_id}")
|
||||||
await wecom_client.send_welcome_message(chat_id)
|
await wecom_client.send_welcome_message(chat_id)
|
||||||
|
|
||||||
return Response(content="success", media_type="text/plain")
|
return Response(content="success", media_type="text/plain")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("处理企业微信回调消息异常")
|
logger.exception("处理企业微信回调消息异常")
|
||||||
return Response(content="success", media_type="text/plain")
|
return Response(content="success", media_type="text/plain")
|
||||||
|
|
||||||
class UnionidToExternalUseridRequest(BaseModel):
|
class UnionidToExternalUseridRequest(BaseModel):
|
||||||
@ -194,7 +194,7 @@ async def get_external_chats(
|
|||||||
|
|
||||||
return success_response(message="获取群聊列表成功", data=chat_list)
|
return success_response(message="获取群聊列表成功", data=chat_list)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("获取群聊列表异常")
|
logger.exception("获取群聊列表异常")
|
||||||
return error_response(code=500, message=f"获取群聊列表失败: {str(e)}")
|
return error_response(code=500, message=f"获取群聊列表失败: {str(e)}")
|
||||||
|
|
||||||
@router.get("/external-chats/{chat_id}/members", response_model=ResponseModel)
|
@router.get("/external-chats/{chat_id}/members", response_model=ResponseModel)
|
||||||
@ -227,7 +227,7 @@ async def get_external_chat_members(
|
|||||||
|
|
||||||
return success_response(message="获取群聊成员列表成功", data=member_list)
|
return success_response(message="获取群聊成员列表成功", data=member_list)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("获取群聊成员列表异常")
|
logger.exception("获取群聊成员列表异常")
|
||||||
return error_response(code=500, message=f"获取群聊成员列表失败: {str(e)}")
|
return error_response(code=500, message=f"获取群聊成员列表失败: {str(e)}")
|
||||||
|
|
||||||
@router.post("/sync-chat/{chat_id}", response_model=ResponseModel)
|
@router.post("/sync-chat/{chat_id}", response_model=ResponseModel)
|
||||||
@ -254,7 +254,7 @@ async def sync_external_chat(
|
|||||||
|
|
||||||
return success_response(message="同步群聊信息成功")
|
return success_response(message="同步群聊信息成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception("同步群聊信息异常")
|
logger.exception("同步群聊信息异常")
|
||||||
return error_response(code=500, message=f"同步群聊信息失败: {str(e)}")
|
return error_response(code=500, message=f"同步群聊信息失败: {str(e)}")
|
||||||
|
|
||||||
@router.get("/chat-dashboard")
|
@router.get("/chat-dashboard")
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class WecomClient:
|
|||||||
else:
|
else:
|
||||||
raise Exception(f"获取access_token失败: {result}")
|
raise Exception(f"获取access_token失败: {result}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"获取access_token异常: {str(e)}")
|
logger.error(f"获取access_token异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def code2session(self, js_code: str) -> Optional[Dict[str, Any]]:
|
async def code2session(self, js_code: str) -> Optional[Dict[str, Any]]:
|
||||||
@ -68,11 +68,11 @@ class WecomClient:
|
|||||||
"session_key": result.get("session_key")
|
"session_key": result.get("session_key")
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
logging.error(f"code2session失败: {result}")
|
logger.error(f"code2session失败: {result}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"code2session异常: {str(e)}")
|
logger.error(f"code2session异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def get_unionid_from_userid(self, userid: str) -> Optional[str]:
|
async def get_unionid_from_userid(self, userid: str) -> Optional[str]:
|
||||||
@ -94,7 +94,7 @@ class WecomClient:
|
|||||||
|
|
||||||
return result.get("unionid")
|
return result.get("unionid")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"get_unionid_from_userid异常: {str(e)}")
|
logger.error(f"get_unionid_from_userid异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def unionid_to_external_userid(self, unionid: str, openid: str) -> Optional[str]:
|
async def unionid_to_external_userid(self, unionid: str, openid: str) -> Optional[str]:
|
||||||
@ -113,7 +113,7 @@ class WecomClient:
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"unionid_to_external_userid异常: {str(e)}")
|
logger.error(f"unionid_to_external_userid异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def send_welcome_message(self, chat_id: str, user_id: str = None) -> bool:
|
async def send_welcome_message(self, chat_id: str, user_id: str = None) -> bool:
|
||||||
@ -130,7 +130,7 @@ class WecomClient:
|
|||||||
# 1. 获取 access_token
|
# 1. 获取 access_token
|
||||||
access_token = await self.get_access_token()
|
access_token = await self.get_access_token()
|
||||||
if not access_token:
|
if not access_token:
|
||||||
logging.error("获取access_token失败")
|
logger.error("获取access_token失败")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
welcome_text = f"""🥳 欢迎您进群,在群内可以享受📦【代取快递】跑腿服务。
|
welcome_text = f"""🥳 欢迎您进群,在群内可以享受📦【代取快递】跑腿服务。
|
||||||
@ -171,11 +171,11 @@ class WecomClient:
|
|||||||
if result.get("errcode") == 0:
|
if result.get("errcode") == 0:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
logging.error(f"发送欢迎消息失败: {result}")
|
logger.error(f"发送欢迎消息失败: {result}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"发送欢迎消息异常: {str(e)}")
|
logger.error(f"发送欢迎消息异常: {str(e)}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def get_external_chat_info(self, chat_id: str) -> Optional[Dict[str, Any]]:
|
async def get_external_chat_info(self, chat_id: str) -> Optional[Dict[str, Any]]:
|
||||||
@ -190,7 +190,7 @@ class WecomClient:
|
|||||||
try:
|
try:
|
||||||
access_token = await self.get_access_token()
|
access_token = await self.get_access_token()
|
||||||
if not access_token:
|
if not access_token:
|
||||||
logging.error("获取access_token失败")
|
logger.error("获取access_token失败")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token={access_token}"
|
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token={access_token}"
|
||||||
@ -204,10 +204,10 @@ class WecomClient:
|
|||||||
if result.get("errcode") == 0:
|
if result.get("errcode") == 0:
|
||||||
return result.get("group_chat")
|
return result.get("group_chat")
|
||||||
else:
|
else:
|
||||||
logging.error(f"获取外部群聊信息失败: {result}")
|
logger.error(f"获取外部群聊信息失败: {result}")
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"获取外部群聊信息异常: {str(e)}")
|
logger.error(f"获取外部群聊信息异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def get_external_contact_info(self, external_userid: str) -> Optional[Dict[str, Any]]:
|
async def get_external_contact_info(self, external_userid: str) -> Optional[Dict[str, Any]]:
|
||||||
@ -222,7 +222,7 @@ class WecomClient:
|
|||||||
try:
|
try:
|
||||||
access_token = await self.get_access_token()
|
access_token = await self.get_access_token()
|
||||||
if not access_token:
|
if not access_token:
|
||||||
logging.error("获取access_token失败")
|
logger.error("获取access_token失败")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token={access_token}"
|
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token={access_token}"
|
||||||
@ -236,10 +236,10 @@ class WecomClient:
|
|||||||
if result.get("errcode") == 0:
|
if result.get("errcode") == 0:
|
||||||
return result.get("external_contact")
|
return result.get("external_contact")
|
||||||
else:
|
else:
|
||||||
logging.error(f"获取外部联系人信息失败: {result}")
|
logger.error(f"获取外部联系人信息失败: {result}")
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"获取外部联系人信息异常: {str(e)}")
|
logger.error(f"获取外部联系人信息异常: {str(e)}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
async def handle_chat_change_event(self, chat_id: str, change_type: str, update_detail: str, join_user_id: str = None) -> bool:
|
async def handle_chat_change_event(self, chat_id: str, change_type: str, update_detail: str, join_user_id: str = None) -> bool:
|
||||||
@ -408,7 +408,7 @@ class WecomClient:
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"处理群聊变更事件异常: {str(e)}")
|
logger.error(f"处理群聊变更事件异常: {str(e)}")
|
||||||
if 'db' in locals():
|
if 'db' in locals():
|
||||||
db.close()
|
db.close()
|
||||||
return False
|
return False
|
||||||
|
|||||||
BIN
jobs.sqlite
BIN
jobs.sqlite
Binary file not shown.
Loading…
Reference in New Issue
Block a user