diff --git a/api/index.go b/api/index.go index f83b044..130871d 100644 --- a/api/index.go +++ b/api/index.go @@ -41,11 +41,11 @@ func Pay(c *gin.Context) (utils.Data, error) { var param = alipay.TradeWapPay{} param.OutTradeNo = order.OrderNo - param.TotalAmount = strconv.FormatFloat(order.PayAmount, 'E', -1, 64) + param.TotalAmount = strconv.FormatFloat(order.PayAmount, 'f', -1, 64) param.Subject = order.Subject - // global.Config.Server.Domain + token := utils.Md5(order.OrderNo + strconv.Itoa(order.UserId) + strconv.FormatInt(time.Now().Unix(), 10)) param.NotifyURL = global.Config.Server.Domain + "/notify" - param.ReturnURL = global.Config.Server.Domain + "/return" + param.ReturnURL = global.Config.Server.Domain + "/return?token=" + token client, err := alipay.New(global.Config.Alipay.AppId, global.Config.Alipay.PrivateKey, true) if err != nil { return nil, errors.NewBusinessError("初始化支付宝失败") @@ -57,12 +57,11 @@ func Pay(c *gin.Context) (utils.Data, error) { fmt.Println(result.String()) order.PayUrl = result.String() - // utils.Md5(order.OrderNo + strconv.Itoa(order.UserId) + strconv.FormatInt(time.Now().Unix(), 10)) - order.Token = order.OrderNo - global.DB.Save(order) + order.Token = token + global.DB.Save(&order) data := utils.Data{ - "pay_url": global.Config.Server.Domain + "/payment/" + order.OrderNo, + "pay_url": global.Config.Server.Domain + "/payment?token=" + token, } return data, nil } @@ -111,6 +110,9 @@ func Notify(c *gin.Context) { log.Printf("初始化支付宝失败:%v", err) return } + + client.LoadAliPayPublicKey(global.Config.Alipay.AliPublicKey) + notification, err := client.DecodeNotification(c.Request.Form) if err != nil { log.Printf("解析异步通知发生错误:%v", err) @@ -187,39 +189,29 @@ func postToSdk(url string, data map[string]interface{}) string { } func Return(c *gin.Context) { - var req request.ReturnRequest - // 将路由参数绑定到结构体中 - if err := c.ShouldBindUri(&req); err != nil { - c.Writer.WriteHeader(http.StatusOK) - c.Writer.Write([]byte("参数错误")) - return - } + token := c.Query("token") order := model.Order{} - tx := global.DB.Where("order_no = ?", req.OrderNo).First(&order) + tx := global.DB.Where("token = ?", token).First(&order) if tx.Error != nil { c.Writer.WriteHeader(http.StatusOK) c.Writer.Write([]byte("订单不存在")) return } - c.Redirect(http.StatusFound, order.ReturnUrl) + c.Redirect(http.StatusMovedPermanently, order.ReturnUrl) } func Payment(c *gin.Context) { - var req request.PaymentRequest - // 将路由参数绑定到结构体中 - if err := c.ShouldBindUri(&req); err != nil { - c.Writer.WriteHeader(http.StatusOK) - c.Writer.Write([]byte("参数错误")) - return - } + token := c.Query("token") order := model.Order{} - tx := global.DB.Where("token = ?", req.Token).First(&order) + tx := global.DB.Where("token = ?", token).First(&order) + fmt.Println(tx) if tx.Error != nil { + fmt.Println(tx.Error) c.Writer.WriteHeader(http.StatusOK) c.Writer.Write([]byte("订单不存在")) return } - c.Redirect(http.StatusFound, order.PayUrl) + c.Redirect(http.StatusMovedPermanently, order.PayUrl) } diff --git a/config.yaml b/config.yaml index b227f12..72ff652 100644 --- a/config.yaml +++ b/config.yaml @@ -4,6 +4,7 @@ server: alipay: app-id: "2021004129619376" private-key: "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQChC/5Psy+biyzdT/CkCknQKax44Ol0i6kAWVkw4BYERevISFqOHpVmlztcnYGx3LIDOeReYQ0ghLLT+6oGrymXzPbIOE+PTUEpPfIRdB8P96mkcbuZ7MnMCsA1vXSjYezVIAu8vdzp4FL2H1p3+gwhuLGT5w9tOUZmNAkKI8xEQwXeFDWlQ5G9w5unigEGnlODqxcStrvL14pceqsA3bm9sEDuSqVAmBXbEZxZyWnYoRJj4kNMqYIXLXwsPzE8268B+0NT9plzv8mGBI2jkwBTXvc1TjnAIK6O0vRfAz82Jz6RhMwIIOrA65F1oO44bihd/4lH+FjrMy5nYeEuBZeZAgMBAAECggEBAJ/EPi7jHL+6em+z9o9GhaO1NB1XQ0MTqj1mZk1OgYkLtLWk0fFb9eso7QMcXqYMw6zfqebXcSZpft8+M5cd/q1R8SEAfC01/wbjJVqbUJWOpQU2r14swqVhpP2rTiMn6sQkXoCH+rkqiiMRR7buoUpy5/hKqcs5ntWVmcItcV/lZ/SOshXIY1Pff9WcJkNUQqtM8OizjSA1htc3XencsOroU6KKLnVdBcGYQJQtr7hBQshgGiaNKapv6n/qGV6J6V7uBuSfwZhNXo0GxbBqZHW3LCesipPkNAvYCu+DhpqVr+j44apGhZ56cIhqdYCrnPrMKysvYHnQ7sm3GhwnimECgYEA5WeTVLkRj7gmcWQQn7KobUxfdQXZguJdVYguTwbWENbZRTDxlv3aZvivAMDx9xDfEd58/xqm5mUathxG8M/HINJ9u32elhFLXLHPD5QzCqv4+X+dZmtnnqEHa5smSEpFL2vJ7v8FGnrAqXiZVye7uqcT7j/6hCZol+EZ1SPz6g8CgYEAs7emjtDwKyzyO1kRQfTB/smlS/hfIvknZZKQoYYRgiB60f2t6aDJOzjUMCIgClWpQztDzbKonKx1ykCmiSgtUJF9MVP4iz5cJKc0wdnjO20DxFJGMHl89ejlfrfmM5D1E0d2l7kpO6M/66mjNT7fGtAdorAw8OzKbZh/KCfsq9cCgYEApWEL95ILtP5eyHQI//f+L/1U+7oh2pdyDc1FBTe6bx1UOOtV3zJWltFE6Fgwl5qUFf+9QPNnysSsgwjTo5tGxMS6W8Xt4+XH3KVazrJaMaFUthln0YQwiU0xWkPZT1grlEoyo5c5iKNh7UrB0PEWBzOXzLRW15oQ4R0oUF3A48UCgYARV4Nm/JpwUCH/wBR+PNQLdgHRVuI3SbuXfZEfRQSjfebcJJKHnNBOOqmfC2v0E1gF+M4OJ1NF6w5iueJYEdxtjdx6yhONvDLABrJ8kj3vGhHm+9lyDAcW46Zhl/VKvI4pkhfLhD6KVrJwVyo8lRiKSdLSRBY06WSPNsvuYAvieQKBgQDk52HC2XLdui/wMnESIJ/+qwuKh/BAC7e/jEuZpQxRFVbE8L2m638f+tkXdHlMERqaROd2h31cPpvZzOyeJBvhUEmuQcBfq+G4YsRQIH0XDvx/nBO4m03nFOXyLkFx4X1fZs/0i3CO506WHdgkM5wd8nA6+9S4DdNAjHvoC4WQ3A==" + ali-public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhgLRPY+3aSGRvlcivmcPnSSL9v3BXSea3uDOZpIpzydHxQ16c/A2m6kVh9LxlJJngXldOkO2Q4VS32RufZntc9fkjiiuUxDBlFPKl5x72eiQVoBX4yM7j0gtBlwQFezsIPD0SRC/uxj75+MtjDUupAQLA4gB4zgSDmWWYAIGQlgXXAQExr5k7P1dXrXJMP9SpIYn3Uaug5ifqxanoiDCmMp/sMFasjlVBDIpLOZuKgBwcX3d2FmhRdWIWR5UVy3IbtWuqTJ8vqH8j6Y2jVFLxBA7+woYc0s7npZ0kTa0yGXFw/9LGinSGshGUCBjuAoi67cW6YvODjYFHuGqsrXZvwIDAQAB" database: host: "47.98.244.18" port: "3306" diff --git a/config/alipay.go b/config/alipay.go index f70d7d6..8ffb837 100644 --- a/config/alipay.go +++ b/config/alipay.go @@ -1,6 +1,7 @@ package config type Alipay struct { - AppId string `yaml:"app-id"` - PrivateKey string `yaml:"private-key"` + AppId string `yaml:"app-id"` + PrivateKey string `yaml:"private-key"` + AliPublicKey string `yaml:"ali-public-key"` } diff --git a/main b/main index 6791332..0cd8ec8 100644 Binary files a/main and b/main differ diff --git a/main.go b/main.go index e9accf1..d2b0ed0 100644 --- a/main.go +++ b/main.go @@ -17,9 +17,9 @@ func main() { r.GET("/ping", utils.BuildJsonHandler(api.Index)) r.GET("/error", utils.BuildJsonHandler(api.Error)) r.POST("/pay", utils.BuildJsonHandler(api.Pay)) - r.POST("/payment/:token", utils.BuildHandler(api.Payment)) + r.GET("/payment", utils.BuildHandler(api.Payment)) r.POST("/notify", utils.BuildHandler(api.Notify)) - r.GET("/return/:order_no", utils.BuildHandler(api.Return)) + r.GET("/return", utils.BuildHandler(api.Return)) r.GET("/test-post", utils.BuildJsonHandler(api.TestPost)) err := r.Run(":" + global.Config.Server.Port) // listen and serve on 0.0.0.0:8080 panic(err) diff --git a/utils/str.go b/utils/str.go index 497b522..2c8bd20 100644 --- a/utils/str.go +++ b/utils/str.go @@ -2,11 +2,13 @@ package utils import ( "crypto/md5" - "io" + "encoding/hex" ) func Md5(str string) string { - h := md5.New() - _, _ = io.WriteString(h, str) - return string(h.Sum(nil)) + hash := md5.New() + hash.Write([]byte(str)) + bytes := hash.Sum(nil) + md5Str := hex.EncodeToString(bytes) + return md5Str }