<feat>不加密类型
This commit is contained in:
parent
848ebcc443
commit
1d5303a4d1
app
constants
http
utils/encrypt/sm2
|
@ -36,6 +36,8 @@ const (
|
|||
AppRsaDecryptKeyNotFound = 1203
|
||||
AppDecryptDataDiscrepancy = 1204
|
||||
AppNotifyUrlNotFound = 1205
|
||||
AppIdNotSet = 1206
|
||||
InvalidAppIdType = 1207
|
||||
AppRsaDecryptFail = 1210
|
||||
AppRsaEncryptKeyNotFound = 1211
|
||||
AppRsaEncryptFail = 1212
|
||||
|
@ -105,6 +107,8 @@ var MsgZH = map[int]string{
|
|||
AppDecryptDataDiscrepancy: "解密数据不一致",
|
||||
SystemError: "系统错误",
|
||||
AppNotifyUrlNotFound: "未设置回调地址",
|
||||
AppIdNotSet: "appId未设置",
|
||||
InvalidAppIdType: "无效的app_id类型",
|
||||
|
||||
AppRsaDecryptKeyNotFound: "密匙缺失,无法进行Rsa解密",
|
||||
AppRsaDecryptFail: "Rsa解密失败",
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
package pojo
|
||||
|
||||
const (
|
||||
RSA int32 = iota + 1
|
||||
NO_CRYPT int32 = iota
|
||||
RSA
|
||||
SM2
|
||||
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) {
|
||||
validate := validator.New()
|
||||
err = json.Unmarshal(dataByte, validStruct)
|
||||
err = sonic.Unmarshal(dataByte, validStruct)
|
||||
if err != nil {
|
||||
err = errors.New(errorcode.GetMsg(errorcode.ParamError, ""))
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package middlewares
|
|||
import (
|
||||
"PaymentCenter/app/constants/common"
|
||||
"PaymentCenter/app/constants/errorcode"
|
||||
"PaymentCenter/app/constants/pojo"
|
||||
"PaymentCenter/app/http/controllers"
|
||||
"PaymentCenter/app/http/entities/front"
|
||||
"PaymentCenter/app/http/requestmapping"
|
||||
|
@ -11,7 +12,10 @@ import (
|
|||
"PaymentCenter/app/utils"
|
||||
"PaymentCenter/config"
|
||||
"encoding/json"
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/gin-gonic/gin"
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
|
@ -130,19 +134,23 @@ func ValidateRequest() gin.HandlerFunc {
|
|||
func ValidatePayRequest() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
var (
|
||||
path = c.FullPath()
|
||||
code int
|
||||
log_id int64
|
||||
path = c.FullPath()
|
||||
code int
|
||||
logId int64
|
||||
errCode int
|
||||
handler func() (interface{}, bool)
|
||||
requestData front.RequestBody
|
||||
)
|
||||
|
||||
var handler func() (interface{}, bool)
|
||||
requestData, err := utils.SonicApiDataToStruct(controllers.GetRequest(c), &front.RequestBody{})
|
||||
postBody, err := io.ReadAll(c.Request.Body)
|
||||
if err != nil {
|
||||
controllers.ApiRes(c, nil, errorcode.ParamError)
|
||||
}
|
||||
|
||||
_err := sonic.Unmarshal(postBody, &requestData)
|
||||
if _err != nil {
|
||||
controllers.ApiRes(c, nil, errorcode.ParamError)
|
||||
return
|
||||
}
|
||||
requestDataStruct := requestData.(*front.RequestBody)
|
||||
|
||||
//判断时间
|
||||
//now := time.Now().UnixNano() / 1000000
|
||||
//if requestDataStruct.Timestamp > now || (config.GetConf().TimeOut != 0 && (now-requestDataStruct.Timestamp) > config.GetConf().TimeOut) {
|
||||
|
@ -150,45 +158,46 @@ func ValidatePayRequest() gin.HandlerFunc {
|
|||
// return
|
||||
//}
|
||||
//获取app信息
|
||||
appCheck := services.GetAppCheck(requestDataStruct.AppId, c.ClientIP())
|
||||
appCheck := services.GetAppCheck(requestData.AppId, c.ClientIP())
|
||||
//存入请求记录
|
||||
if appCheck.Code != errorcode.Success {
|
||||
controllers.ApiRes(c, nil, appCheck.Code)
|
||||
return
|
||||
}
|
||||
//解密
|
||||
dataByte, errCode := api.DeCrypt(appCheck.App, requestDataStruct.Data, requestDataStruct.Key)
|
||||
if errCode != errorcode.Success {
|
||||
controllers.ApiRes(c, nil, errCode)
|
||||
return
|
||||
}
|
||||
if appCheck.App.KeyType != pojo.NO_CRYPT {
|
||||
|
||||
postBody, errCode = api.DeCrypt(appCheck.App, requestData.Data, requestData.Key)
|
||||
if errCode != errorcode.Success {
|
||||
controllers.ApiRes(c, nil, errCode)
|
||||
return
|
||||
}
|
||||
}
|
||||
reCheck := appCheck.ReCheckAfterDecrypt(postBody, &requestData)
|
||||
//检查解密后的数据是否与请求一致
|
||||
reCheck := appCheck.ReCheckAfterDecrypt(dataByte, requestDataStruct)
|
||||
if !reCheck {
|
||||
controllers.ApiRes(c, nil, appCheck.GetCode())
|
||||
return
|
||||
}
|
||||
//表单验证
|
||||
|
||||
handler = requestmapping.FrontRequestMap[path]
|
||||
v, isSaveLog := handler()
|
||||
if isSaveLog {
|
||||
//记录请求日志
|
||||
log_id, code = services.AddRequestLog(dataByte, c.ClientIP(), path)
|
||||
logId, code = services.AddRequestLog(postBody, c.ClientIP(), path)
|
||||
if code != errorcode.Success {
|
||||
controllers.ApiRes(c, nil, errCode)
|
||||
}
|
||||
}
|
||||
|
||||
c.Set("log", log_id)
|
||||
msg, err := controllers.ValidApiData(dataByte, v)
|
||||
c.Set("log", logId)
|
||||
msg, err := controllers.ValidApiData(postBody, v)
|
||||
if err != nil {
|
||||
utils.Log(c, "参数错误", "path=", path, "err=", err.Error(), "msg=", msg)
|
||||
controllers.ApiRes(c, nil, errorcode.ParamError, msg...)
|
||||
c.Abort()
|
||||
}
|
||||
err = json.Unmarshal(dataByte, &v)
|
||||
err = json.Unmarshal(postBody, &v)
|
||||
if err != nil {
|
||||
controllers.ApiRes(c, nil, errorcode.Forbidden)
|
||||
return
|
||||
|
@ -198,3 +207,27 @@ func ValidatePayRequest() gin.HandlerFunc {
|
|||
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)
|
||||
}
|
||||
|
||||
pay := v1.Group("/pay", middlewares.ValidateRequest(), middlewares.ValidatePayRequest())
|
||||
pay := v1.Group("/pay", middlewares.ValidatePayRequest())
|
||||
{
|
||||
pay.POST("/url", front.PayUrl)
|
||||
pay.POST("/query", front.QueryOrder) //查询订单
|
||||
|
|
|
@ -38,7 +38,7 @@ func TestSM2Encrypt(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSM2Decrypt(t *testing.T) {
|
||||
en := encrypt()
|
||||
en := "MDRkZDJkYzE1ZmIyZTdjMDRiNTlhZGM5OGM1NjBjM2RhZWVkMzhkMjljYjFkMmEyNjUzMmZlZDRkMWUxMjc5MjQxM2M5OTJiMTk5OWQ4MzgwOTdjYjhhMTU4ODA3OTNmZDNiM2FjZmE2NWNjNDAzZTgyODZjZjM5Y2NkMWU2NmJjY2EwNjU0N2NlNzM3N2M3YWViMmRmN2UzNGQ3YTIyMzI1NWJiMzU5NzljMDVlNjg2MTQzMGE4Y2VmNDZmMTU4YTYxNmI5ZjE2YTcwYzc0MTRhNmNmMWE2NWE5ZTE1YWM1ODBmODk1MWNiOWNhMzBlMDNhMjQzZmZjZWY4YjQzOWUzOGM5NmU0MGQyMTc5YjY5YThhNGQ3ZTQxMjZlMzA1MGZlNWIxZDI4Mzc0YjU3MmRiODBiMjFiMWY4NGYwNDBjYTE3NTRhN2FjMDk5Y2ZmZGI5MDM3NjIxYTE0ODAzNGIyOTU4NjA4ZDM4MzNlOGIwNDE4MWQ4NGUyMWU0OTNmZjYzNzNjMGQ4Y2M0ODVkYzM4NjZlYjZlOWZiYzVjZGFmMDExNWNiYWNiODA4Y2ZkYjczODlmZmJlZDliNmQzMDdiYTczY2EyOTVlOWNhM2RhZmNlNDk1YTZiNWI4NzFhYzdlN2U2ZTJmZWFlOGU3YTllOTFhYTE4ZGY4MzVkNWI2YjFkOGFkY2NhYWM0YjMwOTU3NzUxMmZkYWVlMmVhOWJlMTkwMWUxOTUzMzFmN2UyZjU5NmFkOGRiN2Q1ZDJmYzI2MDA5NjE4YmNhNzc="
|
||||
decrypt, err := SM2Decrypt(en, SELF_PUB, SELF_PRI)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
Loading…
Reference in New Issue