From ce86b488d9e9092f29f682d13c5f01848bb2f229 Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 22 Jul 2026 21:00:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E6=97=B6=E8=BF=94=E5=9B=9E=E6=98=8E=E7=A1=AE?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E9=99=84=E5=B1=9E=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=B8=8D=E9=98=BB=E6=96=AD=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 避免 staff/订单统计异常导致整次 wechat-login 500;缺俱乐部配置时提示更清晰。 Co-authored-by: Cursor --- jituan/services/club_resolver.py | 9 ++++++++- jituan/services/wechat_login.py | 21 +++++++++++++++------ jituan/views.py | 8 ++++++-- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/jituan/services/club_resolver.py b/jituan/services/club_resolver.py index 686340b..191e8d5 100644 --- a/jituan/services/club_resolver.py +++ b/jituan/services/club_resolver.py @@ -39,10 +39,14 @@ def resolve_club_by_appid(app_id): def get_club_wx_credentials(club_id): """优先读 club 表;xq 缺省时回退 settings 全局配置(兼容现网)。""" club_id = club_id or CLUB_ID_DEFAULT + club = None try: club = Club.query.get(club_id=club_id) except Club.DoesNotExist: club = None + except Exception: + logger.exception('读取俱乐部失败 club_id=%s', club_id) + club = None appid = get_club_miniapp_appid(club) secret = (club.wx_secret or '').strip() if club else '' @@ -55,7 +59,10 @@ def get_club_wx_credentials(club_id): getattr(settings, 'WEIXIN_SECRET', ''), club, ) - return '', '', club + # 非默认俱乐部未配置时给出明确原因,避免后续空指针 500 + if not club: + return '', '', None + return appid or '', secret or '', club def _invite_code_from_request(request): diff --git a/jituan/services/wechat_login.py b/jituan/services/wechat_login.py index 5f5b6c2..4c1d3b0 100644 --- a/jituan/services/wechat_login.py +++ b/jituan/services/wechat_login.py @@ -161,13 +161,22 @@ def login_or_register_by_club(code, club_id=None, app_id=None, client_ip=''): refresh = RefreshToken.for_user(user) token = str(refresh.access_token) - from merchant_ops.services.authz import staff_fields_for_login - from users.views import WechatMiniProgramLoginView - staff_fields = staff_fields_for_login(user) + staff_fields = {} + order_counts = {} + group_info = {} + try: + from merchant_ops.services.authz import staff_fields_for_login + staff_fields = staff_fields_for_login(user) or {} + except Exception: + logger.exception('staff_fields_for_login 失败 uid=%s', getattr(user, 'UserUID', '')) - login_view = WechatMiniProgramLoginView() - order_counts = login_view.jisuanOrderShuliang(user.UserUID) - group_info = login_view.huoquQunPeizhi() + try: + from users.views import WechatMiniProgramLoginView + login_view = WechatMiniProgramLoginView() + order_counts = login_view.jisuanOrderShuliang(user.UserUID) or {} + group_info = login_view.huoquQunPeizhi() or {} + except Exception: + logger.exception('登录附属信息失败 uid=%s', getattr(user, 'UserUID', '')) data = { 'token': token, diff --git a/jituan/views.py b/jituan/views.py index c55ad8c..362e087 100644 --- a/jituan/views.py +++ b/jituan/views.py @@ -66,13 +66,17 @@ class ClubWechatLoginView(APIView): code, club_id=club_id, app_id=app_id, client_ip=_client_ip(request), ) if err: + # 配置缺失 / 微信侧错误:明确 400,方便小程序提示运营配 AppSecret return Response({'code': 2, 'msg': f'微信登录失败: {err}', 'data': None}, status=status.HTTP_400_BAD_REQUEST) return Response({'code': 0, 'msg': '登录成功', 'data': data}) except Exception as e: logger.exception('ClubWechatLoginView 异常') - return Response({'code': 99, 'msg': '系统繁忙,请稍后重试', 'data': None}, - status=status.HTTP_500_INTERNAL_SERVER_ERROR) + return Response({ + 'code': 99, + 'msg': f'登录异常: {type(e).__name__}: {e}', + 'data': None, + }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) class ClubWxBindRefreshView(APIView):