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

View File

@ -1,6 +1,7 @@
import re import re
from random import randint from random import randint
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
import urllib
import poplib import poplib
from appPublic.log import debug from appPublic.log import debug
from appPublic.dictObject import DictObject from appPublic.dictObject import DictObject
@ -62,28 +63,50 @@ class EmailClient:
content = content.decode('utf-8') content = content.decode('utf-8')
return content return content
class TransferPay(Gateway): class TransferGateway(Gateway):
def __init__(self, from_mail="", pop3server="", email="", password=""): def __init__(self, from_mail="", pop3server="", email="", password="", account_no):
self.from_email = from_email self.from_email = from_email
self.pop3server = pop3server self.pop3server = pop3server
self.email = email self.email = email
self.password = password self.password = password
self.account_no = account_no
self.running = False 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: async def create_payment(self, payload: Dict[str, Any]) -> str:
""" """
返回一个可以在 H5 里直接重定向的支付宝支付 URL 返回一个可以在 H5 里直接重定向的支付宝支付 URL
""" """
ns = { ns = {
"id": payload["out_trade_no"], "id": payload.out_trade_no,
"customerid": payload['customerid'], "customerid": payload.customerid,
"amount": payload["amount"], "amount": payload.amount,
"tcode": self.gen_mailcode(),
"curdate": curDateString(), "curdate": curDateString(),
"curtime": timestampstr(), "curtime": timestampstr(),
"status": '0' "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): def get_transfer_data(self, mail):
assert mail.mailfrom == '95555@message.cmbchina.com' assert mail.mailfrom == '95555@message.cmbchina.com'