fix: 星之界(xzj)与星阙共用商户证书路径及V3兜底配置

xzj 提现/查单与 xq 同读 settings 私钥目录;AppID 仍各用 club 表小程序。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-10 22:57:21 +08:00
parent 6ac32674a5
commit 48eca8e5d0
2 changed files with 12 additions and 8 deletions

View File

@@ -19,7 +19,7 @@ class Command(BaseCommand):
help = '诊断微信 V3 提现签名:私钥、证书序列号、商户号是否一致'
def add_arguments(self, parser):
parser.add_argument('--club', default=CLUB_ID_DEFAULT, help='俱乐部 ID,默认 xq')
parser.add_argument('--club', default=CLUB_ID_DEFAULT, help='俱乐部 IDxq 或 xzj')
def handle(self, *args, **options):
club_id = (options.get('club') or CLUB_ID_DEFAULT).strip()

View File

@@ -20,6 +20,9 @@ XQ_WX_PAY = {
'wx_appid': 'wx0e4be86faac4a8d1',
}
# 与星阙共用同一微信商户号/证书目录的俱乐部AppID 各读各的 club 表)
SHARED_WX_MERCHANT_CLUBS = frozenset({CLUB_ID_DEFAULT, 'xzj'})
# 兼容旧引用
WX_V3_CERT_SERIAL_NO_OVERRIDE = XQ_WX_PAY['cert_serial_no']
@@ -161,7 +164,7 @@ def _resolve_v2_mch_key(club, cfg_json, fallback_key, club_id=None):
if val:
return val, f'club.config_json.{field}'
cid = (club_id or '').strip() or CLUB_ID_DEFAULT
if cid == CLUB_ID_DEFAULT and XQ_WX_PAY['mch_key']:
if cid in SHARED_WX_MERCHANT_CLUBS and XQ_WX_PAY['mch_key']:
return XQ_WX_PAY['mch_key'], 'XQ_WX_PAY.mch_key'
fb = (fallback_key or '').strip()
if fb:
@@ -209,9 +212,10 @@ def get_wechat_v2_config(club_id=None):
cid,
)
appid = ''
pay_fb = XQ_WX_PAY if cid in SHARED_WX_MERCHANT_CLUBS else {}
mch_id = (
_pick_club_field(club, cfg_json, 'mch_id')
or (XQ_WX_PAY['mch_id'] if cid == CLUB_ID_DEFAULT else '')
or pay_fb.get('mch_id', '')
or fallback['mch_id']
)
@@ -372,14 +376,14 @@ def get_wechat_v3_config(club_id=None):
except Club.DoesNotExist:
logger.warning('club %s 不存在,使用星阙兜底或路径默认', cid)
xq = XQ_WX_PAY if cid == CLUB_ID_DEFAULT else {}
xq = XQ_WX_PAY if cid in SHARED_WX_MERCHANT_CLUBS else {}
mch_id = _pick_club_field(club, cfg_json, 'mch_id') or xq.get('mch_id', '')
api_v3_key = _pick_club_field(club, cfg_json, 'api_v3_key') or xq.get('api_v3_key', '')
# 星阙私钥路径固定用 settingsclub 表可能填了旧商户 1746545364 的证书路径
# 共用商户的俱乐部:私钥/证书目录与星阙相同settings 路径 + 同目录 apiclient_cert.pem
private_key_path = path_defaults['PRIVATE_KEY_PATH']
if cid != CLUB_ID_DEFAULT:
if cid not in SHARED_WX_MERCHANT_CLUBS:
private_key_path = (
_pick_club_field(club, cfg_json, 'private_key_path')
or private_key_path
@@ -395,8 +399,8 @@ def get_wechat_v3_config(club_id=None):
)
appid = get_club_miniapp_appid(club) if club else ''
if not appid and cid == CLUB_ID_DEFAULT:
appid = xq.get('wx_appid', '')
if not appid and cid in SHARED_WX_MERCHANT_CLUBS:
appid = xq.get('wx_appid', '') if cid == CLUB_ID_DEFAULT else ''
# 序列号必须从与私钥配对的 apiclient_cert.pem 读取,禁止盲用数据库/写死值
cert_serial = resolve_merchant_cert_serial(private_key_path, '')