Commit f01627537be105281245c03aa68ca28fc61e64f1

Authored by 陆恒
1 parent e5a3ae6f
Exists in master

新增接口

src/HttpServer/logic/constdef.go
... ... @@ -7,6 +7,7 @@ const (
7 7 const (
8 8 ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver"
9 9 GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token"
  10 + GETTOUTIAOOPENIDURL = "https://developer.toutiao.com/api/apps/jscode2session"
10 11 GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search"
11 12 TOUTIAOAPPID = "tt29e35f5eb6c9b9dd"
12 13 TOUTIAOSECRET = "100cb2286445027f606844fc156121dd7db06075"
... ...
src/HttpServer/logic/datadef.go
... ... @@ -22,6 +22,13 @@ type GetAccessTokenResp struct {
22 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 34 type GetcurpropertyReq struct {
... ... @@ -126,18 +133,53 @@ type DosignResp struct {
126 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 171 type UserData struct {
132 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 41 return nil, err
42 42 }
43 43  
  44 + //返回
  45 + //if !isexist {
  46 + // return nil,errors.New("new user!")
  47 + //}
  48 +
44 49 tmp := new(UserData)
45 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 55 } else {
50 56 //已经登陆过了 需要获取玩家数据
51 57 data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, openid)
... ... @@ -75,6 +81,8 @@ func (u *UserData) InitUserInfo(openid string) error {
75 81 u.PassLvGold = 0
76 82 u.TodaySec = int(time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()).Unix())
77 83 u.TotalFetchCnt = 0 //用于计算当前领取次数
  84 + u.PlayerData = ""
  85 + u.RegTime = int(time.Now().Unix())
78 86  
79 87 err := SaveUserInfo(u)
80 88 if err != nil {
... ... @@ -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 182 func GetAccessToken() (string, error) {
150 183 //首先从缓存取
151 184 var token string
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -49,11 +49,33 @@ func startServerHttpServe() {
49 49 http.HandleFunc("/daycs/addgold", Addgold) //增加金币接口(过关加金币用)
50 50 http.HandleFunc("/daycs/quersigndata", Quersigndata) //获取签到数据
51 51 http.HandleFunc("/daycs/dosign", Dosign) //签到
  52 + http.HandleFunc("/daycs/getopenid", Getopenid) //获取openid
  53 + http.HandleFunc("/daycs/userlogin", Userlogin) //登录
52 54  
53 55 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
54 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 79 func Dosign(w http.ResponseWriter, r *http.Request) {
58 80 result, _ := ioutil.ReadAll(r.Body)
59 81 r.Body.Close()
... ...
src/HttpServer/logic/logic.go
... ... @@ -2,12 +2,106 @@ package logic
2 2  
3 3 import (
4 4 "HttpServer/jsonconf"
  5 + "HttpServer/redishandler"
5 6 "common/logger"
  7 + "common/redis"
6 8 "encoding/json"
7 9 "fmt"
8 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 105 func HandlerDosign(w http.ResponseWriter, data string) {
12 106 SetHeader(w)
13 107 var resp DosignResp
... ...