sdk.go 3.52 KB
package sdk

import (
	"apigame/util/util-lx/lxalilog"
	"apigame/util/util-lx/lxbeego"
	"apigame/util/util-lx/lxredis"
	"encoding/json"
	"errors"
	"fmt"
	"strings"

	"github.com/astaxie/beego"
)

type MapSdkTokenRet struct {
	Code string `json:"code"`
	Data struct {
		Ttl int `json:"ttl"`
	} `json:"data"`
	Msg string `json:"msg"`
}

type MapSDKMemberInfo struct {
	Code string `json:"code"`
	Data struct {
		Uid           int64  `json:"uid"`
		Channel       string `json:"channel"`
		Scene         string `json:"scene"`
		Openid        string `json:"openid"`
		Unionid       string `json:"unionid"`
		Nickname      string `json:"nickname"`
		Headurl       string `json:"headurl"`
		Sex           int    `json:"sex"`
		Shareuid      int64  `json:"shareuid"`
		Status        int    `json:"status"`
		FirstLogin    string `json:"first_login"`
		Logindays     int    `json:"logindays"`
		CreateTime    int64  `json:"create_time"`
		LastloginTime int64  `json:"lastlogin_time"`
		UpdateTime    int64  `json:"update_time"`
	} `json:"data"`
	Msg string `json:"msg"`
}

func ckecklocaldb(gameid string, uid int64, token string) (err error) {

	_redis := lxredis.LXredis{
		Name:   fmt.Sprintf("token::%s::%d", gameid, uid),
		Db:     beego.AppConfig.String("redis::sdkdb"),
		Prefix: beego.AppConfig.String("redis::sdkprefix"),
	}

	tstr, err := _redis.GET()
	if err != nil {
		lxalilog.Errors(err, "_redis GET:")
		return
	}

	if tstr == "" {
		err = errors.New("tsrt")
		lxalilog.Errors(err, "tstr empty:")
		return
	}

	redistoken := strings.Split(tstr, "|")[0]
	if redistoken != token {
		err = errors.New("token error")
		lxalilog.Errors(err, "redistoken:", redistoken, ",token:", token)
		return
	}

	return
}

// 验证SDKtoken
func CheckSdkToken(gameid string, uid int64, token string) (err error) {

	if uid == 99 || token == "fb0ba80fad895664c7aea7c8ce462505" {
		return
	}

	return ckecklocaldb(gameid, uid, token)

	// var (
	// 	gconfig = service_config.GetGameConfigByGameID(gameid)
	// 	apiurl  = beego.AppConfig.String("sdk::checktoken") + gconfig.Appkey
	// )

	// content, httpcode, err := lurl.PostBody(apiurl, map[string]interface{}{
	// 	"gameid": gameid,
	// 	"uid":    uid,
	// 	"token":  token,
	// })

	// if err != nil {
	// 	lxalilog.Errors("lurl.PostBody error:", err, gameid, uid, token)
	// 	return
	// }

	// if httpcode != 200 {
	// 	err = errors.New("httpcode!= 200")
	// 	lxalilog.Errors("httpcode error:", err, gameid, uid, token, httpcode)
	// 	return
	// }

	// var ret MapSdkTokenRet
	// err = json.Unmarshal(content, &ret)
	// if err != nil {
	// 	lxalilog.Errors("json.Unmarshal error:", err, gameid, uid, token, string(content))
	// 	return
	// }

	// if ret.Code != "0" {
	// 	err = errors.New("ret.Code != 0")
	// 	lxalilog.Errors(err, gameid, uid, token, string(content))
	// 	return
	// }

	// return
}

// 获取SDK用户信息
func GetSdkMemberInfo(gameid string, uid int64) (member MapSDKMemberInfo, err error) {

	var (
		apiurl = fmt.Sprintf("%s?gameid=%s&uid=%d", beego.AppConfig.String("sdk::getmemberinfo"), gameid, uid)
	)

	content, httpcode, err := lxbeego.Get(apiurl)

	if err != nil {
		lxalilog.Errors("lxbeego.lxbeego error:", err, apiurl)
		return
	}

	if httpcode != 200 {
		err = errors.New("httpcode!= 200")
		lxalilog.Errors("httpcode error:", err, apiurl)
		return
	}

	err = json.Unmarshal(content, &member)
	if err != nil {
		lxalilog.Errors("json.Unmarshal error:", err, apiurl, string(content))
		return
	}

	if member.Code != "0" {
		err = errors.New("ret.Code != 0")
		lxalilog.Errors(err, apiurl, string(content))
		return
	}

	return
}