From e9ac58b1ef4ec8031cec34961c3c20ead196428a Mon Sep 17 00:00:00 2001 From: RockYang Date: Wed, 18 Sep 2024 18:07:49 +0800 Subject: [PATCH] Geek Pay notify is ready --- api/core/app_server.go | 5 +- api/core/types/config.go | 22 +- api/handler/payment_handler.go | 416 +++++++------------------ api/main.go | 11 +- api/service/payment/alipay_service.go | 34 +- api/service/payment/geekpay_service.go | 92 +++--- api/service/payment/wepay_service.go | 33 +- web/src/assets/css/member.styl | 21 ++ web/src/assets/iconfont/iconfont.css | 14 +- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 20 +- web/src/assets/iconfont/iconfont.ttf | Bin 30468 -> 30892 bytes web/src/assets/iconfont/iconfont.woff | Bin 20304 -> 20536 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 17612 -> 17888 bytes web/src/components/UserOrder.vue | 2 +- web/src/views/Member.vue | 142 ++------- 16 files changed, 270 insertions(+), 544 deletions(-) diff --git a/api/core/app_server.go b/api/core/app_server.go index 9990ddba..efa63091 100644 --- a/api/core/app_server.go +++ b/api/core/app_server.go @@ -219,10 +219,6 @@ func needLogin(c *gin.Context) bool { c.Request.URL.Path == "/api/product/list" || c.Request.URL.Path == "/api/menu/list" || c.Request.URL.Path == "/api/markMap/client" || - c.Request.URL.Path == "/api/payment/alipay/notify" || - c.Request.URL.Path == "/api/payment/hupipay/notify" || - c.Request.URL.Path == "/api/payment/payjs/notify" || - c.Request.URL.Path == "/api/payment/wechat/notify" || c.Request.URL.Path == "/api/payment/doPay" || c.Request.URL.Path == "/api/payment/payWays" || c.Request.URL.Path == "/api/suno/client" || @@ -231,6 +227,7 @@ func needLogin(c *gin.Context) bool { c.Request.URL.Path == "/api/download" || c.Request.URL.Path == "/api/video/client" || strings.HasPrefix(c.Request.URL.Path, "/api/test") || + strings.HasPrefix(c.Request.URL.Path, "/api/payment/notify/") || strings.HasPrefix(c.Request.URL.Path, "/api/user/clogin") || strings.HasPrefix(c.Request.URL.Path, "/api/config/") || strings.HasPrefix(c.Request.URL.Path, "/api/function/") || diff --git a/api/core/types/config.go b/api/core/types/config.go index f6e59727..dda50c00 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -57,8 +57,7 @@ type AlipayConfig struct { PublicKey string // 用户公钥文件路径 AlipayPublicKey string // 支付宝公钥文件路径 RootCert string // Root 秘钥路径 - NotifyURL string // 异步通知回调 - ReturnURL string // 支付成功返回地址 + NotifyHost string // 通知回调地址 } type WechatPayConfig struct { @@ -68,18 +67,16 @@ type WechatPayConfig struct { SerialNo string // 商户证书的证书序列号 PrivateKey string // 用户私钥文件路径 ApiV3Key string // API V3 秘钥 - NotifyURL string // 异步通知回调 - ReturnURL string // 支付成功返回地址 + NotifyHost string // 通知回调地址 } type HuPiPayConfig struct { //虎皮椒第四方支付配置 - Enabled bool // 是否启用该支付通道 - Name string // 支付名称,如:wechat/alipay - AppId string // App ID - AppSecret string // app 密钥 - ApiURL string // 支付网关 - NotifyURL string // 异步通知回调 - ReturnURL string // 支付成功返回地址 + Enabled bool // 是否启用该支付通道 + Name string // 支付名称,如:wechat/alipay + AppId string // App ID + AppSecret string // app 密钥 + ApiURL string // 支付网关 + NotifyHost string // 通知回调地址 } // GeekPayConfig GEEK支付配置 @@ -88,8 +85,7 @@ type GeekPayConfig struct { AppId string // 商户 ID PrivateKey string // 私钥 ApiURL string // API 网关 - NotifyURL string // 异步回调地址 - ReturnURL string // 支付成功返回地址 + NotifyHost string // 通知回调地址 } type XXLConfig struct { // XXL 任务调度配置 diff --git a/api/handler/payment_handler.go b/api/handler/payment_handler.go index 8a0112a9..0fba56b4 100644 --- a/api/handler/payment_handler.go +++ b/api/handler/payment_handler.go @@ -9,7 +9,6 @@ package handler import ( "embed" - "encoding/base64" "fmt" "geekai/core" "geekai/core/types" @@ -20,7 +19,6 @@ import ( "geekai/utils/resp" "github.com/shopspring/decimal" "net/http" - "net/url" "sync" "time" @@ -71,62 +69,94 @@ func NewPaymentHandler( } } -func (h *PaymentHandler) DoPay(c *gin.Context) { - orderNo := h.GetTrim(c, "order_no") - t := h.GetInt(c, "t", 0) - sign := h.GetTrim(c, "sign") - signStr := fmt.Sprintf("%s-%d-%s", orderNo, t, h.signKey) - newSign := utils.Sha256(signStr) - if newSign != sign { - resp.ERROR(c, "订单签名错误!") +func (h *PaymentHandler) Pay(c *gin.Context) { + payWay := c.Query("pay_way") + payType := c.Query("pay_type") + productId := c.Query("pid") + device := c.Query("device") + userId := c.Query("user_id") + + var product model.Product + err := h.DB.First(&product, productId).Error + if err != nil { + resp.ERROR(c, "Product not found") return } - // 检查二维码是否过期 - if time.Now().Unix()-int64(t) > int64(h.App.SysConfig.OrderPayTimeout) { - resp.ERROR(c, "支付二维码已过期,请重新生成!") + orderNo, err := h.snowflake.Next(false) + if err != nil { + resp.ERROR(c, "error with generate trade no: "+err.Error()) + return + } + var user model.User + err = h.DB.Where("id", userId).First(&user).Error + if err != nil { + resp.NotAuth(c) + return + } + // 创建订单 + remark := types.OrderRemark{ + Days: product.Days, + Power: product.Power, + Name: product.Name, + Price: product.Price, + Discount: product.Discount, + } + + amount, _ := decimal.NewFromFloat(product.Price).Sub(decimal.NewFromFloat(product.Discount)).Float64() + + order := model.Order{ + UserId: user.Id, + Username: user.Username, + ProductId: product.Id, + OrderNo: orderNo, + Subject: product.Name, + Amount: amount, + Status: types.OrderNotPaid, + PayWay: payWay, + PayType: payType, + Remark: utils.JsonEncode(remark), + } + err = h.DB.Create(&order).Error + if err != nil { + resp.ERROR(c, "error with create order: "+err.Error()) return } - if orderNo == "" { - resp.ERROR(c, types.InvalidArgs) - return - } - - var order model.Order - res := h.DB.Where("order_no = ?", orderNo).First(&order) - if res.Error != nil { - resp.ERROR(c, "Order not found") - return - } - - // fix: 这里先检查一下订单状态,如果已经支付了,就直接返回 - if order.Status == types.OrderPaidSuccess { - resp.ERROR(c, "订单已支付成功,无需重复支付!") - return - } - - // 更新扫码状态 - h.DB.Model(&order).UpdateColumn("status", types.OrderScanned) - - if order.PayWay == "alipay" { // 支付宝 - amount := fmt.Sprintf("%.2f", order.Amount) - uri, err := h.alipayService.PayUrlMobile(order.OrderNo, amount, order.Subject) + var payURL string + if payWay == "alipay" { // 支付宝 + money := fmt.Sprintf("%.2f", order.Amount) + notifyURL := fmt.Sprintf("%s/api/payment/notify/alipay", h.App.Config.AlipayConfig.NotifyHost) + returnURL := fmt.Sprintf("%s/member", h.App.Config.AlipayConfig.NotifyHost) + if device == "mobile" { + payURL, err = h.alipayService.PayMobile(payment.AlipayParams{ + OutTradeNo: orderNo, + Subject: product.Name, + TotalFee: money, + ReturnURL: returnURL, + NotifyURL: notifyURL, + }) + } else { + payURL, err = h.alipayService.PayPC(payment.AlipayParams{ + OutTradeNo: orderNo, + Subject: product.Name, + TotalFee: money, + ReturnURL: returnURL, + NotifyURL: notifyURL, + }) + } if err != nil { resp.ERROR(c, "error with generate pay url: "+err.Error()) return } - - c.Redirect(302, uri) - return } else if order.PayWay == "hupi" { // 虎皮椒支付 params := payment.HuPiPayReq{ Version: "1.1", TradeOrderId: orderNo, TotalFee: fmt.Sprintf("%f", order.Amount), Title: order.Subject, - NotifyURL: h.App.Config.HuPiPayConfig.NotifyURL, - WapName: "极客学长", + NotifyURL: fmt.Sprintf("%s/api/payment/notify/hupi", h.App.Config.HuPiPayConfig.NotifyHost), + WapName: "GeekAI助手", } r, err := h.huPiPayService.Pay(params) if err != nil { @@ -136,7 +166,8 @@ func (h *PaymentHandler) DoPay(c *gin.Context) { c.Redirect(302, r.URL) } else if order.PayWay == "wechat" { - uri, err := h.wechatPayService.PayUrlNative(order.OrderNo, int(order.Amount*100), order.Subject) + //uri, err := h.wechatPayService.PayUrlNative(order.OrderNo, int(order.Amount*100), order.Subject) + uri, err := h.wechatPayService.PayUrlNative(payment.WechatPayParams{}) if err != nil { resp.ERROR(c, err.Error()) return @@ -144,261 +175,28 @@ func (h *PaymentHandler) DoPay(c *gin.Context) { c.Redirect(302, uri) } else if order.PayWay == "geek" { + notifyURL := fmt.Sprintf("%s/api/payment/notify/geek", h.App.Config.GeekPayConfig.NotifyHost) + returnURL := fmt.Sprintf("%s/member", h.App.Config.GeekPayConfig.NotifyHost) params := payment.GeekPayParams{ OutTradeNo: orderNo, Method: "web", Name: order.Subject, Money: fmt.Sprintf("%f", order.Amount), ClientIP: c.ClientIP(), - Device: "pc", - Type: "alipay", + Device: device, + Type: payType, + ReturnURL: returnURL, + NotifyURL: notifyURL, } - s, err := h.geekPayService.Pay(params) + res, err := h.geekPayService.Pay(params) if err != nil { resp.ERROR(c, err.Error()) return } - resp.SUCCESS(c, s) + payURL = res.PayURL } - //resp.ERROR(c, "Invalid operations") -} - -// PayQrcode 生成支付 URL 二维码 -func (h *PaymentHandler) PayQrcode(c *gin.Context) { - var data struct { - PayWay string `json:"pay_way"` // 支付方式 - PayType string `json:"pay_type"` // 支付类别:wechat,alipay,qq... - ProductId uint `json:"product_id"` // 支付产品ID - } - if err := c.ShouldBindJSON(&data); err != nil { - resp.ERROR(c, types.InvalidArgs) - return - } - - var product model.Product - res := h.DB.First(&product, data.ProductId) - if res.Error != nil { - resp.ERROR(c, "Product not found") - return - } - - orderNo, err := h.snowflake.Next(false) - if err != nil { - resp.ERROR(c, "error with generate trade no: "+err.Error()) - return - } - user, err := h.GetLoginUser(c) - if err != nil { - resp.NotAuth(c) - return - } - - var notifyURL string - switch data.PayWay { - case "hupi": - notifyURL = h.App.Config.HuPiPayConfig.NotifyURL - break - case "geek": - notifyURL = h.App.Config.GeekPayConfig.NotifyURL - break - case "alipay": // 支付宝商户支付 - notifyURL = h.App.Config.AlipayConfig.NotifyURL - break - case "wechat": // 微信商户支付 - notifyURL = h.App.Config.WechatPayConfig.NotifyURL - default: - resp.ERROR(c, "Invalid pay way") - return - - } - // 创建订单 - remark := types.OrderRemark{ - Days: product.Days, - Power: product.Power, - Name: product.Name, - Price: product.Price, - Discount: product.Discount, - } - - amount, _ := decimal.NewFromFloat(product.Price).Sub(decimal.NewFromFloat(product.Discount)).Float64() - order := model.Order{ - UserId: user.Id, - Username: user.Username, - ProductId: product.Id, - OrderNo: orderNo, - Subject: product.Name, - Amount: amount, - Status: types.OrderNotPaid, - PayWay: data.PayWay, - PayType: data.PayType, - Remark: utils.JsonEncode(remark), - } - res = h.DB.Create(&order) - if res.Error != nil || res.RowsAffected == 0 { - resp.ERROR(c, "error with create order: "+res.Error.Error()) - return - } - - var logo string - switch data.PayType { - case "alipay": - logo = "res/img/alipay.jpg" - break - case "wechat": - logo = "res/img/wechat-pay.jpg" - break - case "qq": - logo = "res/img/qq-pay.jpg" - break - default: - logo = "res/img/geek-pay.jpg" - - } - if data.PayType == "alipay" { - logo = "res/img/alipay.jpg" - } else if data.PayType == "wechat" { - logo = "res/img/wechat-pay.jpg" - } - file, err := h.fs.Open(logo) - if err != nil { - resp.ERROR(c, "error with open qrcode log file: "+err.Error()) - return - } - - parse, err := url.Parse(notifyURL) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - timestamp := time.Now().Unix() - signStr := fmt.Sprintf("%s-%s-%d-%s", orderNo, data.PayWay, timestamp, h.signKey) - sign := utils.Sha256(signStr) - payUrl := fmt.Sprintf("%s://%s/api/payment/doPay?order_no=%s&pay_way=%s&pay_type=%s&t=%d&sign=%s", parse.Scheme, parse.Host, orderNo, data.PayWay, data.PayType, timestamp, sign) - imgData, err := utils.GenQrcode(payUrl, 400, file) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - imgDataBase64 := base64.StdEncoding.EncodeToString(imgData) - resp.SUCCESS(c, gin.H{"order_no": orderNo, "image": fmt.Sprintf("data:image/jpg;base64, %s", imgDataBase64), "url": payUrl}) -} - -// Mobile 移动端支付 -func (h *PaymentHandler) Mobile(c *gin.Context) { - var data struct { - PayWay string `json:"pay_way"` // 支付方式 - PayType string `json:"pay_type"` // 支付类别:wechat,alipay,qq... - ProductId uint `json:"product_id"` - } - if err := c.ShouldBindJSON(&data); err != nil { - resp.ERROR(c, types.InvalidArgs) - return - } - - var product model.Product - res := h.DB.First(&product, data.ProductId) - if res.Error != nil { - resp.ERROR(c, "Product not found") - return - } - - orderNo, err := h.snowflake.Next(false) - if err != nil { - resp.ERROR(c, "error with generate trade no: "+err.Error()) - return - } - user, err := h.GetLoginUser(c) - if err != nil { - resp.NotAuth(c) - return - } - - amount, _ := decimal.NewFromFloat(product.Price).Sub(decimal.NewFromFloat(product.Discount)).Float64() - var notifyURL, returnURL string - var payURL string - switch data.PayWay { - case "hupi": - notifyURL = h.App.Config.HuPiPayConfig.NotifyURL - returnURL = h.App.Config.HuPiPayConfig.ReturnURL - parse, _ := url.Parse(h.App.Config.HuPiPayConfig.ReturnURL) - baseURL := fmt.Sprintf("%s://%s", parse.Scheme, parse.Host) - params := payment.HuPiPayReq{ - Version: "1.1", - TradeOrderId: orderNo, - TotalFee: fmt.Sprintf("%f", amount), - Title: product.Name, - NotifyURL: notifyURL, - ReturnURL: returnURL, - CallbackURL: returnURL, - WapName: "极客学长", - WapUrl: baseURL, - Type: "WAP", - } - r, err := h.huPiPayService.Pay(params) - if err != nil { - errMsg := "error with generating Pay Hupi URL: " + err.Error() - logger.Error(errMsg) - resp.ERROR(c, errMsg) - return - } - payURL = r.URL - case "geek": - //totalFee := decimal.NewFromFloat(product.Price).Sub(decimal.NewFromFloat(product.Discount)).Mul(decimal.NewFromInt(100)).IntPart() - //params := url.Values{} - //params.Add("total_fee", fmt.Sprintf("%d", totalFee)) - //params.Add("out_trade_no", orderNo) - //params.Add("body", product.Name) - //params.Add("notify_url", notifyURL) - //params.Add("auto", "0") - //payURL = h.geekPayService.Pay(params) - case "alipay": - payURL, err = h.alipayService.PayUrlMobile(orderNo, fmt.Sprintf("%.2f", amount), product.Name) - if err != nil { - errMsg := "error with generating Alipay URL: " + err.Error() - resp.ERROR(c, errMsg) - return - } - case "wechat": - payURL, err = h.wechatPayService.PayUrlH5(orderNo, int(amount*100), product.Name, c.ClientIP()) - if err != nil { - errMsg := "error with generating Wechat URL: " + err.Error() - logger.Error(errMsg) - resp.ERROR(c, errMsg) - return - } - default: - resp.ERROR(c, "Unsupported pay way: "+data.PayWay) - return - } - // 创建订单 - remark := types.OrderRemark{ - Days: product.Days, - Power: product.Power, - Name: product.Name, - Price: product.Price, - Discount: product.Discount, - } - - order := model.Order{ - UserId: user.Id, - Username: user.Username, - ProductId: product.Id, - OrderNo: orderNo, - Subject: product.Name, - Amount: amount, - Status: types.OrderNotPaid, - PayWay: data.PayWay, - PayType: data.PayType, - Remark: utils.JsonEncode(remark), - } - res = h.DB.Create(&order) - if res.Error != nil || res.RowsAffected == 0 { - resp.ERROR(c, "error with create order: "+res.Error.Error()) - return - } - - resp.SUCCESS(c, gin.H{"url": payURL, "order_no": orderNo}) + resp.SUCCESS(c, payURL) } // 异步通知回调公共逻辑 @@ -505,14 +303,14 @@ func (h *PaymentHandler) GetPayWays(c *gin.Context) { } if h.App.Config.GeekPayConfig.Enabled { payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "alipay"}) - payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "wechat"}) - payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "qq"}) - payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "jd"}) + payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "wxpay"}) + payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "qqpay"}) + payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "jdpay"}) payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "douyin"}) payWays = append(payWays, gin.H{"pay_way": "geek", "pay_type": "paypal"}) } if h.App.Config.WechatPayConfig.Enabled { - payWays = append(payWays, gin.H{"pay_way": "wechat", "pay_type": "wechat"}) + payWays = append(payWays, gin.H{"pay_way": "wechat", "pay_type": "wxpay"}) } resp.SUCCESS(c, payWays) } @@ -570,32 +368,28 @@ func (h *PaymentHandler) AlipayNotify(c *gin.Context) { c.String(http.StatusOK, "success") } -// PayJsNotify PayJs 支付异步回调 -func (h *PaymentHandler) PayJsNotify(c *gin.Context) { - err := c.Request.ParseForm() - if err != nil { +// GeekPayNotify 支付异步回调 +func (h *PaymentHandler) GeekPayNotify(c *gin.Context) { + var params = make(map[string]string) + for k := range c.Request.URL.Query() { + params[k] = c.Query(k) + } + + logger.Infof("收到GeekPay订单支付回调:%+v", params) + // 检查支付状态 + if params["trade_status"] != "TRADE_SUCCESS" { + c.String(http.StatusOK, "success") + return + } + + sign := h.geekPayService.Sign(params) + if sign != c.Query("sign") { + logger.Errorf("签名验证失败, %s, %s", sign, c.Query("sign")) c.String(http.StatusOK, "fail") return } - orderNo := c.Request.Form.Get("out_trade_no") - returnCode := c.Request.Form.Get("return_code") - logger.Infof("收到PayJs订单支付回调,订单 NO:%s,支付结果代码:%v", orderNo, returnCode) - // 支付失败 - if returnCode != "1" { - return - } - - // 校验订单支付状态 - tradeNo := c.Request.Form.Get("payjs_order_id") - //err = h.geekPayService.TradeVerify(tradeNo) - //if err != nil { - // logger.Error("订单校验失败:", err) - // c.String(http.StatusOK, "fail") - // return - //} - - err = h.notify(orderNo, tradeNo) + err := h.notify(params["out_trade_no"], params["trade_no"]) if err != nil { c.String(http.StatusOK, "fail") return diff --git a/api/main.go b/api/main.go index 544abc1e..6d00d3fd 100644 --- a/api/main.go +++ b/api/main.go @@ -372,14 +372,11 @@ func main() { }), fx.Invoke(func(s *core.AppServer, h *handler.PaymentHandler) { group := s.Engine.Group("/api/payment/") - group.GET("doPay", h.DoPay) + group.GET("doPay", h.Pay) group.GET("payWays", h.GetPayWays) - group.POST("qrcode", h.PayQrcode) - group.POST("mobile", h.Mobile) - group.POST("alipay/notify", h.AlipayNotify) - group.POST("hupipay/notify", h.HuPiPayNotify) - group.POST("payjs/notify", h.PayJsNotify) - group.POST("wechat/notify", h.WechatPayNotify) + group.POST("notify/alipay", h.AlipayNotify) + group.GET("notify/geek", h.GeekPayNotify) + group.POST("notify/wechat", h.WechatPayNotify) }), fx.Invoke(func(s *core.AppServer, h *admin.ProductHandler) { group := s.Engine.Group("/api/admin/product/") diff --git a/api/service/payment/alipay_service.go b/api/service/payment/alipay_service.go index 8ab93eda..d6c8a139 100644 --- a/api/service/payment/alipay_service.go +++ b/api/service/payment/alipay_service.go @@ -44,9 +44,7 @@ func NewAlipayService(appConfig *types.AppConfig) (*AlipayService, error) { //client.DebugSwitch = gopay.DebugOn // 开启调试模式 client.SetLocation(alipay.LocationShanghai). // 设置时区,不设置或出错均为默认服务器时间 SetCharset(alipay.UTF8). // 设置字符编码,不设置默认 utf-8 - SetSignType(alipay.RSA2). // 设置签名类型,不设置默认 RSA2 - SetReturnUrl(config.ReturnURL). // 设置返回URL - SetNotifyUrl(config.NotifyURL) + SetSignType(alipay.RSA2) // 设置签名类型,不设置默认 RSA2 if err = client.SetCertSnByPath(config.PublicKey, config.RootCert, config.AlipayPublicKey); err != nil { return nil, fmt.Errorf("error with load payment public key: %v", err) @@ -55,23 +53,33 @@ func NewAlipayService(appConfig *types.AppConfig) (*AlipayService, error) { return &AlipayService{config: &config, client: client}, nil } -func (s *AlipayService) PayUrlMobile(outTradeNo string, amount string, subject string) (string, error) { +type AlipayParams struct { + OutTradeNo string `json:"out_trade_no"` + Subject string `json:"subject"` + TotalFee string `json:"total_fee"` + ReturnURL string `json:"return_url"` + NotifyURL string `json:"notify_url"` +} + +func (s *AlipayService) PayMobile(params AlipayParams) (string, error) { bm := make(gopay.BodyMap) - bm.Set("subject", subject) - bm.Set("out_trade_no", outTradeNo) - bm.Set("quit_url", s.config.ReturnURL) - bm.Set("total_amount", amount) + bm.Set("subject", params.Subject) + bm.Set("out_trade_no", params.OutTradeNo) + bm.Set("quit_url", params.ReturnURL) + bm.Set("total_amount", params.TotalFee) + bm.Set("return_url", params.ReturnURL) + bm.Set("notify_url", params.NotifyURL) bm.Set("product_code", "QUICK_WAP_WAY") return s.client.TradeWapPay(context.Background(), bm) } -func (s *AlipayService) PayUrlPc(outTradeNo string, amount string, subject string) (string, error) { +func (s *AlipayService) PayPC(params AlipayParams) (string, error) { bm := make(gopay.BodyMap) - bm.Set("subject", subject) - bm.Set("out_trade_no", outTradeNo) - bm.Set("total_amount", amount) + bm.Set("subject", params.Subject) + bm.Set("out_trade_no", params.OutTradeNo) + bm.Set("total_amount", params.TotalFee) bm.Set("product_code", "FAST_INSTANT_TRADE_PAY") - return s.client.TradePagePay(context.Background(), bm) + return s.client.SetNotifyUrl(params.NotifyURL).SetReturnUrl(params.ReturnURL).TradePagePay(context.Background(), bm) } // TradeVerify 交易验证 diff --git a/api/service/payment/geekpay_service.go b/api/service/payment/geekpay_service.go index 2018f43f..7348c0d8 100644 --- a/api/service/payment/geekpay_service.go +++ b/api/service/payment/geekpay_service.go @@ -8,15 +8,11 @@ package payment // * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ import ( - "crypto" - "crypto/rand" - "crypto/rsa" - "crypto/sha256" - "crypto/x509" - "encoding/base64" - "encoding/pem" + "encoding/json" + "errors" "fmt" "geekai/core/types" + "geekai/utils" "io" "net/http" "net/url" @@ -46,41 +42,37 @@ type GeekPayParams struct { ClientIP string `json:"clientip"` //用户IP地址 SubOpenId string `json:"sub_openid"` // 微信用户 openid,仅小程序支付需要 SubAppId string `json:"sub_appid"` // 小程序 AppId,仅小程序支付需要 + NotifyURL string `json:"notify_url"` + ReturnURL string `json:"return_url"` } // Pay 支付订单 -func (s *GeekPayService) Pay(params GeekPayParams) (string, error) { - if params.Type == "wechat" { - params.Type = "wxpay" - } +func (s *GeekPayService) Pay(params GeekPayParams) (*GeekPayResp, error) { p := map[string]string{ - "pid": s.config.AppId, - "method": params.Method, + "pid": s.config.AppId, + //"method": params.Method, "device": params.Device, "type": params.Type, "out_trade_no": params.OutTradeNo, "name": params.Name, "money": params.Money, "clientip": params.ClientIP, - "sub_openid": params.SubOpenId, - "sub_appid": params.SubAppId, - "notify_url": s.config.NotifyURL, - "return_url": s.config.ReturnURL, + "notify_url": params.NotifyURL, + "return_url": params.ReturnURL, "timestamp": fmt.Sprintf("%d", time.Now().Unix()), } - sign, err := s.Sign(p) - if err != nil { - return "", err - } - p["sign"] = sign - p["sign_type"] = "RSA" + p["sign"] = s.Sign(p) + p["sign_type"] = "MD5" return s.sendRequest(s.config.ApiURL, p) } -func (s *GeekPayService) Sign(params map[string]string) (string, error) { +func (s *GeekPayService) Sign(params map[string]string) string { // 按字母顺序排序参数 var keys []string for k := range params { + if params[k] == "" || k == "sign" || k == "sign_type" { + continue + } keys = append(keys, k) } sort.Strings(keys) @@ -93,44 +85,48 @@ func (s *GeekPayService) Sign(params map[string]string) (string, error) { signStr.WriteString(params[k]) signStr.WriteString("&") } - signString := strings.TrimSuffix(signStr.String(), "&") + signString := strings.TrimSuffix(signStr.String(), "&") + s.config.PrivateKey - // 使用RSA私钥签名 - block, _ := pem.Decode([]byte(s.config.PrivateKey)) - if block == nil { - return "", fmt.Errorf("failed to decode private key") - } - - priKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) - if err != nil { - return "", fmt.Errorf("failed to parse private key: %v", err) - } - - hashed := sha256.Sum256([]byte(signString)) - signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, crypto.SHA256, hashed[:]) - if err != nil { - panic(fmt.Sprintf("failed to sign: %v", err)) - } - - return base64.StdEncoding.EncodeToString(signature), nil + return utils.Md5(signString) } -func (s *GeekPayService) sendRequest(apiEndpoint string, params map[string]string) (string, error) { +type GeekPayResp struct { + Code int `json:"code"` + Msg string `json:"msg"` + TradeNo string `json:"trade_no"` + PayURL string `json:"payurl"` + QrCode string `json:"qrcode"` + UrlScheme string `json:"urlscheme"` // 小程序跳转支付链接 +} + +func (s *GeekPayService) sendRequest(endpoint string, params map[string]string) (*GeekPayResp, error) { form := url.Values{} for k, v := range params { form.Add(k, v) } - resp, err := http.PostForm(apiEndpoint, form) + apiURL := fmt.Sprintf("%s/mapi.php", endpoint) + logger.Infof(apiURL) + + resp, err := http.PostForm(apiURL, form) if err != nil { - return "", err + return nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) + logger.Debugf(string(body)) if err != nil { - return "", err + return nil, err } - return string(body), nil + var r GeekPayResp + err = json.Unmarshal(body, &r) + if err != nil { + return nil, errors.New("当前支付渠道暂不支持") + } + if r.Code != 1 { + return nil, errors.New(r.Msg) + } + return &r, nil } diff --git a/api/service/payment/wepay_service.go b/api/service/payment/wepay_service.go index b141a8e9..11554e9f 100644 --- a/api/service/payment/wepay_service.go +++ b/api/service/payment/wepay_service.go @@ -46,18 +46,28 @@ func NewWechatService(appConfig *types.AppConfig) (*WechatPayService, error) { return &WechatPayService{config: &config, client: client}, nil } -func (s *WechatPayService) PayUrlNative(outTradeNo string, amount int, subject string) (string, error) { +type WechatPayParams struct { + OutTradeNo string `json:"out_trade_no"` + TotalFee int `json:"total_fee"` + Subject string `json:"subject"` + ClientIP string `json:"client_ip"` + ReturnURL string `json:"return_url"` + NotifyURL string `json:"notify_url"` +} + +func (s *WechatPayService) PayUrlNative(params WechatPayParams) (string, error) { expire := time.Now().Add(10 * time.Minute).Format(time.RFC3339) // 初始化 BodyMap bm := make(gopay.BodyMap) bm.Set("appid", s.config.AppId). Set("mchid", s.config.MchId). - Set("description", subject). - Set("out_trade_no", outTradeNo). + Set("description", params.Subject). + Set("out_trade_no", params.OutTradeNo). Set("time_expire", expire). - Set("notify_url", s.config.NotifyURL). + Set("notify_url", params.NotifyURL). + Set("return_url", params.ReturnURL). SetBodyMap("amount", func(bm gopay.BodyMap) { - bm.Set("total", amount). + bm.Set("total", params.TotalFee). Set("currency", "CNY") }) @@ -71,22 +81,23 @@ func (s *WechatPayService) PayUrlNative(outTradeNo string, amount int, subject s return wxRsp.Response.CodeUrl, nil } -func (s *WechatPayService) PayUrlH5(outTradeNo string, amount int, subject string, ip string) (string, error) { +func (s *WechatPayService) PayUrlH5(params WechatPayParams) (string, error) { expire := time.Now().Add(10 * time.Minute).Format(time.RFC3339) // 初始化 BodyMap bm := make(gopay.BodyMap) bm.Set("appid", s.config.AppId). Set("mchid", s.config.MchId). - Set("description", subject). - Set("out_trade_no", outTradeNo). + Set("description", params.Subject). + Set("out_trade_no", params.OutTradeNo). Set("time_expire", expire). - Set("notify_url", s.config.NotifyURL). + Set("notify_url", params.NotifyURL). + Set("return_url", params.ReturnURL). SetBodyMap("amount", func(bm gopay.BodyMap) { - bm.Set("total", amount). + bm.Set("total", params.TotalFee). Set("currency", "CNY") }). SetBodyMap("scene_info", func(bm gopay.BodyMap) { - bm.Set("payer_client_ip", ip). + bm.Set("payer_client_ip", params.ClientIP). SetBodyMap("h5_info", func(bm gopay.BodyMap) { bm.Set("type", "Wap") }) diff --git a/web/src/assets/css/member.styl b/web/src/assets/css/member.styl index 9dab8325..4dc2209f 100644 --- a/web/src/assets/css/member.styl +++ b/web/src/assets/css/member.styl @@ -181,6 +181,27 @@ .el-button { margin 10px 5px 0 5px + padding 0 + + .icon-alipay,.icon-wechat-pay { + color #ffffff + } + .icon-qq { + color #15A6E8 + font-size 24px + } + .icon-jd-pay { + color #ffffff + font-size 24px + } + .icon-douyin { + color #0a0a0a + font-size 22px + } + .icon-paypal { + font-size 14px + color #009CDE + } } } } diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index a0959ced..e0dee322 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1726612860394') format('woff2'), - url('iconfont.woff?t=1726612860394') format('woff'), - url('iconfont.ttf?t=1726612860394') format('truetype'); + src: url('iconfont.woff2?t=1726622198991') format('woff2'), + url('iconfont.woff?t=1726622198991') format('woff'), + url('iconfont.ttf?t=1726622198991') format('truetype'); } .iconfont { @@ -13,12 +13,12 @@ -moz-osx-font-smoothing: grayscale; } -.icon-douyin:before { - content: "\e852"; +.icon-paypal:before { + content: "\e666"; } -.icon-paypal:before { - content: "\e60f"; +.icon-douyin:before { + content: "\e8db"; } .icon-qq:before { diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index 32973473..74291ab4 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}p()}})(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}p()}})(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index 7dc3877f..a38cbab5 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -6,18 +6,18 @@ "description": "", "glyphs": [ { - "icon_id": "22174321", - "name": "抖音支付", - "font_class": "douyin", - "unicode": "e852", - "unicode_decimal": 59474 + "icon_id": "7443846", + "name": "PayPal", + "font_class": "paypal", + "unicode": "e666", + "unicode_decimal": 58982 }, { - "icon_id": "1238433", - "name": "social-paypal", - "font_class": "paypal", - "unicode": "e60f", - "unicode_decimal": 58895 + "icon_id": "18166694", + "name": "抖音", + "font_class": "douyin", + "unicode": "e8db", + "unicode_decimal": 59611 }, { "icon_id": "1244217", diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index 8b2283596f825847456513e0dc78c13b446c83fb..e5b3d7deac1d95400b67e65ab91f69700136c6c8 100644 GIT binary patch delta 1442 zcma)*e@s(X6vxkfzwYaMudgj_U+JT?w%8xg0=7W=hX$%fL?CV&lf}(t;E%!tq1h@9 z|DbGh(?sGVFS?izXLQMMV@^W0EE$Pre=KZsL^u9$sM(@~RD&inaX2&W?nB77#3g$- z=biiR{haf?C-=Mq_t401=xE8VM*wI509tnJX-yCI9=QTQX8`zgTW4?T$^$hGAdLW| zZ0);RcUFZT-XZL-#NzE_!E(v8pUlUJEpOkGdE@<4`O75V9I->4-8))G`%WAO5N8Gt zxkImA1fbf|-LGeMfAbSj+#4cFZvrCk{(L`dGo8-=o_}DRADmQu6DHOBifPpY5E+sh z;Ff8+XUP+4pK)Fj&^xG9JBnH;)9JDM=oku4>A8r;B+v`92=M~RJ_QVQnrvhs2`p4= z=jb3xX;XB<(~@h;b>t4_zRrE0yOz6=o4bwjd4O4%6=tPbvsT7<2-(0SjQ=9F0j5_Z zC6bH>^r6XYiB`$BXoGAcLfSOjH#mR-1|;wSCL!FJ)g01l@rkipcpMp0 zM2r}qu_40+q_v3+hHC&hVnAslVs#cZq5-O!-b|cd=Edt&lyxhm*J%0j_|xNB{qwP#3|`rqh#zdnN9c2TP&9fhO9Sjg?5|0);_LO zC>I?Y9bXi77LGer=a*_k{jexjH10~ejuiWfFS~v2lOD>Gt@m8_p7K8Qoi901a&>v1 zKjyy|RD=DYq0n3@SDGqQ%cjD<@JNJ-oQuqsuPUFe*jBlsa(Km&=>F(r^k%HDirj#H z3;7$yd0GW0l*4*>3Ho3FK7$MJGu$TCm-sk4ZBtgFSiB}t9oKy#9tc*TEavnPMo(8A ziaz}Ri9d^Gbs7f)B|aHpPI0(VRV)!tMDe1YwK{-ha)MwWQA@TK(=P@P{r?g1G{%I; zfy2nhIjkgVp#~HW_?PM;I{K!--WQea67Ca>E~~Mr=dgu07usL+Vn>137V*0zESFk6 zW+O%Y5x6U6?QJ5T5tT(0n+lb!#YDhs3;T-*T4wc_1d5_YGgx8`#k-T;4F+s?x#}yD zaaCqS+#xEfrL(vxTBE8wZqyy#v;=o;Fkq#~wZ1$VFOpf2?+_N?#%O#A&WarSXLE+P z&>yU03dFP^F>m!^LDW~!+qA@7*)H;}3k9WlfmREI$HxR&!lR-kla6gFDqc2IX18$k z87$GP*Oll`B?utckts^JLv#v&AbIEh0KB%fCeH zylTygx@GFe|Ad~+n5@bK#&>7*;3o$^5*41KDh1_-#{+^~AW$8GY|wvU$Y<$K=zb_8 zAHG1)qUb$DnjsjdCS9^4PCCNA&^tCaiq)bTOBI<^+3B-&`>Ig5w7y}up}sV%PqsLn zg-(Cc?@u<>`9H1gs6$snfhVW7HgAZKXG8O7b7MHdd?kd|JhwI&TpOgu*Q8f}4lw4D an^VSgYj3)>liS(7xA)bqvAvo1sJ{Sz5LL$j delta 1002 zcmZ8fZD?Cn7=F*aC->&7iEVCjlQy~OO=glMS=*b$OtV?yjI(5|V_~cex0$rvT3Oq~ zElwk{#4@$R(Y0JGDpLI6Dh!EY+}xnsP^5n>r9XtptWp?+>j=fE6H(iEGWCaYczC~_ z_j%vLIUn9dXV%fQ`{=g-=o|o~2gfqGiz^op0G$U=j|`6%j$M80XET8QeSo3-$kEJ@ zU-;-3!d)YXj*x`<23{oo0>PG%vHXi~Y}QwZUX5UKG&`6%J9%OjK({(GDfphV0#L)b z?8*FrTZ?Z4oGg(^uRvp7sa}FZc)k8>{T{wEv)t+`95}fB8RO1-puq@&K1 zl2(S5(+tRT3fE| zx;^CpN6N7*goNTLr@nnf^oeV(Pu*&FdCS0qf+y+u*t_Jj`=Y+ttw}%jr~IpdNZ|XR zB{;fGyX{;@y5pP9>s=SSHl-G+9EvsW2v9HK#>1N6VE~gD5|Fu>Ga$F<>Oc=QN4gPm zdAyAbiAfX=@n(|>m% zg>y&_hZK_>uSqG1F5M^o-9V*C!)C%MY_2EriA4TvK0(j0Lgdki(-{#cXShF1K0Hkp zEz+0CqCA9Q7Zd@BA>P6=tN{g(i!maGb-T8kx{=CDY&T(U7)+BS#8eVtDR+uN}w7??UZWwNTg*z}1}hfCOgJVe{#79{TO zG;{dtZla})K==6nY*htc@%PMxRz0$ODbkN^Mx diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index 426fce0c2100df24c4d077b53b5391fa230d46af..c20755b7a8f6759f87b0f00101eeb4617e0c5c54 100644 GIT binary patch delta 19959 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 G0002;hnkH5 delta 19730 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 P(dw>innk;mX&$NyeA%qa literal 17612 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 diff --git a/web/src/components/UserOrder.vue b/web/src/components/UserOrder.vue index dd8a6c59..13432f27 100644 --- a/web/src/components/UserOrder.vue +++ b/web/src/components/UserOrder.vue @@ -1,5 +1,5 @@