diff --git a/src/HttpServer/logic/constdef.go b/src/HttpServer/logic/constdef.go index 7b63028..68807aa 100644 --- a/src/HttpServer/logic/constdef.go +++ b/src/HttpServer/logic/constdef.go @@ -7,6 +7,7 @@ const ( const ( ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver" GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token" + GETTOUTIAOOPENIDURL = "https://developer.toutiao.com/api/apps/jscode2session" GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search" TOUTIAOAPPID = "tt29e35f5eb6c9b9dd" TOUTIAOSECRET = "100cb2286445027f606844fc156121dd7db06075" diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index b715368..900f673 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -22,6 +22,13 @@ type GetAccessTokenResp struct { Errmsg string `json:"errmsg"` } +type GetOpenidResp struct { + Session_key string `json:"session_key"` + Openid string `json:"openid"` + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` +} + //-------------------------------------------------------------------------- type GetcurpropertyReq struct { @@ -126,18 +133,53 @@ type DosignResp struct { RetData DosignData `json:"retData"` } +type GetopenidReq struct { + Code string `json:"code"` +} + +type GetopenidData struct { + Openid string `json:"openid"` +} + +type GetopenidResp struct { + ErrNum int `json:"errNum"` + RetMsg string `json:"retMsg"` + RetData GetopenidData `json:"retData"` +} + +type UserloginReq struct { + Openid string `json:"openid"` + IsVisiter int `json:"isVisiter"` + VisitorId int `json:"visitorId"` +} + +type UserloginData struct { + IsNew int `json:"isNew"` + RegisterTime int `json:"registerTime"` + Id string `json:"id"` + PlayerData string `json:"playerData"` +} + +type UserloginResp struct { + ErrNum int `json:"errNum"` + RetMsg string `json:"retMsg"` + RetData UserloginData `json:"retData"` +} + //------------------------------------------------------------------------------------------------------ type UserData struct { Openid string - LastGetTime int //上一次请求物资时间戳,如果超过三次时间间隔则不计算收益 - LeftCnt int //当天剩余领取宝箱次数 - MaxLevel int //当前最高枪等级 - Property int64 //当前物资 - TotalFetchCnt int //累计领取次数 - SignRound int //签到轮数 - SingDay int //签到天数 - IsSign int //当天是否已经签到 - TodaySec int //当天零点时间戳,用于判断跨天 - PassLvGold int //当天过关获得的金币 + LastGetTime int //上一次请求物资时间戳,如果超过三次时间间隔则不计算收益 + LeftCnt int //当天剩余领取宝箱次数 + MaxLevel int //当前最高枪等级 + Property int64 //当前物资 + TotalFetchCnt int //累计领取次数 + SignRound int //签到轮数 + SingDay int //签到天数 + IsSign int //当天是否已经签到 + TodaySec int //当天零点时间戳,用于判断跨天 + PassLvGold int //当天过关获得的金币 + PlayerData string //玩家数据 + RegTime int //注册时间 } diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index e9d18c3..9209fc5 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -41,11 +41,17 @@ func GetUserInfo(openid string) (*UserData, error) { return nil, err } + //返回 + //if !isexist { + // return nil,errors.New("new user!") + //} + tmp := new(UserData) if !isexist { //不存在 //属于新登录的玩家数据 - err = tmp.InitUserInfo(openid) + //err = tmp.InitUserInfo(openid) + return nil, errors.New("new user!") } else { //已经登陆过了 需要获取玩家数据 data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, openid) @@ -75,6 +81,8 @@ func (u *UserData) InitUserInfo(openid string) error { u.PassLvGold = 0 u.TodaySec = int(time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()).Unix()) u.TotalFetchCnt = 0 //用于计算当前领取次数 + u.PlayerData = "" + u.RegTime = int(time.Now().Unix()) err := SaveUserInfo(u) if err != nil { @@ -146,6 +154,31 @@ func (u *UserData) CalcProperty() { } } +func GetOpenid(code string) (string, error) { + url := GETTOUTIAOOPENIDURL + "?appid=" + TOUTIAOAPPID + "&secret=" + TOUTIAOSECRET + "&code=" + code + res, err := http.Get(url) + if err != nil { + logger.Error("GetOpenid err=%v", err) + return "", err + } + result, _ := ioutil.ReadAll(res.Body) + defer res.Body.Close() + + var tmp GetOpenidResp + err = json.Unmarshal(result, &tmp) + if err != nil { + logger.Error("GetOpenid err=%v", err) + return "", err + } + + if tmp.Errmsg != "" { + logger.Error("GetOpenid err=%v", tmp.Errmsg) + return "", errors.New(tmp.Errmsg) + } + + return tmp.Openid, nil +} + func GetAccessToken() (string, error) { //首先从缓存取 var token string diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index 20e3f17..1706468 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -49,11 +49,33 @@ func startServerHttpServe() { http.HandleFunc("/daycs/addgold", Addgold) //增加金币接口(过关加金币用) http.HandleFunc("/daycs/quersigndata", Quersigndata) //获取签到数据 http.HandleFunc("/daycs/dosign", Dosign) //签到 + http.HandleFunc("/daycs/getopenid", Getopenid) //获取openid + http.HandleFunc("/daycs/userlogin", Userlogin) //登录 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func Userlogin(w http.ResponseWriter, r *http.Request) { + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Userlogin , body:%v", s) + + HandlerUserlogin(w, s) +} + +func Getopenid(w http.ResponseWriter, r *http.Request) { + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Getopenid , body:%v", s) + + HandlerGetopenid(w, s) +} + func Dosign(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) r.Body.Close() diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 17ff8bd..8119372 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -2,12 +2,106 @@ package logic import ( "HttpServer/jsonconf" + "HttpServer/redishandler" "common/logger" + "common/redis" "encoding/json" "fmt" "net/http" ) +func HandlerUserlogin(w http.ResponseWriter, data string) { + SetHeader(w) + var resp UserloginResp + resp.ErrNum = 0 + resp.RetMsg = "success" + var rdata UserloginReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) + resp.RetMsg = "json解析失败" + resp.ErrNum = ERROR_UNMASH_JSONFAILED + break + } + + //先判断是否存在 + isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, rdata.Openid) + if err != nil { + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) + resp.RetMsg = "json解析失败" + resp.ErrNum = ERROR_UNMASH_JSONFAILED + break + } + if !isexist { + //不存在 新号 + tmp := new(UserData) + err = tmp.InitUserInfo(rdata.Openid) + if err != nil { + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) + resp.RetMsg = "服务器读取数据失败" + resp.ErrNum = ERROR_SERVER_FAILED + break + } + + resp.RetData.IsNew = 1 + resp.RetData.PlayerData = tmp.PlayerData + resp.RetData.Id = rdata.Openid + resp.RetData.RegisterTime = tmp.RegTime + break + } + uinfo, err := GetUserInfo(rdata.Openid) + if err != nil { + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) + resp.RetMsg = "服务器读取数据失败" + resp.ErrNum = ERROR_SERVER_FAILED + break + } + + resp.RetData.RegisterTime = uinfo.RegTime + resp.RetData.IsNew = 0 + resp.RetData.Id = rdata.Openid + resp.RetData.PlayerData = uinfo.PlayerData + + break + } + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerGetopenid(w http.ResponseWriter, data string) { + SetHeader(w) + var resp GetopenidResp + resp.ErrNum = 0 + resp.RetMsg = "success" + var rdata GetopenidReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) + resp.RetMsg = "json解析失败" + resp.ErrNum = ERROR_UNMASH_JSONFAILED + break + } + + openid, err := GetOpenid(rdata.Code) + if err != nil { + logger.Info(" HandlerGetopenid AddCoinToTouTiao failed:%v,for:%v", err, data) + resp.RetMsg = "调用头条接口失败" + resp.ErrNum = ERROR_TOUTIAOAPI_FAILED + break + } + + resp.RetData.Openid = openid + + break + } + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandlerDosign(w http.ResponseWriter, data string) { SetHeader(w) var resp DosignResp -- libgit2 0.21.0