tkcashgame_v4/app/eonline/internal/service/service.go

102 lines
2.4 KiB
Go
Raw Permalink Normal View History

2025-10-22 10:01:11 +00:00
package service
import (
"fmt"
"reflect"
"strconv"
"strings"
"time"
"sandc/pkg/utils"
"github.com/google/wire"
"github.com/shopspring/decimal"
)
// ProviderSet is service providers.
var ProviderSet = wire.NewSet(NewEonlineService)
// 定义加密key Secretkey
const Secretkey = "eonline~#*^%$@!~0702"
// validateSignRequest 验证参数请求
// Ts, Sign 参数必备
// signFixedParameters 签名固定参数
func (c *EonlineService) validateSignRequest(in any, signFixedParameters []string) error {
var (
// ts int64
sign string
// err error
)
defer func() {
if err := recover(); err != nil {
fmt.Println("validateRequest panic: ", err)
}
}()
v := reflect.ValueOf(in)
// 获取签名
if signValue, ok := v.FieldByName("Sign").Interface().(string); ok {
sign = signValue
}
if sign == "" {
return fmt.Errorf("Sign不能为空")
}
// // 获取时间戳ts 字符串转换为int64
// if tsValue, ok := v.FieldByName("Ts").Interface().(string); ok {
// ts, err = strconv.ParseInt(tsValue, 10, 64)
// if err != nil {
// return fmt.Errorf("Ts转换失败")
// }
// }
// if ts == 0 {
// return fmt.Errorf("Ts不能为空")
// }
//
// currentTime := time.Now().Unix()
// // 比较时间戳是否超过60秒 QA环境不判断次时间
// if currentTime-ts > 60 || currentTime-ts < -60 {
// fmt.Println("ts invalid: ", ts, currentTime, currentTime-ts)
// if c.conf.Server.Env != "qa" {
// return fmt.Errorf("ts invalid")
// }
// }
secretStr := Secretkey
for _, sfp := range signFixedParameters {
fieldName := strings.ToLower(sfp)
tmpValue := ""
switch vtype := v.FieldByName(sfp).Interface().(type) {
case string:
tmpValue = vtype
case float32:
tmpValue = decimal.NewFromFloat32(vtype).String()
case float64:
tmpValue = decimal.NewFromFloat(vtype).String()
case int64:
tmpValue = decimal.NewFromInt(vtype).String()
case bool:
tmpValue = strconv.FormatBool(vtype)
case int32:
tmpValue = decimal.NewFromInt32(vtype).String()
default:
return fmt.Errorf("参数错误: %s", sfp)
}
secretStr += fmt.Sprintf("%s=%s", fieldName, tmpValue)
}
secretSignStr := utils.MD5Hex([]byte(secretStr))
if secretSignStr != sign {
fmt.Println("---------签名错误---------", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("加密前: ", secretStr)
fmt.Println("加密后: ", secretSignStr)
fmt.Println("sign: ", sign)
return fmt.Errorf("签名错误")
}
return nil
}