diff --git a/jituan/services/club_user.py b/jituan/services/club_user.py index dc8a756..ea91401 100644 --- a/jituan/services/club_user.py +++ b/jituan/services/club_user.py @@ -32,3 +32,28 @@ def ensure_user_club_id(user, club_id): if current != club_id and hasattr(user, 'ClubID'): user.ClubID = club_id user.save(update_fields=['ClubID']) + + +def get_wx_openid_for_user(user, club_id=None): + """ + 按俱乐部取微信支付 JSAPI 用 openid。 + 多俱乐部用户 openid 在 user_wx_openid;xq 老用户可回落 User.OpenID。 + """ + if not user: + return '' + cid = (club_id or '').strip() or get_user_club_id(user) + uid = getattr(user, 'UserUID', None) or getattr(user, 'yonghuid', None) + if uid and cid: + binding = UserWxOpenid.query.filter(yonghuid=uid, club_id=cid).first() + if binding and binding.openid: + return binding.openid + legacy = getattr(user, 'OpenID', None) or getattr(user, 'openid', None) + return legacy or '' + + +def get_payment_openid(request, user=None, club_id=None): + """下单/充值:按请求俱乐部解析 openid。""" + from jituan.services.club_write import resolve_club_id_for_write + user = user or getattr(request, 'user', None) + cid = club_id or resolve_club_id_for_write(request, user) + return get_wx_openid_for_user(user, cid), cid