diff --git a/unipay/init.py b/unipay/init.py index 6342bc0..39cc7e4 100644 --- a/unipay/init.py +++ b/unipay/init.py @@ -1,5 +1,6 @@ # init.py import os +from appPublic.log import log,exception from ahserver.serverenv import ServerEnv from .notify import get_provider, get_provider_channel from .paylog import PaymentLog @@ -40,6 +41,10 @@ async def create_payment(request, params_kw=None): if provider not in PROVIDERS: return {"error":"unknown provider"} try: + if PROVIDERS[provider] is None: + e = Exception(f'{provider} cannot pay') + exception(f'{e}') + raise e pl = PaymentLog(request._run_ns) channel = get_provider_channel(provider) userid = await get_suer() @@ -67,6 +72,10 @@ async def query_payment(request, params_kw=None): if provider not in PROVIDERS: return {"error":"unknown provider"} try: + if PROVIDERS[provider] is None: + e = Exception(f'{provider} cannot pay') + exception(f'{e}') + raise e res = await PROVIDERS[provider].query(data) return res except Exception as e: @@ -81,6 +90,10 @@ async def refund_payment(request, params_kw=None): if provider not in PROVIDERS: return {"error":"unknown provider"} try: + if PROVIDERS[provider] is None: + e = Exception(f'{provider} cannot pay') + exception(f'{e}') + raise e res = await PROVIDERS[provider].refund(data) return res except Exception as e: @@ -95,6 +108,10 @@ async def payment_notify(request, callback, params_kw=None): headers = dict(request.headers) body = await request.text() 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 应包含标准化字段:out_trade_no/status/attach 等 # TODO: 业务幂等处理 diff --git a/unipay/notify.py b/unipay/notify.py index 1bf237d..96ba22c 100644 --- a/unipay/notify.py +++ b/unipay/notify.py @@ -17,13 +17,16 @@ def get_provider_channel(name:str): return channels.get(name, '9') def get_provider(name: str, conf: Dict): - if name == "wechat": - return WechatGateway(**conf) - if name == "paypal": - return PaypalGateway(**conf) - if name == "alipay": - return AlipayGateway(**conf) - if name == "stripe": - return StripeGateway(**conf) - raise ValueError("unknown provider") + try: + if name == "wechat": + return WechatGateway(**conf) + if name == "paypal": + return PaypalGateway(**conf) + if name == "alipay": + return AlipayGateway(**conf) + if name == "stripe": + return StripeGateway(**conf) + except: + return None + raise ValueError("unknown provider")