修复了订单状态的验签问题

This commit is contained in:
2026-07-09 20:49:26 +08:00
parent f2295717ee
commit 6c0a461a2b
2 changed files with 28 additions and 7 deletions

View File

@@ -422,28 +422,43 @@ class AlipayPayNotifyView(WechatPayNotifyView):
"""
def post(self, request):
try:
# 详细记录原始请求(调试回调是否到达)
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] 收到回调, method={request.method}, content_type={request.content_type}")
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] POST keys={list(request.POST.keys())}")
# 支付宝回调为 form-urlencoded
params = dict(request.POST) if request.POST else {}
# 注意:必须用 .dict() 而不是 dict()
# dict(request.POST) 会返回 {key: [value_list]}(值是列表)
# request.POST.dict() 返回 {key: value}(值是字符串),符合验签需求
params = request.POST.dict() if request.POST else {}
if not params:
logger.warning("支付宝回调: 收到空数据")
logger.warning("[ALIPAY_NOTIFY_DEBUG] 支付宝回调: 收到空数据")
return HttpResponse('fail', content_type='text/plain')
out_trade_no = params.get('out_trade_no', '')
trade_no = params.get('trade_no', '')
trade_status = params.get('trade_status', '')
logger.info(f"支付宝回调: out_trade_no={out_trade_no}, trade_no={trade_no}, trade_status={trade_status}")
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] out_trade_no={out_trade_no}, trade_no={trade_no}, trade_status={trade_status}")
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] params keys={list(params.keys())}")
# 验签
from jituan.services.alipay_pay import verify_notify_params, club_id_from_order
notify_club_id = club_id_from_order(out_trade_no)
if not verify_notify_params(params, notify_club_id):
logger.warning(f"支付宝验签失败: out_trade_no={out_trade_no}")
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] notify_club_id={notify_club_id}")
verify_result = verify_notify_params(params, notify_club_id)
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] verify_result={verify_result}")
if not verify_result:
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] 支付宝验签失败: out_trade_no={out_trade_no}")
return HttpResponse('fail', content_type='text/plain')
# 处理支付结果
if trade_status in ('TRADE_SUCCESS', 'TRADE_FINISHED'):
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] 调用 _handle_success")
self._handle_success(out_trade_no, trade_no, None)
logger.warning(f"[ALIPAY_NOTIFY_DEBUG] _handle_success 完成")
else:
logger.info(f"支付宝支付状态非成功: {trade_status}, out_trade_no={out_trade_no}")
@@ -451,7 +466,7 @@ class AlipayPayNotifyView(WechatPayNotifyView):
return HttpResponse('success', content_type='text/plain')
except Exception as e:
logger.error(f"支付宝回调处理异常: {str(e)}")
logger.error(f"[ALIPAY_NOTIFY_DEBUG] 支付宝回调处理异常: {str(e)}")
logger.error(traceback.format_exc())
return HttpResponse('fail', content_type='text/plain')