107 lines
2.2 KiB
Go
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[:])
|
|
}
|