Commit f01627537be105281245c03aa68ca28fc61e64f1

Authored by 陆恒
1 parent e5a3ae6f
Exists in master

新增接口

src/HttpServer/logic/constdef.go
@@ -7,6 +7,7 @@ const ( @@ -7,6 +7,7 @@ const (
7 const ( 7 const (
8 ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver" 8 ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver"
9 GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token" 9 GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token"
  10 + GETTOUTIAOOPENIDURL = "https://developer.toutiao.com/api/apps/jscode2session"
10 GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search" 11 GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search"
11 TOUTIAOAPPID = "tt29e35f5eb6c9b9dd" 12 TOUTIAOAPPID = "tt29e35f5eb6c9b9dd"
12 TOUTIAOSECRET = "100cb2286445027f606844fc156121dd7db06075" 13 TOUTIAOSECRET = "100cb2286445027f606844fc156121dd7db06075"
src/HttpServer/logic/datadef.go
@@ -22,6 +22,13 @@ type GetAccessTokenResp struct { @@ -22,6 +22,13 @@ type GetAccessTokenResp struct {
22 Errmsg string `json:"errmsg"` 22 Errmsg string `json:"errmsg"`
23 } 23 }
24 24
  25 +type GetOpenidResp struct {
  26 + Session_key string `json:"session_key"`
  27 + Openid string `json:"openid"`
  28 + Errcode int `json:"errcode"`
  29 + Errmsg string `json:"errmsg"`
  30 +}
  31 +
25 //-------------------------------------------------------------------------- 32 //--------------------------------------------------------------------------
26 33
27 type GetcurpropertyReq struct { 34 type GetcurpropertyReq struct {
@@ -126,18 +133,53 @@ type DosignResp struct { @@ -126,18 +133,53 @@ type DosignResp struct {
126 RetData DosignData `json:"retData"` 133 RetData DosignData `json:"retData"`
127 } 134 }
128 135
  136 +type GetopenidReq struct {
  137 + Code string `json:"code"`
  138 +}
  139 +
  140 +type GetopenidData struct {
  141 + Openid string `json:"openid"`
  142 +}
  143 +
  144 +type GetopenidResp struct {
  145 + ErrNum int `json:"errNum"`
  146 + RetMsg string `json:"retMsg"`
  147 + RetData GetopenidData `json:"retData"`
  148 +}
  149 +
  150 +type UserloginReq struct {
  151 + Openid string `json:"openid"`
  152 + IsVisiter int `json:"isVisiter"`
  153 + VisitorId int `json:"visitorId"`
  154 +}
  155 +
  156 +type UserloginData struct {
  157 + IsNew int `json:"isNew"`
  158 + RegisterTime int `json:"registerTime"`
  159 + Id string `json:"id"`
  160 + PlayerData string `json:"playerData"`
  161 +}
  162 +
  163 +type UserloginResp struct {
  164 + ErrNum int `json:"errNum"`
  165 + RetMsg string `json:"retMsg"`
  166 + RetData UserloginData `json:"retData"`
  167 +}
  168 +
129 //------------------------------------------------------------------------------------------------------ 169 //------------------------------------------------------------------------------------------------------
130 170
131 type UserData struct { 171 type UserData struct {
132 Openid string 172 Openid string
133 - LastGetTime int //上一次请求物资时间戳,如果超过三次时间间隔则不计算收益  
134 - LeftCnt int //当天剩余领取宝箱次数  
135 - MaxLevel int //当前最高枪等级  
136 - Property int64 //当前物资  
137 - TotalFetchCnt int //累计领取次数  
138 - SignRound int //签到轮数  
139 - SingDay int //签到天数  
140 - IsSign int //当天是否已经签到  
141 - TodaySec int //当天零点时间戳,用于判断跨天  
142 - PassLvGold int //当天过关获得的金币 173 + LastGetTime int //上一次请求物资时间戳,如果超过三次时间间隔则不计算收益
  174 + LeftCnt int //当天剩余领取宝箱次数
  175 + MaxLevel int //当前最高枪等级
  176 + Property int64 //当前物资
  177 + TotalFetchCnt int //累计领取次数
  178 + SignRound int //签到轮数
  179 + SingDay int //签到天数
  180 + IsSign int //当天是否已经签到
  181 + TodaySec int //当天零点时间戳,用于判断跨天
  182 + PassLvGold int //当天过关获得的金币
  183 + PlayerData string //玩家数据
  184 + RegTime int //注册时间
143 } 185 }
src/HttpServer/logic/function.go
@@ -41,11 +41,17 @@ func GetUserInfo(openid string) (*UserData, error) { @@ -41,11 +41,17 @@ func GetUserInfo(openid string) (*UserData, error) {
41 return nil, err 41 return nil, err
42 } 42 }
43 43
  44 + //返回
  45 + //if !isexist {
  46 + // return nil,errors.New("new user!")
  47 + //}
  48 +
44 tmp := new(UserData) 49 tmp := new(UserData)
45 if !isexist { 50 if !isexist {
46 //不存在 51 //不存在
47 //属于新登录的玩家数据 52 //属于新登录的玩家数据
48 - err = tmp.InitUserInfo(openid) 53 + //err = tmp.InitUserInfo(openid)
  54 + return nil, errors.New("new user!")
49 } else { 55 } else {
50 //已经登陆过了 需要获取玩家数据 56 //已经登陆过了 需要获取玩家数据
51 data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, openid) 57 data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, openid)
@@ -75,6 +81,8 @@ func (u *UserData) InitUserInfo(openid string) error { @@ -75,6 +81,8 @@ func (u *UserData) InitUserInfo(openid string) error {
75 u.PassLvGold = 0 81 u.PassLvGold = 0
76 u.TodaySec = int(time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()).Unix()) 82 u.TodaySec = int(time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()).Unix())
77 u.TotalFetchCnt = 0 //用于计算当前领取次数 83 u.TotalFetchCnt = 0 //用于计算当前领取次数
  84 + u.PlayerData = ""
  85 + u.RegTime = int(time.Now().Unix())
78 86
79 err := SaveUserInfo(u) 87 err := SaveUserInfo(u)
80 if err != nil { 88 if err != nil {
@@ -146,6 +154,31 @@ func (u *UserData) CalcProperty() { @@ -146,6 +154,31 @@ func (u *UserData) CalcProperty() {
146 } 154 }
147 } 155 }
148 156
  157 +func GetOpenid(code string) (string, error) {
  158 + url := GETTOUTIAOOPENIDURL + "?appid=" + TOUTIAOAPPID + "&secret=" + TOUTIAOSECRET + "&code=" + code
  159 + res, err := http.Get(url)
  160 + if err != nil {
  161 + logger.Error("GetOpenid err=%v", err)
  162 + return "", err
  163 + }
  164 + result, _ := ioutil.ReadAll(res.Body)
  165 + defer res.Body.Close()
  166 +
  167 + var tmp GetOpenidResp
  168 + err = json.Unmarshal(result, &tmp)
  169 + if err != nil {
  170 + logger.Error("GetOpenid err=%v", err)
  171 + return "", err
  172 + }
  173 +
  174 + if tmp.Errmsg != "" {
  175 + logger.Error("GetOpenid err=%v", tmp.Errmsg)
  176 + return "", errors.New(tmp.Errmsg)
  177 + }
  178 +
  179 + return tmp.Openid, nil
  180 +}
  181 +
149 func GetAccessToken() (string, error) { 182 func GetAccessToken() (string, error) {
150 //首先从缓存取 183 //首先从缓存取
151 var token string 184 var token string
src/HttpServer/logic/httpserver.go
@@ -49,11 +49,33 @@ func startServerHttpServe() { @@ -49,11 +49,33 @@ func startServerHttpServe() {
49 http.HandleFunc("/daycs/addgold", Addgold) //增加金币接口(过关加金币用) 49 http.HandleFunc("/daycs/addgold", Addgold) //增加金币接口(过关加金币用)
50 http.HandleFunc("/daycs/quersigndata", Quersigndata) //获取签到数据 50 http.HandleFunc("/daycs/quersigndata", Quersigndata) //获取签到数据
51 http.HandleFunc("/daycs/dosign", Dosign) //签到 51 http.HandleFunc("/daycs/dosign", Dosign) //签到
  52 + http.HandleFunc("/daycs/getopenid", Getopenid) //获取openid
  53 + http.HandleFunc("/daycs/userlogin", Userlogin) //登录
52 54
53 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) 55 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
54 CheckErr(err) 56 CheckErr(err)
55 } 57 }
56 58
  59 +func Userlogin(w http.ResponseWriter, r *http.Request) {
  60 + result, _ := ioutil.ReadAll(r.Body)
  61 + r.Body.Close()
  62 +
  63 + s := string(result)
  64 + logger.Info("Userlogin , body:%v", s)
  65 +
  66 + HandlerUserlogin(w, s)
  67 +}
  68 +
  69 +func Getopenid(w http.ResponseWriter, r *http.Request) {
  70 + result, _ := ioutil.ReadAll(r.Body)
  71 + r.Body.Close()
  72 +
  73 + s := string(result)
  74 + logger.Info("Getopenid , body:%v", s)
  75 +
  76 + HandlerGetopenid(w, s)
  77 +}
  78 +
57 func Dosign(w http.ResponseWriter, r *http.Request) { 79 func Dosign(w http.ResponseWriter, r *http.Request) {
58 result, _ := ioutil.ReadAll(r.Body) 80 result, _ := ioutil.ReadAll(r.Body)
59 r.Body.Close() 81 r.Body.Close()
src/HttpServer/logic/logic.go
@@ -2,12 +2,106 @@ package logic @@ -2,12 +2,106 @@ package logic
2 2
3 import ( 3 import (
4 "HttpServer/jsonconf" 4 "HttpServer/jsonconf"
  5 + "HttpServer/redishandler"
5 "common/logger" 6 "common/logger"
  7 + "common/redis"
6 "encoding/json" 8 "encoding/json"
7 "fmt" 9 "fmt"
8 "net/http" 10 "net/http"
9 ) 11 )
10 12
  13 +func HandlerUserlogin(w http.ResponseWriter, data string) {
  14 + SetHeader(w)
  15 + var resp UserloginResp
  16 + resp.ErrNum = 0
  17 + resp.RetMsg = "success"
  18 + var rdata UserloginReq
  19 + err := json.Unmarshal([]byte(data), &rdata)
  20 + for {
  21 + if err != nil {
  22 + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data)
  23 + resp.RetMsg = "json解析失败"
  24 + resp.ErrNum = ERROR_UNMASH_JSONFAILED
  25 + break
  26 + }
  27 +
  28 + //先判断是否存在
  29 + isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, rdata.Openid)
  30 + if err != nil {
  31 + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data)
  32 + resp.RetMsg = "json解析失败"
  33 + resp.ErrNum = ERROR_UNMASH_JSONFAILED
  34 + break
  35 + }
  36 + if !isexist {
  37 + //不存在 新号
  38 + tmp := new(UserData)
  39 + err = tmp.InitUserInfo(rdata.Openid)
  40 + if err != nil {
  41 + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data)
  42 + resp.RetMsg = "服务器读取数据失败"
  43 + resp.ErrNum = ERROR_SERVER_FAILED
  44 + break
  45 + }
  46 +
  47 + resp.RetData.IsNew = 1
  48 + resp.RetData.PlayerData = tmp.PlayerData
  49 + resp.RetData.Id = rdata.Openid
  50 + resp.RetData.RegisterTime = tmp.RegTime
  51 + break
  52 + }
  53 + uinfo, err := GetUserInfo(rdata.Openid)
  54 + if err != nil {
  55 + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data)
  56 + resp.RetMsg = "服务器读取数据失败"
  57 + resp.ErrNum = ERROR_SERVER_FAILED
  58 + break
  59 + }
  60 +
  61 + resp.RetData.RegisterTime = uinfo.RegTime
  62 + resp.RetData.IsNew = 0
  63 + resp.RetData.Id = rdata.Openid
  64 + resp.RetData.PlayerData = uinfo.PlayerData
  65 +
  66 + break
  67 + }
  68 + //回包
  69 + respstr, _ := json.Marshal(&resp)
  70 + fmt.Fprint(w, string(respstr))
  71 +}
  72 +
  73 +func HandlerGetopenid(w http.ResponseWriter, data string) {
  74 + SetHeader(w)
  75 + var resp GetopenidResp
  76 + resp.ErrNum = 0
  77 + resp.RetMsg = "success"
  78 + var rdata GetopenidReq
  79 + err := json.Unmarshal([]byte(data), &rdata)
  80 + for {
  81 + if err != nil {
  82 + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data)
  83 + resp.RetMsg = "json解析失败"
  84 + resp.ErrNum = ERROR_UNMASH_JSONFAILED
  85 + break
  86 + }
  87 +
  88 + openid, err := GetOpenid(rdata.Code)
  89 + if err != nil {
  90 + logger.Info(" HandlerGetopenid AddCoinToTouTiao failed:%v,for:%v", err, data)
  91 + resp.RetMsg = "调用头条接口失败"
  92 + resp.ErrNum = ERROR_TOUTIAOAPI_FAILED
  93 + break
  94 + }
  95 +
  96 + resp.RetData.Openid = openid
  97 +
  98 + break
  99 + }
  100 + //回包
  101 + respstr, _ := json.Marshal(&resp)
  102 + fmt.Fprint(w, string(respstr))
  103 +}
  104 +
11 func HandlerDosign(w http.ResponseWriter, data string) { 105 func HandlerDosign(w http.ResponseWriter, data string) {
12 SetHeader(w) 106 SetHeader(w)
13 var resp DosignResp 107 var resp DosignResp