package wechat import ( "context" "fmt" "time" "github.com/ArtisanCloud/PowerWeChat/v3/src/payment/refund/request" ) // RefundOrder 调用微信支付 v3 退款接口(全额退款) // orderSn: 商户订单号;transactionID: 微信支付单号(二选一,有则优先用 transactionID);totalCents: 订单金额(分);reason: 退款原因 func RefundOrder(ctx context.Context, orderSn, transactionID string, totalCents int, reason string) error { if paymentApp == nil || paymentApp.Refund == nil { return fmt.Errorf("支付/退款未初始化") } if totalCents <= 0 { return fmt.Errorf("退款金额必须大于 0") } outRefundNo := fmt.Sprintf("RF%s%06d", time.Now().Format("20060102150405"), time.Now().UnixNano()%1000000) if reason == "" { reason = "用户申请退款" } req := &request.RequestRefund{ OutRefundNo: outRefundNo, Reason: reason, Amount: &request.RefundAmount{ Refund: totalCents, Total: totalCents, Currency: "CNY", From: []*request.RefundAmountFrom{}, }, } if transactionID != "" { req.TransactionID = transactionID } else { req.OutTradeNo = orderSn } _, err := paymentApp.Refund.Refund(ctx, req) return err }