fix: 罚款/考核支付回调 Czjilu 字段名兼容
This commit is contained in:
@@ -238,6 +238,7 @@ IP_WHITELIST = [
|
||||
]
|
||||
# 黑名单(blacklist 模式下生效)— 支持单 IP 和 CIDR 网段
|
||||
IP_BLACKLIST = []
|
||||
|
||||
# 免过滤路径(任何模式下都放行,如管理后台、健康检查)
|
||||
IP_FILTER_EXEMPT_PATHS = []
|
||||
|
||||
|
||||
@@ -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': '订单状态无法删除'})
|
||||
|
||||
Reference in New Issue
Block a user