fix(pay): 优化支付回调接口

This commit is contained in:
xingc
2025-05-06 14:07:59 +08:00
parent 2c064acf33
commit 3fcc7a1608

View File

@@ -5,6 +5,8 @@
# @Author : xingc
# @Desc :
import logging
import xml
from xml.parsers.expat import ExpatError
import xmltodict
from fastapi import APIRouter, Request, HTTPException, status, Depends, BackgroundTasks
@@ -90,11 +92,17 @@ async def wechat_notify(
):
body = await request.body()
logger.debug(body.decode())
result = xmltodict.parse(body.decode())
try:
result = xmltodict.parse(body.decode())
except ExpatError as e:
raise HTTPException(status.HTTP_422_UNPROCESSABLE_ENTITY, detail='无法处理的实体') from e
# 验证签名
params = result['xml']
sign = params.pop('sign')
params = result.get('xml', {})
sign = params.pop('sign', None)
if sign is None:
raise HTTPException(status.HTTP_422_UNPROCESSABLE_ENTITY, detail='无法处理的实体')
local_sign = wechat_pay_api.generate_sign(params)
if sign != local_sign:
raise HTTPException(