fix: 罚款/考核支付回调 Czjilu 字段名兼容

This commit is contained in:
XingQue
2026-06-20 02:00:36 +08:00
parent 3fecb9390f
commit e233ee4bea
2 changed files with 27 additions and 26 deletions

View File

@@ -238,6 +238,7 @@ IP_WHITELIST = [
]
# 黑名单blacklist 模式下生效)— 支持单 IP 和 CIDR 网段
IP_BLACKLIST = []
# 免过滤路径(任何模式下都放行,如管理后台、健康检查)
IP_FILTER_EXEMPT_PATHS = []

View File

@@ -11872,20 +11872,20 @@ class FaKuanHuitiaoView(View):
# 4. 查询订单
try:
order = Czjilu.query.get(dingdan_id=out_trade_no)
logger.info(f"找到订单: {order.OrderID}, 状态: {order.Status}, 金额: {order.Amount}")
logger.info(f"找到订单: {order.dingdan_id}, 状态: {order.zhuangtai}, 金额: {order.jine}")
except Czjilu.DoesNotExist:
logger.error(f"订单不存在: {out_trade_no}")
return self.wechat_response('FAIL', '订单不存在')
# 5. 检查订单状态是否为未支付9
if order.Status != 9:
logger.warning(f"订单状态不是未支付: {order.OrderID}, 当前状态: {order.Status}")
if order.zhuangtai != 9:
logger.warning(f"订单状态不是未支付: {order.dingdan_id}, 当前状态: {order.zhuangtai}")
# 已处理过的订单直接返回成功,避免微信重复回调
return self.wechat_response('SUCCESS', 'OK')
# 6. 验证金额(微信返回的是分,需要转换)
wechat_amount_yuan = total_fee / 100 # 转换为元
order_amount_yuan = float(order.Amount) # 订单金额(元)
order_amount_yuan = float(order.jine) # 订单金额(元)
# 允许1分钱的误差浮点数比较
if abs(wechat_amount_yuan - order_amount_yuan) > 0.01:
@@ -11893,16 +11893,16 @@ class FaKuanHuitiaoView(View):
return self.wechat_response('FAIL', '金额不一致')
# 7. 更新订单状态为已支付3
order.Status = 3
order.zhuangtai = 3
order.save(update_fields=['zhuangtai'])
logger.info(f"订单状态更新成功: {order.OrderID} -> 3")
logger.info(f"订单状态更新成功: {order.dingdan_id} -> 3")
# 8. 更新罚单状态为已缴纳2
try:
# 根据订单中的用户ID和金额匹配待缴纳的罚单
fadan = Penalty.query.filter(
PenalizedUserID=order.yonghuid,
FineAmount=order.Amount,
FineAmount=order.jine,
Status__in=[1, 3]
).first()
if fadan:
@@ -11923,7 +11923,7 @@ class FaKuanHuitiaoView(View):
try:
# 获取订单金额确保是Decimal类型
jine_decimal = Decimal(str(order.Amount)) if not isinstance(order.Amount, Decimal) else order.Amount
jine_decimal = Decimal(str(order.jine)) if not isinstance(order.jine, Decimal) else order.jine
update_daily_income(jine_decimal)
@@ -11946,7 +11946,7 @@ class FaKuanHuitiaoView(View):
szjilu.save()
logger.info(f"收支记录更新成功: 订单{order.OrderID}, 金额{jine_decimal}")
logger.info(f"收支记录更新成功: 订单{order.dingdan_id}, 金额{jine_decimal}")
except Exception as e:
# 收支记录更新失败不影响主流程,只记录日志
@@ -12023,7 +12023,7 @@ class FaKuanPayPollView(APIView):
return Response({'code': 400, 'message': '订单ID不能为空'})
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
if order.Status == 3:
if order.zhuangtai == 3:
return Response({'code': 200, 'message': '支付成功'})
else:
return Response({'code': 400, 'message': '订单尚未支付'})
@@ -12046,7 +12046,7 @@ class FaKuanPayFailView(APIView):
return Response({'code': 400, 'message': '订单ID不能为空'})
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
if order.Status == 9: # 未支付
if order.zhuangtai == 9: # 未支付
order.delete()
logger.info(f"用户{request.user.UserUID}删除未支付订单: {dingdanid}")
return Response({'code': 200, 'message': '订单已删除'})
@@ -12430,29 +12430,29 @@ class KaohePayCallbackView(View):
# 查找订单
try:
order = Czjilu.query.get(dingdan_id=out_trade_no, leixing=5)
logger.info(f"找到订单: {out_trade_no}, 当前状态: {order.Status}")
logger.info(f"找到订单: {out_trade_no}, 当前状态: {order.zhuangtai}")
except Czjilu.DoesNotExist:
logger.error(f"考核订单不存在: {out_trade_no}")
return self.wechat_response('FAIL', '订单不存在')
if order.Status != 9:
logger.warning(f"订单状态非未支付: {order.Status}, 订单号: {out_trade_no}")
if order.zhuangtai != 9:
logger.warning(f"订单状态非未支付: {order.zhuangtai}, 订单号: {out_trade_no}")
# 已支付的订单直接返回成功,避免微信重复回调
if order.Status == 3:
if order.zhuangtai == 3:
logger.info(f"订单已支付,直接返回成功: {out_trade_no}")
return self.wechat_response('SUCCESS', 'OK')
return self.wechat_response('FAIL', '订单状态异常')
# 验证金额
wechat_yuan = total_fee / 100
if abs(wechat_yuan - float(order.Amount)) > 0.01:
logger.error(f"金额不一致: 订单金额={order.Amount}, 回调金额={wechat_yuan}, 订单号: {out_trade_no}")
if abs(wechat_yuan - float(order.jine)) > 0.01:
logger.error(f"金额不一致: 订单金额={order.jine}, 回调金额={wechat_yuan}, 订单号: {out_trade_no}")
return self.wechat_response('FAIL', '金额不一致')
logger.info(f"金额验证通过: {wechat_yuan}")
# 更新订单状态为已支付
order.Status = 3
order.save()
order.zhuangtai = 3
order.save(update_fields=['zhuangtai'])
logger.info(f"订单状态更新为已支付: {out_trade_no}")
# 从临时表获取业务参数并创建审核记录
@@ -12469,8 +12469,8 @@ class KaohePayCallbackView(View):
else:
logger.error(f"创建审核记录失败: {msg}, 订单号: {out_trade_no}")
# 订单已支付但记录创建失败,需要标记订单异常,人工介入
order.Status = 10 # 10表示支付成功但业务处理失败
order.save()
order.zhuangtai = 10 # 10表示支付成功但业务处理失败
order.save(update_fields=['zhuangtai'])
logger.error(f"订单状态标记为异常(10): {out_trade_no}")
except KaohePayTemp.DoesNotExist:
@@ -12487,13 +12487,13 @@ class KaohePayCallbackView(View):
except Exception as e:
logger.error(f"处理临时表或创建审核记录异常: {str(e)}", exc_info=True)
# 标记订单异常
order.Status = 10
order.save()
order.zhuangtai = 10
order.save(update_fields=['zhuangtai'])
logger.error(f"订单状态标记为异常(10): {out_trade_no}")
# 更新收支记录
try:
jine_decimal = Decimal(str(order.Amount))
jine_decimal = Decimal(str(order.jine))
update_daily_income(jine_decimal)
logger.info(f"更新每日收入成功: {jine_decimal}")
@@ -12578,7 +12578,7 @@ class KaohePayPollView(APIView):
return Response({'code': 400, 'message': '订单ID不能为空'})
try:
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
if order.Status == 3:
if order.zhuangtai == 3:
return Response({'code': 200, 'message': '支付成功'})
return Response({'code': 400, 'message': '订单尚未支付'})
except Czjilu.DoesNotExist:
@@ -12595,7 +12595,7 @@ class KaohePayFailView(APIView):
return Response({'code': 400, 'message': '订单ID不能为空'})
try:
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
if order.Status == 9:
if order.zhuangtai == 9:
order.delete()
return Response({'code': 200, 'message': '订单已删除'})
return Response({'code': 400, 'message': '订单状态无法删除'})