From 446a786cfee1f8996d0a6f784c00b30bd551df84 Mon Sep 17 00:00:00 2001
From: ljl <360197197@qq.com>
Date: Thu, 6 Jun 2024 20:57:00 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/h5/index.go | 16 ++++++++++++
route/h5.go | 1 +
service/payment_service.go | 34 +++++++++++++++++++++++++
utils/tlpay/api.go | 25 ++++++++++++------
utils/tlpay/param/union_order_param.go | 35 ++++++++++++++++++++++++++
5 files changed, 103 insertions(+), 8 deletions(-)
create mode 100644 utils/tlpay/param/union_order_param.go
diff --git a/api/h5/index.go b/api/h5/index.go
index 80d8534..0204935 100644
--- a/api/h5/index.go
+++ b/api/h5/index.go
@@ -313,6 +313,22 @@ func GatewayPay(c *gin.Context) {
return
}
+func UnionPay(c *gin.Context) {
+ c.Writer.Header().Set("content-type", "text/html")
+ token := c.DefaultQuery("token", "")
+ if token == "" {
+ c.Writer.WriteString("token empty")
+ return
+ }
+ body, err := service.PaymentService.UnionPay(token)
+ if err != nil {
+ c.Writer.WriteString(err.Error())
+ return
+ }
+ c.Writer.WriteString(body)
+ return
+}
+
func BankCardUnbind(c *gin.Context) (result.Data, error) {
err := service.UserService.BankCardUnbind(user(c))
if err != nil {
diff --git a/route/h5.go b/route/h5.go
index fd4a372..a367a81 100644
--- a/route/h5.go
+++ b/route/h5.go
@@ -18,6 +18,7 @@ func h5RouteInit(r *gin.Engine) {
h5Group.Match([]string{"POST", "OPTIONS"}, "/binding-pay-notify", h5.BindingPayNotify)
h5Group.Match([]string{"GET", "OPTIONS"}, "/test-gateway-pay", h5.GatewayPay)
h5Group.Match([]string{"GET", "OPTIONS"}, "/gateway-pay", h5.GatewayPay)
+ h5Group.Match([]string{"GET", "OPTIONS"}, "/union-pay", h5.UnionPay)
h5Group.Match([]string{"POST", "GET", "OPTIONS"}, "/gateway-pay-ret", h5.GatewayPayRet)
authGroup := h5Group.Group("")
diff --git a/service/payment_service.go b/service/payment_service.go
index ee56e40..9301c6f 100644
--- a/service/payment_service.go
+++ b/service/payment_service.go
@@ -53,6 +53,8 @@ func (s paymentService) Payment(userID int, paymentRequest request.PaymentReques
data, err = s.bindingPayment(paymentRequest, p)
} else if paymentRequest.PayType == "gateway" {
data, err = s.getGatewayPayUrl(p)
+ } else if paymentRequest.PayType == "union" {
+ data, err = s.getUnionPayUrl(p)
} else {
err = errors.NewBusinessError("payType参数错误")
}
@@ -439,3 +441,35 @@ func (s paymentService) getGatewayPayUrl(pm *model.Payment) (result.Data, error)
data := result.Data{"url": "http://api.wrtcjt.com/h5/gateway-pay?token=" + token, "orderId": ""}
return data, nil
}
+
+func (s paymentService) getUnionPayUrl(pm *model.Payment) (result.Data, error) {
+ token := utils.Md5(pm.PaymentNo + strconv.Itoa(pm.UserID) + "_union")
+ pm.Token = token
+ err := global.DB.Save(pm).Error
+ if err != nil {
+ return nil, err
+ }
+ data := result.Data{"url": "http://api.wrtcjt.com/h5/union-pay?token=" + token, "orderId": ""}
+ return data, nil
+}
+
+func (s paymentService) UnionPay(token string) (string, error) {
+ pm := &model.Payment{}
+ err := global.DB.Where("token", token).Where("status", 0).First(&pm).Error
+
+ if err != nil {
+ return "", err
+ }
+ p := param.UnionOrderParam{}
+ p.ReqSn = pm.PaymentNo
+ p.TrxAmt = strconv.FormatFloat(pm.Amount*100, 'f', 0, 64)
+ p.LimitPay = "no_credit"
+ p.RetUrl = "http://api.wrtcjt.com/h5/gateway-pay-ret"
+ p.NotifyUrl = "http://api.wrtcjt.com/h5/binding-pay-notify"
+ p.Body = "充值"
+ p.Charset = "UTF-8"
+ p.PayType = "VSP511"
+
+ str := tlpay.TLPay.UnionPay(p)
+ return str, nil
+}
diff --git a/utils/tlpay/api.go b/utils/tlpay/api.go
index c7b65aa..0dc5b1f 100644
--- a/utils/tlpay/api.go
+++ b/utils/tlpay/api.go
@@ -237,10 +237,21 @@ func (api *tlPay) GatewayPay(p param.GatewayPayParam) string {
data = api.SetCommonParams(data, false)
sign, _ := api.sign(data)
data.Set("sign", sign)
- return api.BuildForm(data)
+ payConfig := global.Config.TlPay
+ formUrl := payConfig.BaseUrl + "/apiweb/gateway/pay"
+ return api.BuildForm(formUrl, data)
+}
+
+func (api *tlPay) UnionPay(p param.UnionOrderParam) string {
+ data, _ := utils.StructToURLValues(p)
+ data = api.SetCommonParams(data, false)
+ sign, _ := api.sign(data)
+ data.Set("sign", sign)
+ formUrl := "https://syb.allinpay.com/apiweb/h5unionpay/unionorder"
+ return api.BuildForm(formUrl, data)
}
-func (api *tlPay) BuildForm(data url.Values) string {
+func (api *tlPay) BuildForm(formUrl string, data url.Values) string {
htmlBegin := `
@@ -249,7 +260,7 @@ func (api *tlPay) BuildForm(data url.Values) string {
@@ -259,18 +270,16 @@ func (api *tlPay) BuildForm(data url.Values) string {
`