2026-05-12 15:33:32 +08:00

107 lines
2.2 KiB
Go

package gameopen
import (
"crypto/md5"
"encoding/base64"
"encoding/hex"
"fmt"
"net/url"
"strings"
)
func buildQueryUserSign(req QueryUserRequest, key string) string {
return md5Hex(req.GameID + req.UID + req.Token + req.RoomID + key)
}
func buildUpdateCoinSign(req UpdateCoinRequest, key string) string {
return md5Hex(
req.OrderID +
req.GameID +
req.RoundID +
req.UID +
fmt.Sprintf("%d", req.Coin) +
fmt.Sprintf("%d", req.Type) +
fmt.Sprintf("%d", req.RewardType) +
req.Token +
req.WinID +
req.RoomID +
key,
)
}
func buildSupplementSign(req SupplementRequest, key string) string {
return md5Hex(
req.OrderID +
req.GameID +
req.RoundID +
req.UID +
fmt.Sprintf("%d", req.Coin) +
fmt.Sprintf("%d", req.RewardType) +
req.WinID +
req.RoomID +
key,
)
}
func verifySign(actual, expected string) bool {
return strings.EqualFold(strings.TrimSpace(actual), strings.TrimSpace(expected))
}
func normalizeCallbackToken(token string) string {
token = strings.TrimSpace(token)
if token == "" {
return ""
}
if decoded, err := url.QueryUnescape(token); err == nil {
token = strings.TrimSpace(decoded)
}
if strings.HasPrefix(strings.ToLower(token), "bearer ") {
token = strings.TrimSpace(token[len("bearer "):])
}
parts := strings.SplitN(token, ".", 2)
if len(parts) != 2 || parts[1] == "" {
return token
}
switch len(parts[1]) % 4 {
case 2:
parts[1] += "=="
case 3:
parts[1] += "="
}
return parts[0] + "." + parts[1]
}
func callbackTokenSysOrigin(token string) string {
token = normalizeCallbackToken(token)
parts := strings.SplitN(token, ".", 2)
if len(parts) != 2 || strings.TrimSpace(parts[1]) == "" {
return ""
}
decoded, err := base64.StdEncoding.DecodeString(parts[1])
if err != nil {
return ""
}
payload := strings.TrimSpace(string(decoded))
if unescaped, err := url.QueryUnescape(payload); err == nil {
payload = strings.TrimSpace(unescaped)
}
fields := strings.Split(payload, ":")
if len(fields) < 3 {
return ""
}
return strings.ToUpper(strings.TrimSpace(fields[2]))
}
func receiptTypeFromType(typed int) string {
if typed == 2 {
return "INCOME"
}
return "EXPENDITURE"
}
func md5Hex(value string) string {
sum := md5.Sum([]byte(value))
return hex.EncodeToString(sum[:])
}