瀏覽代碼

wip:身份校验换成token有效期校验

wkyuer 7 月之前
父節點
當前提交
a510375cfa

+ 1 - 39
src/jfw/front/returnMoneyPage.go

@@ -19,7 +19,6 @@ import (
 type (
 	ReturnMoneyPage struct {
 		*xweb.Action
-		toRedirect     xweb.Mapper `xweb:"/returnMoney/toRedirect"` //跳转重定向(弃用,扫码并没有refer)
 		wxReturnMoney  xweb.Mapper `xweb:"/weixin/pay/returnMoney"` //微信数据导出-支付页面
 		aliReturnMoney xweb.Mapper `xweb:"/returnMoney/aliPage"`    //剑鱼管理后台微信支付回款
 	}
@@ -34,33 +33,6 @@ func init() {
 	xweb.AddAction(&ReturnMoneyPage{})
 }
 
-func (this *ReturnMoneyPage) ToRedirect() error {
-	var (
-		token = this.GetString("token")
-		refer = strings.ToLower(this.Refer())
-	)
-	if token == "" {
-		return fmt.Errorf("未知回款订单,token异常")
-	}
-	if refer != "" {
-		if strings.Contains(refer, "alipay") {
-			return this.Redirect(fmt.Sprintf("/returnMoney/aliPage?token=%s", token))
-		} else if strings.Contains(refer, "micromessenger") || strings.Contains(refer, "weixin") {
-			return this.Redirect(fmt.Sprintf("/weixin/pay/returnMoney?token=%s", token))
-		}
-	}
-	rMap := public.Mysql.FindOne("return_money_online", map[string]interface{}{"token": token, "status": 0}, "pay_way", "")
-	if rMap == nil || len(*rMap) == 0 {
-		return fmt.Errorf("未知回款订单")
-	}
-	var payWay = gconv.String((*rMap)["pay_way"])
-	if strings.Contains(payWay, "wx") {
-		return this.Redirect(fmt.Sprintf("/weixin/pay/returnMoney?token=%s", token))
-	} else {
-		return this.Redirect(fmt.Sprintf("/returnMoney/aliPage?token=%s", token))
-	}
-}
-
 func (this *ReturnMoneyPage) WxReturnMoney() {
 	err := func() error {
 		var (
@@ -105,11 +77,6 @@ func (this *ReturnMoneyPage) WxReturnMoney() {
 			return err
 		}
 
-		var pay_param map[string]interface{}
-		if payWay, payParam := gconv.String(rData["pay_way"]), gconv.String(rData["pay_param"]); payWay == "wx_js" && payParam != "" {
-			pay_param = gconv.Map(payParam)
-		}
-		this.T["pay_param"] = pay_param
 		this.T["token"] = token
 		this.T["data"] = rData
 		this.T["signature"] = wx.SignJSSDK(this.Site() + this.Url())
@@ -128,11 +95,6 @@ func (this *ReturnMoneyPage) AliReturnMoney() {
 		if err != nil {
 			return err
 		}
-		var pay_param string
-		if gconv.String(rData["pay_way"]) == "ali_pc" {
-			pay_param = gconv.String(rData["pay_param"])
-		}
-		this.T["pay_param"] = pay_param
 		this.T["token"] = token
 		this.T["data"] = formatShow(rData)
 		return this.Render("/common/returnMoney/aliReturnMoney.html", &this.T)
@@ -147,7 +109,7 @@ func getReturnPayDetail(token string) (map[string]interface{}, error) {
 	if token == "" {
 		return nil, errors.New("<p>参数异常</p>")
 	}
-	rList := public.Mysql.SelectBySql("SELECT d.order_status,d.product_type,d.user_phone,d.company_name,r.return_money,r.pay_param,r.pay_way,r.expire_time,r.status FROM dataexport_order d inner join return_money_online r on (d.order_code=r.order_code) WHERE r.token=? ", token)
+	rList := public.Mysql.SelectBySql("SELECT d.order_status,d.product_type,d.user_phone,d.company_name,r.return_money,r.expire_time,r.status FROM dataexport_order d inner join return_money_online r on (d.order_code=r.order_code) WHERE r.token=? ", token)
 	if rList == nil || len(*rList) == 0 {
 		return nil, fmt.Errorf("<p>未知回款单</p>")
 	}

+ 45 - 31
src/jfw/modules/subscribepay/src/entity/returnMoney.go

@@ -2,6 +2,7 @@ package entity
 
 import (
 	. "app.yhyue.com/moapp/jybase/date"
+	"database/sql"
 	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/modules/subscribepay/src/pay"
 	"jy/src/jfw/modules/subscribepay/src/util"
@@ -15,43 +16,50 @@ type returnMoneyStruct struct{}
 var JyReturnMoneyStruct returnMoneyStruct
 
 func (m *returnMoneyStruct) PayCallBack(param *CallBackParam) bool {
-	now := time.Now()
-	if util.Mysql.Update("return_money_online", map[string]interface{}{
-		"out_trade_no": param.OutTradeno,
-		"status":       0,
-	}, map[string]interface{}{
-		"status":         1,
-		"pay_money":      param.CashFee,
-		"pay_time":       FormatDate(&now, Date_Full_Layout),
-		"transaction_id": param.TransactionId,
-	}) {
-		var orderCode string
-		if param.OrderCode != "" {
-			orderCode = param.OrderCode
-		} else {
-			if m := util.Mysql.FindOne("return_money_online", map[string]interface{}{
-				"out_trade_no": param.OutTradeno,
-			}, "order_code", ""); m != nil && len(*m) > 0 {
-				orderCode = gconv.String((*m)["order_code"])
-			}
+	return util.Mysql.ExecTx("回款更新", func(tx *sql.Tx) bool {
+		now := time.Now()
+
+		//回款支付记录更新
+		if !util.Mysql.UpdateByTx(tx, "return_money_online_pay", map[string]interface{}{
+			"out_trade_no": param.OutTradeno,
+			"status":       0,
+		}, map[string]interface{}{
+			"status":         1,
+			"pay_money":      param.CashFee,
+			"pay_time":       FormatDate(&now, Date_Full_Layout),
+			"transaction_id": param.TransactionId,
+		}) {
+			return false
 		}
-		if orderCode != "" {
-			go m.CloseOrder(orderCode)
+
+		res := util.Mysql.FindOne("return_money_online_pay", map[string]interface{}{
+			"out_trade_no": param.OutTradeno,
+		}, "order_code,return_id", "")
+		if m == nil || len(*res) == 0 {
+			return false
 		}
-		return true
-	}
-	return false
+
+		var (
+			orderCode = gconv.String((*res)["order_code"])
+			returnId  = gconv.String((*res)["return_id"])
+		)
+		//回款状态完成
+		if !util.Mysql.UpdateByTx(tx, "return_money_online", map[string]interface{}{
+			"id":     returnId,
+			"status": 0,
+		}, map[string]interface{}{}) {
+			return false
+		}
+
+		//取消未支付回款单
+		go m.CloseOrder(orderCode)
+		return false
+	})
 }
 
 // CloseOrder 关闭其他未支付的订单
 func (m *returnMoneyStruct) CloseOrder(orderOrder string) {
-	res := util.Mysql.Query("SELECT pay_way,out_trade_no FROM return_money_online WHERE status=0 and order_code=? and expire_time>?", orderOrder, time.Now().Format(time.DateTime))
-	util.Mysql.Update("return_money_online", map[string]interface{}{
-		"order_code": orderOrder,
-		"status":     0,
-	}, map[string]interface{}{
-		"status": -1,
-	})
+	res := util.Mysql.Query("SELECT p.pay_way,p.out_trade_no FROM return_money_online r inner join return_money_online_pay p on (r.id = p.return_id and p.status=1)  WHERE p.status=0 and r.order_code=? and r.expire_time>?", orderOrder, time.Now().Format(time.DateTime))
 	if res != nil && len(*res) > 0 {
 		for _, m := range *res {
 			var (
@@ -65,4 +73,10 @@ func (m *returnMoneyStruct) CloseOrder(orderOrder string) {
 			log.Printf("CloseReturnOrder 关闭支付 %s %s %v\n", orderOrder, out_trade_no, ok)
 		}
 	}
+	util.Mysql.Update("return_money_online", map[string]interface{}{
+		"order_code": orderOrder,
+		"status":     0,
+	}, map[string]interface{}{
+		"status": -1,
+	})
 }

+ 21 - 33
src/jfw/modules/subscribepay/src/service/commonAction.go

@@ -777,25 +777,17 @@ func (this *CommonAction) GetWxReturnPayParam() {
 		if !(payWayReq == "wx_js" || payWayReq == "ali_pc") {
 			return nil, fmt.Errorf("未知支付方式")
 		}
-
-		rList := util.Mysql.SelectBySql("SELECT return_money,expire_time,pay_way,pay_param,pay_way,return_money,order_code FROM return_money_online r WHERE r.status=0 and r.token=? ", token)
+		rList := util.Mysql.SelectBySql("SELECT id,return_money,expire_time,return_money,order_code FROM return_money_online r WHERE r.status=0 and r.token=? ", token)
 		if rList == nil || len(*rList) == 0 {
 			return nil, fmt.Errorf("未知回款单")
 		}
 		var (
 			rMap        = (*rList)[0]
 			expireTime  = gconv.String(rMap["expire_time"])
-			pay_param   = gconv.String(rMap["pay_param"])
-			payWay      = gconv.String(rMap["pay_way"])
 			returnMoney = gconv.Int(rMap["return_money"])
 			OrderCode   = gconv.String(rMap["order_code"])
+			returnId    = gconv.Int(rMap["id"])
 		)
-		if pay_param != "" {
-			if payWay == payWayReq {
-				return pay_param, nil
-			}
-			return "", fmt.Errorf("支付方式更变")
-		}
 		var (
 			tradeno, payParam string
 			err               error
@@ -821,28 +813,26 @@ func (this *CommonAction) GetWxReturnPayParam() {
 			if openId == "" {
 				return nil, fmt.Errorf("创建微信支付参数异常")
 			}
-			tradeno, _, payParam, err = pay.CreateOrderPay(returnMoney, pay.WX_RETURN_NATIVE, "", openId, "", payWay, OrderCode, expire.Unix())
+			tradeno, _, payParam, err = pay.CreateOrderPay(returnMoney, pay.WX_RETURN_NATIVE, "", openId, "", payWayReq, OrderCode, expire.Unix())
 			if err != nil {
 				return nil, fmt.Errorf("创建微信支付异常")
 			}
 		case "ali_pc":
-			tradeno, _, payParam, err = pay.CreateOrderPay(returnMoney, pay.ALI_RETURN_NATIVE, "", "", "", payWay, OrderCode, expire.Unix())
+			tradeno, _, payParam, err = pay.CreateOrderPay(returnMoney, pay.ALI_RETURN_NATIVE, "", "", "", payWayReq, OrderCode, expire.Unix())
 			if err != nil {
 				return nil, fmt.Errorf("创建支付宝支付异常")
 			}
 		}
 		//更新支付串
 		now := time.Now()
-		if !util.Mysql.Update("return_money_online", map[string]interface{}{
-			"status": 0,
-			"token":  token,
-		}, map[string]interface{}{
+		if util.Mysql.Insert("return_money_online_pay", map[string]interface{}{
+			"return_id":    returnId,
 			"order_code":   OrderCode,
 			"pay_param":    payParam,
 			"out_trade_no": tradeno,
-			"pay_way":      payWay,
+			"pay_way":      payWayReq,
 			"creat_time":   FormatDate(&now, Date_Full_Layout),
-		}) {
+		}) <= 0 {
 			return nil, fmt.Errorf("数据保存异常")
 		}
 		return payParam, nil
@@ -859,28 +849,26 @@ func (this *CommonAction) GetReturnResult() {
 		if token == "" {
 			return nil, fmt.Errorf("缺少参数")
 		}
-		rData := util.Mysql.FindOne("return_money_online", map[string]interface{}{
-			"token": token,
-		}, "transaction_id,pay_time,status,order_code,pay_money,return_money", "")
-		if rData == nil || len(*rData) == 0 {
-			return nil, fmt.Errorf("未知回款单")
-		}
 		var (
-			r      = map[string]interface{}{}
-			status = gconv.Int((*rData)["status"])
+			payed bool
+			r     = map[string]interface{}{}
 		)
-		r["success"] = status > 0
-		if status > 0 {
-			r["order_code"] = (*rData)["order_code"]
-			r["transaction_id"] = (*rData)["transaction_id"]
-			r["pay_money"] = (*rData)["pay_money"]
-			r["return_money"] = (*rData)["return_money"]
-			if payTime := gconv.String((*rData)["pay_time"]); payTime != "" {
+		res := util.Mysql.SelectBySql("SELECT r.status,r.order_code,r.return_money,p.pay_time,p.transaction_id FROM return_money_online r inner join return_money_online_pay p on (r.id = p.return_id and p.status=1) WHERE r.token=?", token)
+		if res != nil && len(*res) > 0 {
+			var (
+				rData = (*res)[0]
+			)
+			payed = true
+			r["order_code"] = rData["order_code"]
+			r["transaction_id"] = rData["transaction_id"]
+			r["return_money"] = rData["return_money"]
+			if payTime := gconv.String(rData["pay_time"]); payTime != "" {
 				if t, e := time.ParseInLocation(time.DateTime, payTime, time.Local); e == nil {
 					r["pay_time"] = t.Unix()
 				}
 			}
 		}
+		r["success"] = payed
 		return r, nil
 	}()
 	if errMsg != nil {