bugfix
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
// 条件流转:待支付 -> 已支付,防重复回调。
|
||||
|
||||
Reference in New Issue
Block a user