bugfix
This commit is contained in:
parent
d05234452f
commit
80df557919
Binary file not shown.
136
unipay/init.py
136
unipay/init.py
@ -6,27 +6,27 @@ from paylog import PaymentLog
|
|||||||
|
|
||||||
# 从 env 或配置载入 provider conf(这里只示例)
|
# 从 env 或配置载入 provider conf(这里只示例)
|
||||||
CONF = {
|
CONF = {
|
||||||
"wechat": {
|
"wechat": {
|
||||||
"mchid": os.getenv("WXP_MCHID",""),
|
"mchid": os.getenv("WXP_MCHID",""),
|
||||||
"serial_no": os.getenv("WXP_SERIAL",""),
|
"serial_no": os.getenv("WXP_SERIAL",""),
|
||||||
"privkey_pem": open(os.getenv("WXP_PRIVKEY","./merchant_private_key.pem"),"rb").read(),
|
"privkey_pem": open(os.getenv("WXP_PRIVKEY","./merchant_private_key.pem"),"rb").read(),
|
||||||
"platform_pub_pem": open(os.getenv("WXP_PLATFORM_PUB","./platform_pub.pem"),"rb").read(),
|
"platform_pub_pem": open(os.getenv("WXP_PLATFORM_PUB","./platform_pub.pem"),"rb").read(),
|
||||||
"api_v3_key": os.getenv("WXP_API_V3_KEY","").encode()
|
"api_v3_key": os.getenv("WXP_API_V3_KEY","").encode()
|
||||||
},
|
},
|
||||||
"paypal": {
|
"paypal": {
|
||||||
"client_id": os.getenv("PP_ID",""),
|
"client_id": os.getenv("PP_ID",""),
|
||||||
"client_secret": os.getenv("PP_SECRET",""),
|
"client_secret": os.getenv("PP_SECRET",""),
|
||||||
"sandbox": True
|
"sandbox": True
|
||||||
},
|
},
|
||||||
"alipay": {
|
"alipay": {
|
||||||
"app_id": os.getenv("ALIPAY_APPID",""),
|
"app_id": os.getenv("ALIPAY_APPID",""),
|
||||||
"privkey_pem": open(os.getenv("ALIPAY_PRIV","./alipay_priv.pem"),"rb").read(),
|
"privkey_pem": open(os.getenv("ALIPAY_PRIV","./alipay_priv.pem"),"rb").read(),
|
||||||
"alipay_pub_pem": open(os.getenv("ALIPAY_PUB","./alipay_pub.pem"),"rb").read(),
|
"alipay_pub_pem": open(os.getenv("ALIPAY_PUB","./alipay_pub.pem"),"rb").read(),
|
||||||
"sandbox": True
|
"sandbox": True
|
||||||
},
|
},
|
||||||
"stripe": {
|
"stripe": {
|
||||||
"api_key": os.getenv("STRIPE_KEY","")
|
"api_key": os.getenv("STRIPE_KEY","")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PROVIDERS = {}
|
PROVIDERS = {}
|
||||||
@ -34,13 +34,13 @@ PROVIDERS = {}
|
|||||||
|
|
||||||
# 下单接口(统一)
|
# 下单接口(统一)
|
||||||
async def create_payment(request, params_kw=None):
|
async def create_payment(request, params_kw=None):
|
||||||
if params_kw is None:
|
if params_kw is None:
|
||||||
params_kw = request.paams_kw
|
params_kw = request.params_kw
|
||||||
data = params_kw
|
data = params_kw
|
||||||
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"}
|
||||||
try:
|
try:
|
||||||
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()
|
||||||
@ -56,68 +56,68 @@ async def create_payment(request, params_kw=None):
|
|||||||
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')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"error": str(e)}
|
return {"error": str(e)}
|
||||||
|
|
||||||
# 查询
|
# 查询
|
||||||
async def query_payment(request, params_kw=None):
|
async def query_payment(request, params_kw=None):
|
||||||
if params_kw is None:
|
if params_kw is None:
|
||||||
params_kw = request.paams_kw
|
params_kw = request.params_kw
|
||||||
data = params_kw
|
data = params_kw
|
||||||
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"}
|
||||||
try:
|
try:
|
||||||
res = await PROVIDERS[provider].query(data)
|
res = await PROVIDERS[provider].query(data)
|
||||||
return res
|
return res
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"error": str(e)}
|
return {"error": str(e)}
|
||||||
|
|
||||||
# 退款
|
# 退款
|
||||||
async def refund_payment(request, params_kw=None):
|
async def refund_payment(request, params_kw=None):
|
||||||
if params_kw is None:
|
if params_kw is None:
|
||||||
params_kw = request.paams_kw
|
params_kw = request.params_kw
|
||||||
data = params_kw
|
data = params_kw
|
||||||
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"}
|
||||||
try:
|
try:
|
||||||
res = await PROVIDERS[provider].refund(data)
|
res = await PROVIDERS[provider].refund(data)
|
||||||
return res
|
return res
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"error": str(e)}
|
return {"error": str(e)}
|
||||||
|
|
||||||
# 回调入口:你可把厂商回调用各自 endpoint 再转发到这里,或在厂商控制台按各自 URL 配置
|
# 回调入口:你可把厂商回调用各自 endpoint 再转发到这里,或在厂商控制台按各自 URL 配置
|
||||||
async def payment_notify(request, callback, params_kw=None):
|
async def payment_notify(request, callback, params_kw=None):
|
||||||
if params_kw is None:
|
if params_kw is None:
|
||||||
params_kw = request.paams_kw
|
params_kw = request.params_kw
|
||||||
data = params_kw
|
data = params_kw
|
||||||
provider = params_kw.provider
|
provider = params_kw.provider
|
||||||
headers = dict(request.headers)
|
headers = dict(request.headers)
|
||||||
body = await request.text()
|
body = await request.text()
|
||||||
try:
|
try:
|
||||||
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: 业务幂等处理
|
||||||
# 返回厂商要求的固定成功响应
|
# 返回厂商要求的固定成功响应
|
||||||
logid = data['out_trade_no']
|
logid = data['out_trade_no']
|
||||||
pl = PaymentLog(request._run_ns)
|
pl = PaymentLog(request._run_ns)
|
||||||
await pl.payed_log(logid)
|
await pl.payed_log(logid)
|
||||||
await callback(request, data)
|
await callback(request, data)
|
||||||
if provider == "wechat":
|
if provider == "wechat":
|
||||||
return {"code":"SUCCESS", "message":"OK"}
|
return {"code":"SUCCESS", "message":"OK"}
|
||||||
else:
|
else:
|
||||||
return "OK"
|
return "OK"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return web.Response(status=500, text=str(e))
|
return web.Response(status=500, text=str(e))
|
||||||
|
|
||||||
# callback url= "/unipay/notify/{provider}"
|
# callback url= "/unipay/notify/{provider}"
|
||||||
|
|
||||||
def load_unipay():
|
def load_unipay():
|
||||||
PROVIDERS["wechat"] = get_provider("wechat", CONF["wechat"]),
|
PROVIDERS["wechat"] = get_provider("wechat", CONF["wechat"]),
|
||||||
PROVIDERS["paypal"] = get_provider("paypal", CONF["paypal"]),
|
PROVIDERS["paypal"] = get_provider("paypal", CONF["paypal"]),
|
||||||
PROVIDERS["alipay"] = get_provider("alipay", CONF["alipay"]),
|
PROVIDERS["alipay"] = get_provider("alipay", CONF["alipay"]),
|
||||||
PROVIDERS["stripe"] = get_provider("stripe", CONF["stripe"])
|
PROVIDERS["stripe"] = get_provider("stripe", CONF["stripe"])
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
env.payment_notify = payment_notify
|
env.payment_notify = payment_notify
|
||||||
env.create_payment = create_payment
|
env.create_payment = create_payment
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user