abiao лет назад: 5
Родитель
Сommit
13fb524b6a

+ 35 - 0
go/gopath/src/fohow.com/apps/controllers/test_controller/test_controller.go

@@ -5,6 +5,10 @@ import (
 	"fohow.com/apps/models/order_model"
 	"fohow.com/apps/models/user_model"
 	"fohow.com/libs/lib_redis"
+	"fohow.com/libs/wx_mp"
+	"math/rand"
+	"strings"
+	"time"
 )
 
 type LabiReturn struct {
@@ -63,3 +67,34 @@ func (self *TestController) GetUserInfoFromRedis() {
 	self.Data["json"] = ret
 	self.ServeJSON()
 }
+
+//测试微信退款功能
+func (self *TestController) TestWxPayRefund() {
+	outTradeNo := createOrderId("refund")
+	outRefundNo := createOrderId("refundTo")
+	totalPrice := int64(10)
+	transactionId := "4200000747202011043736410701"
+	remark := "订单退款"
+	payData := wx_mp.GetRefundDataPay(outTradeNo, outRefundNo, totalPrice, transactionId, remark)
+	//返回数据
+	type PayData struct {
+		PayData map[string]string `json:"pay_data"`
+	}
+	self.Data["json"] = &PayData{PayData: payData}
+	self.ServeJSON()
+}
+
+//生成订单ID
+func createOrderId(prefix string) string {
+	n1 := time.Now().UnixNano()
+	n2 := RandInt64(100, 999)
+	oId := strings.ToUpper(fmt.Sprintf("%s%d%d", prefix, n1, n2))
+	return oId
+}
+
+func RandInt64(min, max int64) int64 {
+	if min >= max || min == 0 || max == 0 {
+		return max
+	}
+	return rand.Int63n(max-min) + min
+}

+ 30 - 0
go/gopath/src/fohow.com/libs/wx_mp/pay.go

@@ -152,6 +152,36 @@ func GetGzhPayData(openid, outTradeNo string, totalPrice int64, body, notifyUrl,
 
 }
 
+// 获取jsSDK微信支付需要的数据
+func GetRefundDataPay(outTradeNo, outRefundNo string, totalPrice int64, transactionId, remark string) (ret map[string]string) {
+	outTradeNo = fmt.Sprintf("%s_%d", outTradeNo, time.Now().Unix())
+	u := uuid.NewV4().String()
+	us := strings.Split(u, "-")
+	nonce_str := strings.Join(us, "")
+	req := map[string]string{
+		"mch_id":         gzhMchId,
+		"appid":          gzhAppId,
+		"nonce_str":      nonce_str, //fmt.Sprintf("%d", time.Now().Unix()),
+		"transaction_id": transactionId,
+		"out_trade_no":   outTradeNo,
+		"out_refund_no":  outRefundNo,
+		"total_fee":      fmt.Sprintf("%d", totalPrice), //分为单位,订单总金额
+		"refund_fee":     fmt.Sprintf("%d", totalPrice), //分为单位,退款总金额
+		//"notify_url":       notifyUrl,
+		"refund_desc": remark,
+	}
+	sign := mch.Sign(req, gzhApiKey, nil)
+	req["sign"] = sign
+	beego.BeeLogger.Warn("%v", req)
+	ret, err := pay.Refund(gzhMchProxy, req)
+	if err != nil {
+		beego.BeeLogger.Error("getGzhPayPrepayId err[%s]", err)
+		//fmt.Println(err)
+		return nil
+	}
+	return ret
+}
+
 // 获取支付预授权码
 //  [pay.go:76] [E] GetPrepayId err[return_code: "FAIL", return_msg: "不识别的参数wxappid"]
 // 2016/07/07 11:07:02 [pay_controller.go:303] [W] 生成微信支付订单号:DS20160707503D648C,传的参数:openid=o7lR2txmVPh1pSPjIvto2LO_XVYU,

+ 1 - 0
go/gopath/src/fohow.com/routers/routes.go

@@ -236,6 +236,7 @@ func init() {
 	//测试接口
 	beego.Router("/v1/test/wxpay/eppay", &railsadmin_controller.RailsadminController{}, "get:TestEpPay")
 	beego.Router("/v1/test/redis_info", &test_controller.TestController{}, "get:GetUserInfoFromRedis")
+	beego.Router("/v1/wxpay/refund", &test_controller.TestController{}, "get:TestWxPayRefund")
 
 	//----------------微信商品库管理-------------
 	beego.Router("/railsadmin/wxku_commodity/:id([0-9]+)/addOrUpdate", &wxku_commodity_controller.WxkuCommodityController{}, "post:AddOrUpdateWxkuCommodity")