fix: 星之界(xzj)与星阙共用商户证书路径及V3兜底配置
xzj 提现/查单与 xq 同读 settings 私钥目录;AppID 仍各用 club 表小程序。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,7 +19,7 @@ class Command(BaseCommand):
|
|||||||
help = '诊断微信 V3 提现签名:私钥、证书序列号、商户号是否一致'
|
help = '诊断微信 V3 提现签名:私钥、证书序列号、商户号是否一致'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
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='俱乐部 ID:xq 或 xzj')
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
club_id = (options.get('club') or CLUB_ID_DEFAULT).strip()
|
club_id = (options.get('club') or CLUB_ID_DEFAULT).strip()
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ XQ_WX_PAY = {
|
|||||||
'wx_appid': 'wx0e4be86faac4a8d1',
|
'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']
|
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:
|
if val:
|
||||||
return val, f'club.config_json.{field}'
|
return val, f'club.config_json.{field}'
|
||||||
cid = (club_id or '').strip() or CLUB_ID_DEFAULT
|
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'
|
return XQ_WX_PAY['mch_key'], 'XQ_WX_PAY.mch_key'
|
||||||
fb = (fallback_key or '').strip()
|
fb = (fallback_key or '').strip()
|
||||||
if fb:
|
if fb:
|
||||||
@@ -209,9 +212,10 @@ def get_wechat_v2_config(club_id=None):
|
|||||||
cid,
|
cid,
|
||||||
)
|
)
|
||||||
appid = ''
|
appid = ''
|
||||||
|
pay_fb = XQ_WX_PAY if cid in SHARED_WX_MERCHANT_CLUBS else {}
|
||||||
mch_id = (
|
mch_id = (
|
||||||
_pick_club_field(club, cfg_json, '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']
|
or fallback['mch_id']
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -372,14 +376,14 @@ def get_wechat_v3_config(club_id=None):
|
|||||||
except Club.DoesNotExist:
|
except Club.DoesNotExist:
|
||||||
logger.warning('club %s 不存在,使用星阙兜底或路径默认', cid)
|
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', '')
|
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', '')
|
api_v3_key = _pick_club_field(club, cfg_json, 'api_v3_key') or xq.get('api_v3_key', '')
|
||||||
|
|
||||||
# 星阙私钥路径固定用 settings(club 表可能填了旧商户 1746545364 的证书路径)
|
# 共用商户的俱乐部:私钥/证书目录与星阙相同(settings 路径 + 同目录 apiclient_cert.pem)
|
||||||
private_key_path = path_defaults['PRIVATE_KEY_PATH']
|
private_key_path = path_defaults['PRIVATE_KEY_PATH']
|
||||||
if cid != CLUB_ID_DEFAULT:
|
if cid not in SHARED_WX_MERCHANT_CLUBS:
|
||||||
private_key_path = (
|
private_key_path = (
|
||||||
_pick_club_field(club, cfg_json, 'private_key_path')
|
_pick_club_field(club, cfg_json, 'private_key_path')
|
||||||
or 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 ''
|
appid = get_club_miniapp_appid(club) if club else ''
|
||||||
if not appid and cid == CLUB_ID_DEFAULT:
|
if not appid and cid in SHARED_WX_MERCHANT_CLUBS:
|
||||||
appid = xq.get('wx_appid', '')
|
appid = xq.get('wx_appid', '') if cid == CLUB_ID_DEFAULT else ''
|
||||||
|
|
||||||
# 序列号必须从与私钥配对的 apiclient_cert.pem 读取,禁止盲用数据库/写死值
|
# 序列号必须从与私钥配对的 apiclient_cert.pem 读取,禁止盲用数据库/写死值
|
||||||
cert_serial = resolve_merchant_cert_serial(private_key_path, '')
|
cert_serial = resolve_merchant_cert_serial(private_key_path, '')
|
||||||
|
|||||||
Reference in New Issue
Block a user