Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

131 lines
4.4 KiB
Go

package game
import (
"91porn-server/app/appg"
"91porn-server/common/httputil"
"91porn-server/common/log"
"91porn-server/web/webg"
"crypto/md5"
"encoding/base64"
"encoding/hex"
"errors"
"fmt"
"net/http"
)
const (
GainGameCodeUrl = "/api/jt/product/getscode"
QueryGameCodeUrl = "/api/jt/product/getsclist"
)
type GameCodeReq struct {
Level int `json:"level" bson:"level"` // 商品等级
Sign string `json:"sign" bson:"sign"` // md5加密
}
type GameCodeResp struct {
Code int `json:"code" bson:"code"` // code编码
Data Data `json:"data" bson:"data"` // 游戏码响应内容
Msg string `json:"msg" bson:"msg"` // 返回内容
Hash bool `json:"hash" bson:"hash"` // hash
Time string `json:"time" bson:"time"` // 时间
Tip string `json:"tip" bson:"tip"` // 提示内容
}
type Data struct {
Code int `json:"code" bson:"code"` // code编码
Msg string `json:"msg" bson:"msg"` // 返回内容
SubscriptionCode string `json:"subscriptionCode" bson:"subscriptionCode"` // 订单订阅码(无用)
SerialCode string `json:"serialCode" bson:"serialCode"` // 序列号 (玩家游戏使用)
}
type QueryGameCodeReq struct {
PageNum int `json:"pageNum" bson:"pageNum"` // 当前页
PageSize int `json:"pageSize" bson:"pageSize"` // 页码
}
type QueryGameCodeResp struct {
Code int `json:"code" bson:"code"` // code编码
Data QueryData `json:"data" bson:"data"` // 游戏码响应内容
Msg string `json:"msg" bson:"msg"` // 返回内容
Hash bool `json:"hash" bson:"hash"` // hash
Time string `json:"time" bson:"time"` // 时间
Tip string `json:"tip" bson:"tip"` // 提示内容
}
type QueryData struct {
Total int `json:"total" bson:"total"` // 总数
List []Detail `json:"list" bson:"list"` // 返回内容
}
type Detail struct {
SubscriptionCode string `json:"subscriptionCode" bson:"subscriptionCode"` // 订单订阅码(无用)
SerialCode string `json:"serialCode" bson:"serialCode"` // 序列号 (玩家游戏使用)
UserId string `json:"userId" bson:"userId"` // 用户ID
MerchantId int `json:"merchantId" bson:"merchantId"` // 商户号
ProductPrice int `json:"productPrice" bson:"productPrice"` // 商品价格
ProductLevel int `json:"productLevel" bson:"productLevel"` // 商品等级
CreatedAt string `json:"createdAt" bson:"createdAt"` // 创建时间
}
func GainTripartiteGameCode(uid uint64) (string, error) {
var gameCode string
userId := fmt.Sprintf("LLD_%v", uid)
sprintf := fmt.Sprintf("userid=%v&merchantid=%v", userId, appg.Conf.Game.MercId)
reqHeader := base64.StdEncoding.EncodeToString([]byte(sprintf))
md5Str := fmt.Sprintf("level=%d&userid=%v&merchantid=%d", 1, userId, appg.Conf.Game.MercId)
hash := md5.Sum([]byte(md5Str))
// 将 MD5 转换为十六进制字符串
md5String := hex.EncodeToString(hash[:])
var (
url = appg.Conf.Game.URL + GainGameCodeUrl
params = GameCodeReq{Level: 1, Sign: md5String}
out GameCodeResp
)
h := map[string]string{"m-api-key": reqHeader}
code, err := httputil.DefaultClientPostJsonWithResp(&out, url, h, params)
if err != nil {
log.Error(fmt.Sprintf("GainTripartiteGameCode http request err:[%v],uid:[%v],url:[%v],params:[%v]", err, uid, url, params))
return gameCode, err
}
if code != http.StatusOK {
return gameCode, errors.New("status code is err")
}
if out.Data.Code == http.StatusOK {
gameCode = out.Data.SerialCode
}
return gameCode, nil
}
func QueryTripartiteGameCode(uid uint64) (*QueryData, error) {
userId := fmt.Sprintf("LLD_%v", uid)
sprintf := fmt.Sprintf("userid=%v&merchantid=%v", userId, webg.Conf.Game.MercId)
reqHeader := base64.StdEncoding.EncodeToString([]byte(sprintf))
var (
url = webg.Conf.Game.URL + QueryGameCodeUrl
params = QueryGameCodeReq{PageNum: 1, PageSize: 10}
out QueryGameCodeResp
)
h := map[string]string{"m-api-key": reqHeader}
code, err := httputil.DefaultClientPostJsonWithResp(&out, url, h, params)
if err != nil {
log.Error(fmt.Sprintf("QueryTripartiteGameCode http request err:[%v],uid:[%v],url:[%v],params:[%v]", err, uid, url, params))
return nil, err
}
if code != http.StatusOK {
return nil, errors.New("status code is err")
}
if out.Code == http.StatusOK {
return &out.Data, nil
}
return nil, nil
}