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

102 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}