区分平台上限与微信商户额度,失败时明确返回已尝试的商户号。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-14 21:36:28 +08:00
parent 9bcd7b3a21
commit b158250d70
2 changed files with 36 additions and 11 deletions

View File

@@ -293,9 +293,9 @@ def process_audit_collect(request):
logger.error('微信打款配置不完整 enabled_count=%s', len(mch_cfgs))
return Response({'code': 11, 'msg': '系统配置异常,请联系客服'})
if len(mch_cfgs) < 2:
logger.warning(
logger.error(
'启用且配置完整的转账商户仅 %s 个,无法轮换 mch_ids=%s '
'(后台多个启用但私钥路径无效会被跳过)',
'(后台多个启用但私钥路径无效会被跳过;微信商户日额度失败时将无法换号',
len(mch_cfgs), [c.get('MCHID') for c in mch_cfgs],
)
@@ -415,10 +415,12 @@ def process_audit_collect(request):
last_user_msg = '微信收款发起失败,请稍后重试'
last_was_balance = False
tixian_id = None
tried_mchs = []
for mch_idx, wx_cfg in enumerate(mch_cfgs):
tixian_id = generate_tixian_id()
mch_id = wx_cfg['MCHID']
tried_mchs.append(mch_id)
with transaction.atomic():
TixianAutoRecord.objects.create(
tixian_id=tixian_id,
@@ -532,6 +534,7 @@ def process_audit_collect(request):
or clear_fail
or ('额度' in err_msg)
or ('限额' in err_msg)
or ('上限' in err_msg)
or resp.status_code in (400, 401, 403)
)
@@ -587,29 +590,51 @@ def process_audit_collect(request):
TixianAutoRecord.objects.get(tixian_id=tixian_id),
)
quota_reserved = False
tried = ''.join(tried_mchs) or mch_id
if len(mch_cfgs) < 2:
return Response({
'code': 99,
'msg': (
f'仅1个可用打款商户({tried}),无法轮换。'
f'失败原因:{user_msg}。请在后台再完善并启用第二个商户(私钥须存在)。'
),
})
if ip_denied:
return Response({
'code': 99,
'msg': '所有商户均无法发起打款请检查各商户IP白名单/日额度),请联系管理员',
'msg': f'已尝试商户 {tried} 均失败含IP白名单请检查各商户配置',
})
if last_was_balance:
return Response({
'code': 99,
'msg': '运营账户资金不足,需等管理员充值后才能提现',
'msg': f'已尝试商户 {tried}运营账户资金不足,需等管理员充值后才能提现',
})
return Response({'code': 99, 'msg': user_msg})
return Response({
'code': 99,
'msg': f'已尝试商户 {tried} 均失败:{user_msg}',
})
if quota_reserved and tixian_id:
release_collect_quota_for_record(
TixianAutoRecord.objects.get(tixian_id=tixian_id),
)
quota_reserved = False
tried = ''.join(tried_mchs) if tried_mchs else ''
if last_was_balance:
return Response({
'code': 99,
'msg': '运营账户资金不足,需等管理员充值后才能提现',
'msg': (
f'已尝试商户 {tried},运营账户资金不足,需等管理员充值后才能提现'
if tried else '运营账户资金不足,需等管理员充值后才能提现'
),
})
return Response({'code': 99, 'msg': last_user_msg})
return Response({
'code': 99,
'msg': (
f'已尝试商户 {tried} 均失败:{last_user_msg}'
if tried else last_user_msg
),
})
finally:
release_lock(lock_key)