This commit is contained in:
aaron 2025-03-02 23:23:16 +08:00
parent 6254ed804e
commit dd6a466235
3 changed files with 66 additions and 48 deletions

View File

@ -1038,11 +1038,11 @@ async def complete_order(
)
db.commit()
# 如果当前订单是首单,给邀请人发放优惠券
if order.is_first_order:
# 如果当前订单是首单,如果有邀请人,给邀请人发放优惠券
if order.is_first_order and order_user.referral_code:
# 查询邀请人
invite_user = db.query(UserDB).filter(
UserDB.referral_code == order_user.user_code
UserDB.user_code == order_user.referral_code
).first()
if invite_user:

View File

@ -123,20 +123,8 @@ async def wechat_corp_callback(
chat_id = msg_root.find('ChatId').text
change_type = msg_root.find('ChangeType').text
if change_type == 'add_member':
# # 获取数据库会话
db = next(get_db())
# # 查找对应的小区
# community = db.query(CommunityDB).filter(
# CommunityDB.webot_webhook.isnot(None)
# ).first()
# if community and community.webot_webhook:
# # 发送欢迎消息
# wecom_bot = WecomBot()
# await wecom_bot.send_welcome_message(community.webot_webhook)
# if change_type == 'add_member':
# # 获取群聊成员
return Response(content="success", media_type="text/plain")
@ -145,36 +133,15 @@ async def wechat_corp_callback(
return Response(content="success", media_type="text/plain")
class UnionidToExternalUseridRequest(BaseModel):
unionid: str
openid: str
class RefreshRequest(BaseModel):
code: str
@router.get("/access_token")
async def get_access_token():
access_token = await wecom_client.get_access_token()
return success_response(message="获取企业微信access_token成功", data=access_token)
@router.post("/refresh")
async def refresh(
request: RefreshRequest,
db: Session = Depends(get_db),
current_user: UserDB = Depends(get_current_user)
@router.post("/unionid_to_external_userid")
async def unionid_to_external_userid(
request: UnionidToExternalUseridRequest
):
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="企业微信用户信息刷新成功")
"""根据unionid获取external_userid"""
result = await wecom_client.unionid_to_external_userid(request.unionid, request.openid)
print(f"根据unionid获取external_userid结果: {result}")
return success_response(message="获取external_userid成功", data=result)

View File

@ -70,5 +70,56 @@ class WecomClient:
except Exception as e:
logging.error(f"code2session异常: {str(e)}")
return None
async def unionid_to_external_userid(self, unionid: str, openid: str) -> Optional[str]:
"""根据unionid获取external_userid"""
try:
url = f"https://qyapi.weixin.qq.com/cgi-bin/idconvert/unionid_to_external_userid?access_token={await self.get_access_token()}"
params = {
"unionid": unionid,
"openid": openid,
"subject_type": 1
}
async with aiohttp.ClientSession() as session:
async with session.post(url, json=params) as response:
result = await response.json()
return result
except Exception as e:
logging.error(f"unionid_to_external_userid异常: {str(e)}")
return None
async def send_welcome_message(self, user_info: Dict[str, Any], group_id: str) -> bool:
"""发送欢迎消息"""
try:
# 1. 获取 access_token
access_token = await self.get_access_token()
if not access_token:
logging.error("获取access_token失败")
return False
# 2. 发送欢迎消息
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send"
params = {
"access_token": access_token,
"chatid": group_id,
"msgtype": "text",
"text": {
"content": f"欢迎 @{user_info['name']} 加入群聊!\n我们为您准备了专属优惠券,请查收~"
}
}
async with aiohttp.ClientSession() as session:
async with session.post(url, json=params) as response:
result = await response.json()
if result.get("errcode") == 0:
return True
else:
logging.error(f"发送欢迎消息失败: {result}")
return False
except Exception as e:
logging.error(f"发送欢迎消息异常: {str(e)}")
return False
wecom_client = WecomClient()