fix: 加固支付宝充值回调幂等履约,避免付成功不到账与误删单
禁止 Czjilu 回调地址回落到订单 notify;回调失败回 fail 重试;取消支付改关单不删;客服补单走同一履约防多加。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -471,8 +471,9 @@ class FaKuanPayPollView(APIView):
|
||||
return Response({'code': 400, 'message': '订单ID不能为空'})
|
||||
|
||||
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
|
||||
# 订单未支付时,尝试补偿履约(回调延迟/失败时通过轮询兜底)
|
||||
if order.zhuangtai == 9:
|
||||
# 订单未支付/已关单待补履约时,尝试补偿履约(回调延迟/失败时通过轮询兜底)
|
||||
from products.czjilu_types import is_czjilu_fulfillable_status
|
||||
if is_czjilu_fulfillable_status(order.zhuangtai):
|
||||
from jituan.services.czjilu_fulfill import confirm_czjilu_paid, CzjiluFulfillError
|
||||
try:
|
||||
confirm_czjilu_paid(dingdanid, request.user.UserUID, expected_leixing=6)
|
||||
@@ -503,12 +504,13 @@ class FaKuanPayFailView(APIView):
|
||||
return Response({'code': 400, 'message': '订单ID不能为空'})
|
||||
|
||||
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
|
||||
if order.zhuangtai == 9: # 未支付
|
||||
order.delete()
|
||||
logger.info(f"用户{request.user.UserUID}删除未支付订单: {dingdanid}")
|
||||
return Response({'code': 200, 'message': '订单已删除'})
|
||||
if order.zhuangtai == 9: # 未支付:关单不删
|
||||
from products.czjilu_types import close_unpaid_czjilu
|
||||
close_unpaid_czjilu(order, reason='用户取消支付')
|
||||
logger.info(f"用户{request.user.UserUID}关闭未支付罚款订单(不删): {dingdanid}")
|
||||
return Response({'code': 200, 'message': '订单已取消'})
|
||||
else:
|
||||
return Response({'code': 400, 'message': '订单状态不是未支付,无法删除'})
|
||||
return Response({'code': 400, 'message': '订单状态不是未支付,无法取消'})
|
||||
except Czjilu.DoesNotExist:
|
||||
return Response({'code': 400, 'message': '订单不存在'})
|
||||
except Exception as e:
|
||||
@@ -1004,8 +1006,9 @@ 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.zhuangtai == 9:
|
||||
# 订单未支付/已关单待补履约时,尝试补偿履约
|
||||
from products.czjilu_types import is_czjilu_fulfillable_status
|
||||
if is_czjilu_fulfillable_status(order.zhuangtai):
|
||||
from jituan.services.czjilu_fulfill import confirm_czjilu_paid, CzjiluFulfillError
|
||||
try:
|
||||
confirm_czjilu_paid(dingdanid, request.user.UserUID, expected_leixing=5)
|
||||
@@ -1032,8 +1035,9 @@ class KaohePayFailView(APIView):
|
||||
try:
|
||||
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
|
||||
if order.zhuangtai == 9:
|
||||
order.delete()
|
||||
return Response({'code': 200, 'message': '订单已删除'})
|
||||
return Response({'code': 400, 'message': '订单状态无法删除'})
|
||||
from products.czjilu_types import close_unpaid_czjilu
|
||||
close_unpaid_czjilu(order, reason='用户取消支付')
|
||||
return Response({'code': 200, 'message': '订单已取消'})
|
||||
return Response({'code': 400, 'message': '订单状态无法取消'})
|
||||
except Czjilu.DoesNotExist:
|
||||
return Response({'code': 400, 'message': '订单不存在'})
|
||||
|
||||
Reference in New Issue
Block a user