This commit is contained in:
yumoqing 2025-12-17 11:13:15 +08:00
parent 1ebeb9581d
commit 1b1dfb7f16
2 changed files with 10 additions and 2 deletions

View File

@ -42,18 +42,21 @@ PROVIDERS = {}
# 下单接口(统一) # 下单接口(统一)
async def create_payment(request, params_kw=None): async def create_payment(request, params_kw=None):
env = request._run_ns
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 data.request = request
provider = data.get("provider") provider = data.get("provider")
if provider not in PROVIDERS: if provider not in PROVIDERS:
debug(f'{provider=} is not a valid payment channel')
return {"error":"unknown provider"} return {"error":"unknown provider"}
try: try:
if PROVIDERS[provider] is None: if PROVIDERS[provider] is None:
e = Exception(f'{provider} cannot pay') e = Exception(f'{provider} cannot pay')
exception(f'{e}') exception(f'{e}')
raise e raise e
notify_url = env.entire_url(f'providers/{provider}')
pl = PaymentLog(request._run_ns) pl = PaymentLog(request._run_ns)
fee = await get_pay_fee(provider, amount) fee = await get_pay_fee(provider, amount)
channel = get_provider_channel(provider) channel = get_provider_channel(provider)
@ -69,8 +72,11 @@ async def create_payment(request, params_kw=None):
data.out_trade_no = plog.id data.out_trade_no = plog.id
data.customerid = orgid data.customerid = orgid
data.userid = userid data.userid = userid
data.payment_name = payment_name
data.notify_url = notify_url
data.client_ip = cloent_ip data.client_ip = cloent_ip
res = await PROVIDERS[provider].create_payment(data) res = await PROVIDERS[provider].create_payment(data)
debug(f'{provider=} instance return {res}')
return res return res
raise Exception('write payment_log error') raise Exception('write payment_log error')
except Exception as e: except Exception as e:

View File

@ -5,6 +5,7 @@ import base64
import hashlib import hashlib
import urllib.parse import urllib.parse
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
from appPublic.log import debug, exception
import aiohttp import aiohttp
from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives import hashes
@ -84,10 +85,11 @@ class AlipayGateway(Gateway):
""" """
返回一个可以在 H5 里直接重定向的支付宝支付 URL 返回一个可以在 H5 里直接重定向的支付宝支付 URL
""" """
debug(f'{payload=}')
biz_content = { biz_content = {
"out_trade_no": payload["out_trade_no"], "out_trade_no": payload["out_trade_no"],
"total_amount": payload["amount"], "total_amount": payload["amount"],
"subject": payload["subject"], "subject": payload["payment_name"],
"product_code": "QUICK_WAP_WAY" "product_code": "QUICK_WAP_WAY"
} }
@ -107,7 +109,7 @@ class AlipayGateway(Gateway):
unsigned_str = self._build_sign_content(params) unsigned_str = self._build_sign_content(params)
sign = self._sign(unsigned_str) sign = self._sign(unsigned_str)
params["sign"] = sign params["sign"] = sign
debug(f'{params=}')
query_str = urllib.parse.urlencode(params) query_str = urllib.parse.urlencode(params)
return f"{ALIPAY_GATEWAY}?{query_str}" return f"{ALIPAY_GATEWAY}?{query_str}"