区分平台上限与微信商户额度,失败时明确返回已尝试的商户号。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -505,7 +505,7 @@ def _check_personal_quota_readonly(user_main, leixing, jine, shenhe_danhao=''):
|
|||||||
if projected_personal > personal_quota:
|
if projected_personal > personal_quota:
|
||||||
return (
|
return (
|
||||||
False,
|
False,
|
||||||
f'【平台个人限额】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元',
|
f'【平台个人限额·与微信商户无关·换号无效】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元',
|
||||||
'personal',
|
'personal',
|
||||||
)
|
)
|
||||||
return True, '', ''
|
return True, '', ''
|
||||||
@@ -530,7 +530,7 @@ def _check_platform_quota_readonly(leixing, shijidaozhang, shenhe_danhao=''):
|
|||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
False,
|
False,
|
||||||
f'【平台总限额】今日该角色提现已达上限,今日已提{daily_used}元,本次到账{additional}元,限额{platform_limit}元',
|
f'【平台总限额·与微信商户无关·换号无效】今日该角色提现已达上限,今日已提{daily_used}元,本次到账{additional}元,限额{platform_limit}元',
|
||||||
'platform',
|
'platform',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -589,7 +589,7 @@ def reserve_collect_quota_limits(user_main, leixing, jine, shijidaozhang, shenhe
|
|||||||
if personal_today + jine > personal_quota:
|
if personal_today + jine > personal_quota:
|
||||||
return (
|
return (
|
||||||
False,
|
False,
|
||||||
f'【平台个人限额】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元',
|
f'【平台个人限额·与微信商户无关·换号无效】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元',
|
||||||
'personal',
|
'personal',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -604,7 +604,7 @@ def reserve_collect_quota_limits(user_main, leixing, jine, shijidaozhang, shenhe
|
|||||||
if platform_stat.total_amount + shijidaozhang > platform_limit:
|
if platform_stat.total_amount + shijidaozhang > platform_limit:
|
||||||
return (
|
return (
|
||||||
False,
|
False,
|
||||||
f'【平台总限额】今日该角色提现已达上限,今日已提{platform_stat.total_amount}元,'
|
f'【平台总限额·与微信商户无关·换号无效】今日该角色提现已达上限,今日已提{platform_stat.total_amount}元,'
|
||||||
f'本次到账{shijidaozhang}元,限额{platform_limit}元',
|
f'本次到账{shijidaozhang}元,限额{platform_limit}元',
|
||||||
'platform',
|
'platform',
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -293,9 +293,9 @@ def process_audit_collect(request):
|
|||||||
logger.error('微信打款配置不完整 enabled_count=%s', len(mch_cfgs))
|
logger.error('微信打款配置不完整 enabled_count=%s', len(mch_cfgs))
|
||||||
return Response({'code': 11, 'msg': '系统配置异常,请联系客服'})
|
return Response({'code': 11, 'msg': '系统配置异常,请联系客服'})
|
||||||
if len(mch_cfgs) < 2:
|
if len(mch_cfgs) < 2:
|
||||||
logger.warning(
|
logger.error(
|
||||||
'启用且配置完整的转账商户仅 %s 个,无法轮换 mch_ids=%s '
|
'启用且配置完整的转账商户仅 %s 个,无法轮换 mch_ids=%s '
|
||||||
'(后台多个启用但私钥路径无效会被跳过)',
|
'(后台多个启用但私钥路径无效会被跳过;微信商户日额度失败时将无法换号)',
|
||||||
len(mch_cfgs), [c.get('MCHID') for c in mch_cfgs],
|
len(mch_cfgs), [c.get('MCHID') for c in mch_cfgs],
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -415,10 +415,12 @@ def process_audit_collect(request):
|
|||||||
last_user_msg = '微信收款发起失败,请稍后重试'
|
last_user_msg = '微信收款发起失败,请稍后重试'
|
||||||
last_was_balance = False
|
last_was_balance = False
|
||||||
tixian_id = None
|
tixian_id = None
|
||||||
|
tried_mchs = []
|
||||||
|
|
||||||
for mch_idx, wx_cfg in enumerate(mch_cfgs):
|
for mch_idx, wx_cfg in enumerate(mch_cfgs):
|
||||||
tixian_id = generate_tixian_id()
|
tixian_id = generate_tixian_id()
|
||||||
mch_id = wx_cfg['MCHID']
|
mch_id = wx_cfg['MCHID']
|
||||||
|
tried_mchs.append(mch_id)
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
TixianAutoRecord.objects.create(
|
TixianAutoRecord.objects.create(
|
||||||
tixian_id=tixian_id,
|
tixian_id=tixian_id,
|
||||||
@@ -532,6 +534,7 @@ def process_audit_collect(request):
|
|||||||
or clear_fail
|
or clear_fail
|
||||||
or ('额度' in err_msg)
|
or ('额度' in err_msg)
|
||||||
or ('限额' in err_msg)
|
or ('限额' in err_msg)
|
||||||
|
or ('上限' in err_msg)
|
||||||
or resp.status_code in (400, 401, 403)
|
or resp.status_code in (400, 401, 403)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -587,29 +590,51 @@ def process_audit_collect(request):
|
|||||||
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
||||||
)
|
)
|
||||||
quota_reserved = False
|
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:
|
if ip_denied:
|
||||||
return Response({
|
return Response({
|
||||||
'code': 99,
|
'code': 99,
|
||||||
'msg': '所有商户均无法发起打款(请检查各商户IP白名单/日额度),请联系管理员',
|
'msg': f'已尝试商户 {tried} 均失败(含IP白名单),请检查各商户配置',
|
||||||
})
|
})
|
||||||
if last_was_balance:
|
if last_was_balance:
|
||||||
return Response({
|
return Response({
|
||||||
'code': 99,
|
'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:
|
if quota_reserved and tixian_id:
|
||||||
release_collect_quota_for_record(
|
release_collect_quota_for_record(
|
||||||
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
||||||
)
|
)
|
||||||
quota_reserved = False
|
quota_reserved = False
|
||||||
|
tried = '、'.join(tried_mchs) if tried_mchs else ''
|
||||||
if last_was_balance:
|
if last_was_balance:
|
||||||
return Response({
|
return Response({
|
||||||
'code': 99,
|
'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:
|
finally:
|
||||||
release_lock(lock_key)
|
release_lock(lock_key)
|
||||||
|
|||||||
Reference in New Issue
Block a user