This commit is contained in:
yumoqing 2025-12-12 17:56:12 +08:00
parent b30303214e
commit 8e71c942e7
2 changed files with 29 additions and 9 deletions

View File

@ -1,5 +1,6 @@
# init.py # init.py
import os import os
from appPublic.log import log,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
@ -40,6 +41,10 @@ async def create_payment(request, params_kw=None):
if provider not in PROVIDERS: if provider not in PROVIDERS:
return {"error":"unknown provider"} return {"error":"unknown provider"}
try: try:
if PROVIDERS[provider] is None:
e = Exception(f'{provider} cannot pay')
exception(f'{e}')
raise e
pl = PaymentLog(request._run_ns) pl = PaymentLog(request._run_ns)
channel = get_provider_channel(provider) channel = get_provider_channel(provider)
userid = await get_suer() userid = await get_suer()
@ -67,6 +72,10 @@ async def query_payment(request, params_kw=None):
if provider not in PROVIDERS: if provider not in PROVIDERS:
return {"error":"unknown provider"} return {"error":"unknown provider"}
try: try:
if PROVIDERS[provider] is None:
e = Exception(f'{provider} cannot pay')
exception(f'{e}')
raise e
res = await PROVIDERS[provider].query(data) res = await PROVIDERS[provider].query(data)
return res return res
except Exception as e: except Exception as e:
@ -81,6 +90,10 @@ async def refund_payment(request, params_kw=None):
if provider not in PROVIDERS: if provider not in PROVIDERS:
return {"error":"unknown provider"} return {"error":"unknown provider"}
try: try:
if PROVIDERS[provider] is None:
e = Exception(f'{provider} cannot pay')
exception(f'{e}')
raise e
res = await PROVIDERS[provider].refund(data) res = await PROVIDERS[provider].refund(data)
return res return res
except Exception as e: except Exception as e:
@ -95,6 +108,10 @@ async def payment_notify(request, callback, params_kw=None):
headers = dict(request.headers) headers = dict(request.headers)
body = await request.text() body = await request.text()
try: try:
if PROVIDERS[provider] is None:
e = Exception(f'{provider} cannot pay')
exception(f'{e}')
raise e
data = await PROVIDERS[provider].handle_notify(headers, body) data = await PROVIDERS[provider].handle_notify(headers, body)
# 这里 data 应包含标准化字段out_trade_no/status/attach 等 # 这里 data 应包含标准化字段out_trade_no/status/attach 等
# TODO: 业务幂等处理 # TODO: 业务幂等处理

View File

@ -17,13 +17,16 @@ def get_provider_channel(name:str):
return channels.get(name, '9') return channels.get(name, '9')
def get_provider(name: str, conf: Dict): def get_provider(name: str, conf: Dict):
if name == "wechat": try:
return WechatGateway(**conf) if name == "wechat":
if name == "paypal": return WechatGateway(**conf)
return PaypalGateway(**conf) if name == "paypal":
if name == "alipay": return PaypalGateway(**conf)
return AlipayGateway(**conf) if name == "alipay":
if name == "stripe": return AlipayGateway(**conf)
return StripeGateway(**conf) if name == "stripe":
raise ValueError("unknown provider") return StripeGateway(**conf)
except:
return None
raise ValueError("unknown provider")