Compare commits
No commits in common. "18d5f960961893e6dca4e37bac5ddb269a01b83c" and "ef153770afe93bc076d49d17b15755bdb3f4af88" have entirely different histories.
18d5f96096
...
ef153770af
|
@ -36,8 +36,6 @@ const (
|
||||||
AppRsaDecryptKeyNotFound = 1203
|
AppRsaDecryptKeyNotFound = 1203
|
||||||
AppDecryptDataDiscrepancy = 1204
|
AppDecryptDataDiscrepancy = 1204
|
||||||
AppNotifyUrlNotFound = 1205
|
AppNotifyUrlNotFound = 1205
|
||||||
AppIdNotSet = 1206
|
|
||||||
InvalidAppIdType = 1207
|
|
||||||
AppRsaDecryptFail = 1210
|
AppRsaDecryptFail = 1210
|
||||||
AppRsaEncryptKeyNotFound = 1211
|
AppRsaEncryptKeyNotFound = 1211
|
||||||
AppRsaEncryptFail = 1212
|
AppRsaEncryptFail = 1212
|
||||||
|
@ -107,8 +105,6 @@ var MsgZH = map[int]string{
|
||||||
AppDecryptDataDiscrepancy: "解密数据不一致",
|
AppDecryptDataDiscrepancy: "解密数据不一致",
|
||||||
SystemError: "系统错误",
|
SystemError: "系统错误",
|
||||||
AppNotifyUrlNotFound: "未设置回调地址",
|
AppNotifyUrlNotFound: "未设置回调地址",
|
||||||
AppIdNotSet: "appId未设置",
|
|
||||||
InvalidAppIdType: "无效的app_id类型",
|
|
||||||
|
|
||||||
AppRsaDecryptKeyNotFound: "密匙缺失,无法进行Rsa解密",
|
AppRsaDecryptKeyNotFound: "密匙缺失,无法进行Rsa解密",
|
||||||
AppRsaDecryptFail: "Rsa解密失败",
|
AppRsaDecryptFail: "Rsa解密失败",
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
package pojo
|
package pojo
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NO_CRYPT int32 = iota
|
RSA int32 = iota + 1
|
||||||
RSA
|
|
||||||
SM2
|
SM2
|
||||||
SM4
|
SM4
|
||||||
)
|
)
|
||||||
|
|
|
@ -154,7 +154,7 @@ func GenRequest(c *gin.Context, request interface{}) (msgs []string, err error)
|
||||||
|
|
||||||
func ValidApiData(dataByte []byte, validStruct interface{}) (msgs []string, err error) {
|
func ValidApiData(dataByte []byte, validStruct interface{}) (msgs []string, err error) {
|
||||||
validate := validator.New()
|
validate := validator.New()
|
||||||
err = sonic.Unmarshal(dataByte, validStruct)
|
err = json.Unmarshal(dataByte, validStruct)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = errors.New(errorcode.GetMsg(errorcode.ParamError, ""))
|
err = errors.New(errorcode.GetMsg(errorcode.ParamError, ""))
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package middlewares
|
||||||
import (
|
import (
|
||||||
"PaymentCenter/app/constants/common"
|
"PaymentCenter/app/constants/common"
|
||||||
"PaymentCenter/app/constants/errorcode"
|
"PaymentCenter/app/constants/errorcode"
|
||||||
"PaymentCenter/app/constants/pojo"
|
|
||||||
"PaymentCenter/app/http/controllers"
|
"PaymentCenter/app/http/controllers"
|
||||||
"PaymentCenter/app/http/entities/front"
|
"PaymentCenter/app/http/entities/front"
|
||||||
"PaymentCenter/app/http/requestmapping"
|
"PaymentCenter/app/http/requestmapping"
|
||||||
|
@ -12,10 +11,7 @@ import (
|
||||||
"PaymentCenter/app/utils"
|
"PaymentCenter/app/utils"
|
||||||
"PaymentCenter/config"
|
"PaymentCenter/config"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/bytedance/sonic"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -134,23 +130,19 @@ func ValidateRequest() gin.HandlerFunc {
|
||||||
func ValidatePayRequest() gin.HandlerFunc {
|
func ValidatePayRequest() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
path = c.FullPath()
|
path = c.FullPath()
|
||||||
code int
|
code int
|
||||||
logId int64
|
log_id int64
|
||||||
errCode int
|
|
||||||
handler func() (interface{}, bool)
|
|
||||||
requestData front.RequestBody
|
|
||||||
)
|
)
|
||||||
postBody, err := io.ReadAll(c.Request.Body)
|
|
||||||
if err != nil {
|
|
||||||
controllers.ApiRes(c, nil, errorcode.ParamError)
|
|
||||||
}
|
|
||||||
|
|
||||||
_err := sonic.Unmarshal(postBody, &requestData)
|
var handler func() (interface{}, bool)
|
||||||
if _err != nil {
|
requestData, err := utils.SonicApiDataToStruct(controllers.GetRequest(c), &front.RequestBody{})
|
||||||
|
if err != nil {
|
||||||
controllers.ApiRes(c, nil, errorcode.ParamError)
|
controllers.ApiRes(c, nil, errorcode.ParamError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
requestDataStruct := requestData.(*front.RequestBody)
|
||||||
|
|
||||||
//判断时间
|
//判断时间
|
||||||
//now := time.Now().UnixNano() / 1000000
|
//now := time.Now().UnixNano() / 1000000
|
||||||
//if requestDataStruct.Timestamp > now || (config.GetConf().TimeOut != 0 && (now-requestDataStruct.Timestamp) > config.GetConf().TimeOut) {
|
//if requestDataStruct.Timestamp > now || (config.GetConf().TimeOut != 0 && (now-requestDataStruct.Timestamp) > config.GetConf().TimeOut) {
|
||||||
|
@ -158,7 +150,7 @@ func ValidatePayRequest() gin.HandlerFunc {
|
||||||
// return
|
// return
|
||||||
//}
|
//}
|
||||||
//获取app信息
|
//获取app信息
|
||||||
appCheck := services.GetAppCheck(requestData.AppId, c.ClientIP())
|
appCheck := services.GetAppCheck(requestDataStruct.AppId, c.ClientIP())
|
||||||
//存入请求记录
|
//存入请求记录
|
||||||
if appCheck.Code != errorcode.Success {
|
if appCheck.Code != errorcode.Success {
|
||||||
controllers.ApiRes(c, nil, appCheck.Code)
|
controllers.ApiRes(c, nil, appCheck.Code)
|
||||||
|
@ -166,39 +158,38 @@ func ValidatePayRequest() gin.HandlerFunc {
|
||||||
}
|
}
|
||||||
c.Set("appCheckInfo", appCheck)
|
c.Set("appCheckInfo", appCheck)
|
||||||
//解密
|
//解密
|
||||||
if appCheck.App.KeyType != pojo.NO_CRYPT {
|
dataByte, errCode := api.DeCrypt(appCheck.App, requestDataStruct.Data, requestDataStruct.Key)
|
||||||
|
if errCode != errorcode.Success {
|
||||||
postBody, errCode = api.DeCrypt(appCheck.App, requestData.Data, requestData.Key)
|
controllers.ApiRes(c, nil, errCode)
|
||||||
if errCode != errorcode.Success {
|
return
|
||||||
controllers.ApiRes(c, nil, errCode)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
reCheck := appCheck.ReCheckAfterDecrypt(postBody, &requestData)
|
|
||||||
//检查解密后的数据是否与请求一致
|
//检查解密后的数据是否与请求一致
|
||||||
|
reCheck := appCheck.ReCheckAfterDecrypt(dataByte, requestDataStruct)
|
||||||
if !reCheck {
|
if !reCheck {
|
||||||
controllers.ApiRes(c, nil, appCheck.GetCode())
|
controllers.ApiRes(c, nil, appCheck.GetCode())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//表单验证
|
//表单验证
|
||||||
|
|
||||||
handler = requestmapping.FrontRequestMap[path]
|
handler = requestmapping.FrontRequestMap[path]
|
||||||
v, isSaveLog := handler()
|
v, isSaveLog := handler()
|
||||||
if isSaveLog {
|
if isSaveLog {
|
||||||
//记录请求日志
|
//记录请求日志
|
||||||
logId, code = services.AddRequestLog(postBody, c.ClientIP(), path)
|
log_id, code = services.AddRequestLog(dataByte, c.ClientIP(), path)
|
||||||
if code != errorcode.Success {
|
if code != errorcode.Success {
|
||||||
controllers.ApiRes(c, nil, errCode)
|
controllers.ApiRes(c, nil, errCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Set("log", logId)
|
c.Set("log", log_id)
|
||||||
msg, err := controllers.ValidApiData(postBody, v)
|
msg, err := controllers.ValidApiData(dataByte, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Log(c, "参数错误", "path=", path, "err=", err.Error(), "msg=", msg)
|
utils.Log(c, "参数错误", "path=", path, "err=", err.Error(), "msg=", msg)
|
||||||
controllers.ApiRes(c, nil, errorcode.ParamError, msg...)
|
controllers.ApiRes(c, nil, errorcode.ParamError, msg...)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = json.Unmarshal(postBody, &v)
|
err = json.Unmarshal(dataByte, &v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
controllers.ApiRes(c, nil, errorcode.Forbidden)
|
controllers.ApiRes(c, nil, errorcode.Forbidden)
|
||||||
return
|
return
|
||||||
|
@ -208,27 +199,3 @@ func ValidatePayRequest() gin.HandlerFunc {
|
||||||
c.Next()
|
c.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAppId(postData map[string]interface{}) (appId int64, errCode int) {
|
|
||||||
var err error
|
|
||||||
if appIdValue, ok := postData["app_id"]; !ok {
|
|
||||||
return 0, errorcode.AppIdNotSet
|
|
||||||
} else {
|
|
||||||
switch appIdValTyped := appIdValue.(type) {
|
|
||||||
case float64:
|
|
||||||
appId = int64(appIdValTyped) // 显式转换
|
|
||||||
case int:
|
|
||||||
appId = int64(appIdValTyped) // 显式转换
|
|
||||||
case string:
|
|
||||||
// 如果appId是字符串,你可能需要将其解析为整数
|
|
||||||
// 注意:这里可能会因为格式错误而失败
|
|
||||||
appId, err = strconv.ParseInt(appIdValTyped, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return 0, errorcode.InvalidAppIdType
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return 0, errorcode.InvalidAppIdType
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return appId, errorcode.Success
|
|
||||||
}
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ func RegisterRoute(router *gin.Engine) {
|
||||||
notify.POST("/ali/:payChannelId", front.AliCallback)
|
notify.POST("/ali/:payChannelId", front.AliCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
pay := v1.Group("/pay", middlewares.ValidatePayRequest())
|
pay := v1.Group("/pay", middlewares.ValidateRequest(), middlewares.ValidatePayRequest())
|
||||||
{
|
{
|
||||||
pay.POST("/url", front.PayUrl)
|
pay.POST("/url", front.PayUrl)
|
||||||
pay.POST("/query", front.QueryOrder) //查询订单
|
pay.POST("/query", front.QueryOrder) //查询订单
|
||||||
|
|
|
@ -38,7 +38,7 @@ func TestSM2Encrypt(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSM2Decrypt(t *testing.T) {
|
func TestSM2Decrypt(t *testing.T) {
|
||||||
en := "MDRkZDJkYzE1ZmIyZTdjMDRiNTlhZGM5OGM1NjBjM2RhZWVkMzhkMjljYjFkMmEyNjUzMmZlZDRkMWUxMjc5MjQxM2M5OTJiMTk5OWQ4MzgwOTdjYjhhMTU4ODA3OTNmZDNiM2FjZmE2NWNjNDAzZTgyODZjZjM5Y2NkMWU2NmJjY2EwNjU0N2NlNzM3N2M3YWViMmRmN2UzNGQ3YTIyMzI1NWJiMzU5NzljMDVlNjg2MTQzMGE4Y2VmNDZmMTU4YTYxNmI5ZjE2YTcwYzc0MTRhNmNmMWE2NWE5ZTE1YWM1ODBmODk1MWNiOWNhMzBlMDNhMjQzZmZjZWY4YjQzOWUzOGM5NmU0MGQyMTc5YjY5YThhNGQ3ZTQxMjZlMzA1MGZlNWIxZDI4Mzc0YjU3MmRiODBiMjFiMWY4NGYwNDBjYTE3NTRhN2FjMDk5Y2ZmZGI5MDM3NjIxYTE0ODAzNGIyOTU4NjA4ZDM4MzNlOGIwNDE4MWQ4NGUyMWU0OTNmZjYzNzNjMGQ4Y2M0ODVkYzM4NjZlYjZlOWZiYzVjZGFmMDExNWNiYWNiODA4Y2ZkYjczODlmZmJlZDliNmQzMDdiYTczY2EyOTVlOWNhM2RhZmNlNDk1YTZiNWI4NzFhYzdlN2U2ZTJmZWFlOGU3YTllOTFhYTE4ZGY4MzVkNWI2YjFkOGFkY2NhYWM0YjMwOTU3NzUxMmZkYWVlMmVhOWJlMTkwMWUxOTUzMzFmN2UyZjU5NmFkOGRiN2Q1ZDJmYzI2MDA5NjE4YmNhNzc="
|
en := encrypt()
|
||||||
decrypt, err := SM2Decrypt(en, SELF_PUB, SELF_PRI)
|
decrypt, err := SM2Decrypt(en, SELF_PUB, SELF_PRI)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
Loading…
Reference in New Issue