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 | 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 | ... | ... |