package pay import ( "context" "net/http" "qnc-server/app/user/cmd/api/internal/svc" "github.com/wechatpay-apiv3/wechatpay-go/services/refunddomestic" "github.com/zeromicro/go-zero/core/logx" ) type WechatPayRefundCallbackLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewWechatPayRefundCallbackLogic(ctx context.Context, svcCtx *svc.ServiceContext) *WechatPayRefundCallbackLogic { return &WechatPayRefundCallbackLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *WechatPayRefundCallbackLogic) WechatPayRefundCallback(w http.ResponseWriter, r *http.Request) error { notification, err := l.svcCtx.WechatPayService.HandleRefundNotification(l.ctx, r) if err != nil { logx.Errorf("微信退款回调,%v", err) return nil } order, findOrderErr := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, *notification.OutTradeNo) if findOrderErr != nil { logx.Errorf("微信退款回调,查找订单信息失败: %+v", findOrderErr) return nil } switch *notification.Status { case refunddomestic.STATUS_SUCCESS: order.Status = "refunded" case refunddomestic.STATUS_ABNORMAL: // 异常 return nil default: return nil } if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil { logx.Errorf("微信退款回调,更新订单失败%+v", updateErr) return nil } // 响应微信回调成功 w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("success")) // 确保只写入一次响应 return nil }