Commit f01627537be105281245c03aa68ca28fc61e64f1
1 parent
e5a3ae6f
Exists in
master
新增接口
Showing
5 changed files
with
203 additions
and
11 deletions
Show diff stats
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 |