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):