chore: initialize tuhui repository
This commit is contained in:
100
backend/app/ysm_sdk/notify.py
Normal file
100
backend/app/ysm_sdk/notify.py
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
支付成功异步回调处理模块
|
||||
当用户支付成功后,支付平台会把订单支付信息异步请求到回调接口
|
||||
"""
|
||||
|
||||
import json
|
||||
import asyncio
|
||||
from .api import YsmPayApi
|
||||
|
||||
class PaymentNotify:
|
||||
"""支付通知处理类"""
|
||||
|
||||
def __init__(self, appid, appsecret):
|
||||
"""
|
||||
初始化
|
||||
|
||||
Args:
|
||||
appid: 支付通道ID
|
||||
appsecret: 密钥
|
||||
"""
|
||||
self.appid = appid
|
||||
self.appsecret = appsecret
|
||||
|
||||
async def process(self, request_data):
|
||||
"""
|
||||
处理支付通知(异步)
|
||||
|
||||
Args:
|
||||
request_data: 请求数据(字符串或字典)
|
||||
|
||||
Returns:
|
||||
tuple: (是否成功, 消息)
|
||||
"""
|
||||
# 解析请求数据
|
||||
if isinstance(request_data, str):
|
||||
try:
|
||||
data = json.loads(request_data)
|
||||
except:
|
||||
return False, "数据格式错误"
|
||||
else:
|
||||
data = request_data
|
||||
|
||||
# 验证签名
|
||||
calc_hash = YsmPayApi.hash_sign(data, self.appsecret)
|
||||
if data.get('hash') != calc_hash:
|
||||
return False, "验签失败,签名错误"
|
||||
|
||||
# 获取商户订单号
|
||||
mch_orderid = data.get('mch_orderid')
|
||||
|
||||
# 处理支付结果
|
||||
if data.get('state') == 'SUCCESS':
|
||||
# 在这里处理订单业务逻辑
|
||||
# 注意:平台可能会多次调用本接口,请确保订单不会被重复处理
|
||||
|
||||
# 示例:订单处理逻辑,这里可以使用异步数据库操作
|
||||
"""
|
||||
order = await find_order_by_id(mch_orderid)
|
||||
if order and order.status != 'paid':
|
||||
await update_order_status(mch_orderid, 'paid')
|
||||
# 其他业务逻辑...
|
||||
"""
|
||||
|
||||
return True, "success"
|
||||
else:
|
||||
# 处理未支付的情况
|
||||
return False, "订单未支付"
|
||||
|
||||
# FastAPI Web应用示例
|
||||
"""
|
||||
from fastapi import FastAPI, Request, Response
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.post("/notify")
|
||||
async def payment_notify(request: Request):
|
||||
# 配置信息
|
||||
appid = '20********' # 支付通道ID
|
||||
appsecret = 'e605ac7******************4af5164' # AppSecret
|
||||
|
||||
# 创建通知处理器
|
||||
notify_handler = PaymentNotify(appid, appsecret)
|
||||
|
||||
# 获取请求数据
|
||||
request_data = await request.body()
|
||||
|
||||
# 处理通知
|
||||
success, message = await notify_handler.process(request_data)
|
||||
|
||||
if success:
|
||||
return Response(content=message)
|
||||
else:
|
||||
return JSONResponse(content={"error": message}, status_code=400)
|
||||
|
||||
# 启动命令: uvicorn notify:app --reload
|
||||
"""
|
||||
Reference in New Issue
Block a user