2026-04-28 18:05:13 +08:00

85 lines
1.7 KiB
Go

package gameopen
import (
"crypto/md5"
"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 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[:])
}