From 7a0e87e735413726ae99af059ea3166ddaff3a0a Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 1 Jul 2026 11:51:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20get=5Fpay=5Ffee=20=E8=BF=94=E5=9B=9E=20f?= =?UTF-8?q?ee=5Frate=20=E8=80=8C=E9=9D=9E=20fee=5Frate*amount=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=8C=E9=87=8D=E4=B9=98=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit get_pay_fee() 返回 fee_rate*amount,但 create_payment() 又把返回值当 feerate 传给 new_log(),new_log() 内部又乘 一次 amount,导致 pay_fee = fee_rate * amount²。 修复: - get_pay_fee() 改为只返回 fee_rate - create_payment() 自己计算 fee = feerate * amount - new_log() 传 feerate 而非 fee --- unipay/init.py | 5 +++-- unipay/payfee.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/unipay/init.py b/unipay/init.py index fbe3793..a1c104c 100644 --- a/unipay/init.py +++ b/unipay/init.py @@ -105,7 +105,8 @@ async def create_payment(request, params_kw=None): raise e notify_url = env.entire_url(f'notify/{provider}') pl = PaymentLog(request._run_ns) - fee = await get_pay_fee(provider, data.amount) + feerate = await get_pay_fee(provider, data.amount) + fee = feerate * data.amount channel = get_provider_channel(provider) userid = await env.get_user() orgid = await env.get_userorgid() @@ -116,7 +117,7 @@ async def create_payment(request, params_kw=None): currency = data.currency plog = await pl.new_log(userid, orgid, provider, amount, - fee, client_ip, currency=currency) + feerate, client_ip, currency=currency) if plog: data.out_trade_no = plog.id data.customerid = orgid diff --git a/unipay/payfee.py b/unipay/payfee.py index 9316d86..3ff2e10 100644 --- a/unipay/payfee.py +++ b/unipay/payfee.py @@ -81,5 +81,5 @@ async def sor_get_pay_fee(sor, providerid, amount): exception(f'Exception:{e}') rec.fee_rate = 0.00 debug(f'{rec=}, {rec.fee_rate=}, {amount=}') - return rec.fee_rate * amount + return rec.fee_rate