Compare commits

..

2 Commits

Author SHA1 Message Date
f07ff87209 bugfix 2025-12-15 15:37:40 +08:00
26e2598125 bugfix 2025-12-15 15:34:12 +08:00
3 changed files with 72 additions and 8 deletions

View File

@ -4,11 +4,12 @@
"params": { "params": {
"sortby": "id", "sortby": "id",
"browserfields": { "browserfields": {
"exclouded": [], "exclouded": ["id"],
"alters": { "alters": {
} }
}, },
"editexclouded": [ "editexclouded": [
"id"
] ]
} }
} }

View File

@ -4,7 +4,7 @@ from appPublic.log import debug,exception
from ahserver.serverenv import ServerEnv from ahserver.serverenv import ServerEnv
from .notify import get_provider, get_provider_channel from .notify import get_provider, get_provider_channel
from .paylog import PaymentLog from .paylog import PaymentLog
from .payfee import get_pay_fee, sor_get_pay_fee from .payfee import get_pay_fee, sor_get_pay_fee, get_paychannels, get_pay_feerate
# 从 env 或配置载入 provider conf这里只示例 # 从 env 或配置载入 provider conf这里只示例
CONF = { CONF = {
@ -137,6 +137,8 @@ def load_unipay():
PROVIDERS["alipay"] = get_provider("alipay", CONF["alipay"]), PROVIDERS["alipay"] = get_provider("alipay", CONF["alipay"]),
PROVIDERS["stripe"] = get_provider("stripe", CONF["stripe"]) PROVIDERS["stripe"] = get_provider("stripe", CONF["stripe"])
env = ServerEnv() env = ServerEnv()
env.get_paychannels = get_paychannels
env.get_pay_feerate = get_pay_feerate
env.payment_notify = payment_notify env.payment_notify = payment_notify
env.create_payment = create_payment env.create_payment = create_payment
env.query_payment = query_payment env.query_payment = query_payment

View File

@ -1,6 +1,7 @@
# payfee # payfee
from ahserver.serverenv import ServerEnv from ahserver.serverenv import ServerEnv
from sqlor.dbpools import DBPools from sqlor.dbpools import DBPools
async def get_pay_fee(providerid, amount): async def get_pay_fee(providerid, amount):
db = DBPools() db = DBPools()
env = ServerEnv() env = ServerEnv()
@ -9,10 +10,70 @@ async def get_pay_fee(providerid, amount):
return await sor_get_pay_fee(sor, providerid, amount) return await sor_get_pay_fee(sor, providerid, amount)
return None return None
async def sor_get_pay_fee(sor, providerid, amount): async def get_paychannels():
sql = """select * from payfee where id=${providerid}$""" env = ServerEnv()
recs = await sor.sqlExe(sql, {'id': providerid}) db = DBPools()
if len(recs) < 1: dbname = env.get_module_dbname('unipay')
async with db.sqlorContext(dbname) as sor:
return await sor_get_paychannels(sor)
return None return None
return amount * recs[0].fee_rate * amount
async def sor_get_paychannels(sor):
env = ServerEnv()
dbname = env.get_module_dbname('unipay')
biz_date = env.get_business_date(sor)
sql = """select
a.id, a.name, b.fee_rate
from paychannel a left join payfee b
on a.id = b.channelid
where
a.enabled_date <= ${biz_date}$
and a.expired_date >= ${biz_date}$
and b.enabled_date <= ${biz_date}$
and b.expired_date >= ${biz_date}$
"""
recs = await sor.sqlExe(sql, {'channelid': channelid,
'biz_date': biz_date})
return recs
async def get_pay_feerate(sor, channelid):
env = ServerEnv()
db = DBPools()
dbname = env.get_module_dbname('unipay')
async with db.sqlorContext(dbname) as sor:
return await sor_get_pay_feerate(sor, channelid)
return None
async def sor_get_pay_feerate(sor, channelid):
env = ServerEnv()
dbname = env.get_module_dbname('unipay')
biz_date = env.get_business_date(sor)
sql = """select
a.id, a.name, b.fee_rate
from paychannel a left join payfee b
on a.id = b.channelid
where
a.enabled_date <= ${biz_date}$
and a.expired_date >= ${biz_date}$
and b.enabled_date <= ${biz_date}$
and b.expired_date >= ${biz_date}$
and a.id = ${channelid}$
"""
recs = await sor.sqlExe(sql, {'channelid': channelid,
'biz_date': biz_date})
if len(recs) > 0:
return recs[0]
return None
async def sor_get_pay_fee(sor, providerid, amount):
rec = await sor_get_pay_feerate(sor, providerid)
if rec is None:
e = Exception(f'{providerid} pay channel not found')
exception(f'Exception:{e}')
raise e
if rec.fee_rate is None:
e = Exception(f'{providerid} channel has not defined fee rate')
exception(f'Exception:{e}')
raise e
return rec.fee_rate * amount