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 # @Author : xingc
# @Desc : # @Desc :
import logging import logging
import xml
from xml.parsers.expat import ExpatError
import xmltodict import xmltodict
from fastapi import APIRouter, Request, HTTPException, status, Depends, BackgroundTasks from fastapi import APIRouter, Request, HTTPException, status, Depends, BackgroundTasks
@@ -90,11 +92,17 @@ async def wechat_notify(
): ):
body = await request.body() body = await request.body()
logger.debug(body.decode()) 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'] params = result.get('xml', {})
sign = params.pop('sign') 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) local_sign = wechat_pay_api.generate_sign(params)
if sign != local_sign: if sign != local_sign:
raise HTTPException( raise HTTPException(