From 08fc8f50f356a373f4769066d8de629999c00418 Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 24 Jun 2026 20:40:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=9A=E4=BF=B1=E4=B9=90=E9=83=A8?= =?UTF-8?q?=E4=B8=8B=E5=8D=95=E6=8C=89=20user=5Fwx=5Fopenid=20=E5=8F=96=20?= =?UTF-8?q?openid=EF=BC=9B=E9=9B=86=E5=9B=A2=E8=B6=85=E7=AE=A1=E5=A7=8B?= =?UTF-8?q?=E7=BB=88=E5=8F=AF=E5=88=87=E4=BF=B1=E4=B9=90=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jituan/services/club_user.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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