This commit is contained in:
yumoqing 2025-12-16 22:21:25 +08:00
parent 4ff6d1c826
commit 7098d92f05
2 changed files with 35 additions and 7 deletions

View File

@ -13,6 +13,7 @@ CONF = {
"mail": os.getenv("MAIL", ""),
"password": os.getenv("PASSWORD", ""),
"from_mail": os.getenv("FROM_MAIL", "")
"account_no": os.getenv("ACCOUNT_NO", "")
},
"wechat": {
"mchid": os.getenv("WXP_MCHID",""),
@ -44,6 +45,7 @@ async def create_payment(request, params_kw=None):
if params_kw is None:
params_kw = request.params_kw
data = params_kw
data.request = request
provider = data.get("provider")
if provider not in PROVIDERS:
return {"error":"unknown provider"}
@ -65,6 +67,9 @@ async def create_payment(request, params_kw=None):
plog = await pl.new_log(userid, orgid, payment_name, amount, fee, client_ip, currency=currency)
if plog:
data.out_trade_no = plog.id
data.customerid = orgid
data.userid = userid
data.client_ip = cloent_ip
res = await PROVIDERS[provider].create_payment(data)
return res
raise Exception('write payment_log error')

View File

@ -1,6 +1,7 @@
import re
from random import randint
from typing import Any, Dict, Optional
import urllib
import poplib
from appPublic.log import debug
from appPublic.dictObject import DictObject
@ -62,28 +63,50 @@ class EmailClient:
content = content.decode('utf-8')
return content
class TransferPay(Gateway):
def __init__(self, from_mail="", pop3server="", email="", password=""):
class TransferGateway(Gateway):
def __init__(self, from_mail="", pop3server="", email="", password="", account_no):
self.from_email = from_email
self.pop3server = pop3server
self.email = email
self.password = password
self.account_no = account_no
self.running = False
async def new_tcode(self, sor):
tcode = self.gen_mailcode()
sql = "select * from transfercode where tcode=${tcode}$ and status='0'"
while True
recs = await sor.sqlExe(sql, {'tcode': tcode})
if len(recs) == 0:
break
tcode = self.gen_mailcode()
return tcode
async def create_payment(self, payload: Dict[str, Any]) -> str:
"""
返回一个可以在 H5 里直接重定向的支付宝支付 URL
"""
ns = {
"id": payload["out_trade_no"],
"customerid": payload['customerid'],
"amount": payload["amount"],
"tcode": self.gen_mailcode(),
"id": payload.out_trade_no,
"customerid": payload.customerid,
"amount": payload.amount,
"curdate": curDateString(),
"curtime": timestampstr(),
"status": '0'
}
return
ns = DictObject(**ns)
ns.account_no = self.account_no
env = payload.request._run_ns
db = DBPools()
dbname = env.get_module_dbname('unipay')
async with db.sqlorContext(dbname) as sor:
sql = "select * from transfercode where tcode=${tcode}$ and status='0'"
ns.tcoce = await self.new_tcode(sor)
await sor.C('transfercode', ns.copy())
url = env.entire_url('transfer_info.ui')
query_str = urllib.parse.urlencode(ns)
return f'{url}?{query_str}'
return None
def get_transfer_data(self, mail):
assert mail.mailfrom == '95555@message.cmbchina.com'