This commit is contained in:
2026-09-15 16:02:45 +08:00
parent 112c5f8e46
commit ade2453083
70 changed files with 1441 additions and 707 deletions
+10 -1
View File
@@ -146,12 +146,21 @@ func (s *OrderService) PayNotify(ctx context.Context, request *http.Request) *er
return errcode.DatabaseError
}
if data.Amount.Total != order.PayAmount {
// 金额不一致:不流转、不发放权益,人工介入。
// 这里回的是成功应答(微信不再重试),所以必须把原始报文落库留痕,
// 否则这笔钱在系统里将无任何可追溯记录(callback_raw 是唯一能事后对账的字段)。
slog.ErrorContext(ctx, "pay notify: amount mismatch",
"out_trade_no", data.OutTradeNo,
"notify_amount", data.Amount.Total,
"order_amount", order.PayAmount,
)
return nil // 金额不一致,不流转、不发放权益,人工介入。
if uerr := s.orderDao.OrderUpdateByOrderNo(ctx, order.OrderNo, map[string]any{
"callback_raw": data.Raw,
}); uerr != nil {
slog.ErrorContext(ctx, "pay notify: record mismatch callback raw failed",
"out_trade_no", data.OutTradeNo, "error", uerr)
}
return nil
}
// 条件流转:待支付 -> 已支付,防重复回调。