From b158250d70888dc5f560508fe3f5a9f915983057 Mon Sep 17 00:00:00 2001 From: XingQue Date: Tue, 14 Jul 2026 21:36:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=88=86=E5=B9=B3=E5=8F=B0=E4=B8=8A?= =?UTF-8?q?=E9=99=90=E4=B8=8E=E5=BE=AE=E4=BF=A1=E5=95=86=E6=88=B7=E9=A2=9D?= =?UTF-8?q?=E5=BA=A6=EF=BC=8C=E5=A4=B1=E8=B4=A5=E6=97=B6=E6=98=8E=E7=A1=AE?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=B7=B2=E5=B0=9D=E8=AF=95=E7=9A=84=E5=95=86?= =?UTF-8?q?=E6=88=B7=E5=8F=B7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- yonghu/tixian_shenhe_services.py | 8 +++---- yonghu/tixian_shenhe_views.py | 39 ++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/yonghu/tixian_shenhe_services.py b/yonghu/tixian_shenhe_services.py index 52b45cf..9901fd3 100644 --- a/yonghu/tixian_shenhe_services.py +++ b/yonghu/tixian_shenhe_services.py @@ -505,7 +505,7 @@ def _check_personal_quota_readonly(user_main, leixing, jine, shenhe_danhao=''): if projected_personal > personal_quota: return ( False, - f'【平台个人限额】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元', + f'【平台个人限额·与微信商户无关·换号无效】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元', 'personal', ) return True, '', '' @@ -530,7 +530,7 @@ def _check_platform_quota_readonly(leixing, shijidaozhang, shenhe_danhao=''): ) return ( False, - f'【平台总限额】今日该角色提现已达上限,今日已提{daily_used}元,本次到账{additional}元,限额{platform_limit}元', + f'【平台总限额·与微信商户无关·换号无效】今日该角色提现已达上限,今日已提{daily_used}元,本次到账{additional}元,限额{platform_limit}元', 'platform', ) @@ -589,7 +589,7 @@ def reserve_collect_quota_limits(user_main, leixing, jine, shijidaozhang, shenhe if personal_today + jine > personal_quota: return ( False, - f'【平台个人限额】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元', + f'【平台个人限额·与微信商户无关·换号无效】今日提现已达上限,今日已提{personal_today}元,本次申请{jine}元,限额{personal_quota}元', 'personal', ) @@ -604,7 +604,7 @@ def reserve_collect_quota_limits(user_main, leixing, jine, shijidaozhang, shenhe if platform_stat.total_amount + shijidaozhang > platform_limit: return ( False, - f'【平台总限额】今日该角色提现已达上限,今日已提{platform_stat.total_amount}元,' + f'【平台总限额·与微信商户无关·换号无效】今日该角色提现已达上限,今日已提{platform_stat.total_amount}元,' f'本次到账{shijidaozhang}元,限额{platform_limit}元', 'platform', ) diff --git a/yonghu/tixian_shenhe_views.py b/yonghu/tixian_shenhe_views.py index 2f03806..dad5464 100644 --- a/yonghu/tixian_shenhe_views.py +++ b/yonghu/tixian_shenhe_views.py @@ -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)