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