fix(pay): 优化支付回调接口
This commit is contained in:
@@ -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())
|
||||||
|
try:
|
||||||
result = xmltodict.parse(body.decode())
|
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(
|
||||||
|
|||||||
Reference in New Issue
Block a user