Commit 900acc73acc49abff83f492fcaa59b5961fb4f86
1 parent
425e2c97
Exists in
master
新增签名等功能
Showing
6 changed files
with
110 additions
and
5 deletions
Show diff stats
@@ -0,0 +1,78 @@ | @@ -0,0 +1,78 @@ | ||
1 | +package logic | ||
2 | + | ||
3 | +//2021-04-14添加 | ||
4 | +//https://bytedance.feishu.cn/docs/doccnkUkS6ivKQgbeGPxjN3mgNc# | ||
5 | + | ||
6 | +import ( | ||
7 | + "HttpServer/redishandler" | ||
8 | + "common/logger" | ||
9 | + "common/redis" | ||
10 | + "crypto/hmac" | ||
11 | + "crypto/sha256" | ||
12 | + "encoding/hex" | ||
13 | + "encoding/json" | ||
14 | + "errors" | ||
15 | + "io/ioutil" | ||
16 | + "net/http" | ||
17 | +) | ||
18 | + | ||
19 | +// 计算签名算法 | ||
20 | +func CreateCommonBytedanceSign(post_body []byte, openid string) string { | ||
21 | + sessionkey := GetBytedanceSessionKey(openid) | ||
22 | + if sessionkey != "" { | ||
23 | + return CreateBytedanceSign(sessionkey, post_body) | ||
24 | + } | ||
25 | + return "" | ||
26 | +} | ||
27 | + | ||
28 | +// 计算签名算法 | ||
29 | +func CreateBytedanceSign(session_key string, post_body []byte) string { | ||
30 | + h := hmac.New(sha256.New, []byte(session_key)) | ||
31 | + h.Write(post_body) | ||
32 | + hashcode2 := hex.EncodeToString(h.Sum(nil)) | ||
33 | + return hashcode2 | ||
34 | +} | ||
35 | + | ||
36 | +// 保存sessionkey | ||
37 | +func SetBytedanceSessionKey(openid, sessionkey string) { | ||
38 | + rediskey := redis.USER_SESSION_KEY + "_" + openid | ||
39 | + expire := 86400 * 30 | ||
40 | + redishandler.GetRedisClient().SetExString(rediskey, sessionkey, expire) | ||
41 | +} | ||
42 | + | ||
43 | +// 获取sessionkey | ||
44 | +func GetBytedanceSessionKey(openid string) string { | ||
45 | + rediskey := redis.USER_SESSION_KEY + "_" + openid | ||
46 | + val, _ := redishandler.GetRedisClient().GetString(rediskey) | ||
47 | + return val | ||
48 | +} | ||
49 | + | ||
50 | +//获取global_id | ||
51 | +func GetBytedanceGlobalID(access_token, openid string) (globalid int, err error) { | ||
52 | + url := GETGLOBALIDURL + "?access_token=" + access_token + "&open_id=" + openid | ||
53 | + res, err := http.Get(url) | ||
54 | + if err != nil { | ||
55 | + logger.Error("GetBytedanceGlobalID err=%v", err) | ||
56 | + return | ||
57 | + } | ||
58 | + | ||
59 | + result, _ := ioutil.ReadAll(res.Body) | ||
60 | + defer res.Body.Close() | ||
61 | + | ||
62 | + var tmp GetGlobalIDResp | ||
63 | + err = json.Unmarshal(result, &tmp) | ||
64 | + if err != nil { | ||
65 | + logger.Error("GetBytedanceGlobalID err=%v", err) | ||
66 | + return | ||
67 | + } | ||
68 | + | ||
69 | + if tmp.Errcode != 0 { | ||
70 | + logger.Error("GetBytedanceGlobalID err=%v", tmp.Errmsg) | ||
71 | + err = errors.New("GetBytedanceGlobalID error:tmp:" + string(result)) | ||
72 | + return | ||
73 | + } | ||
74 | + | ||
75 | + globalid = tmp.GlobalID | ||
76 | + return | ||
77 | + | ||
78 | +} |
src/HttpServer/logic/constdef.go
@@ -5,10 +5,13 @@ const ( | @@ -5,10 +5,13 @@ const ( | ||
5 | ) | 5 | ) |
6 | 6 | ||
7 | const ( | 7 | const ( |
8 | + GETGLOBALIDURL = "https://developer.toutiao.com/api/apps/gold/gen_global_id" //获取global_id | ||
8 | ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver" | 9 | ADDCOINTOTOUTIAOURL = "https://developer.toutiao.com/api/apps/gold/deliver" |
9 | GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token" | 10 | GETTOUTIAOACCESSTOKENURL = "https://developer.toutiao.com/api/apps/token" |
10 | GETTOUTIAOOPENIDURL = "https://developer.toutiao.com/api/apps/jscode2session" | 11 | GETTOUTIAOOPENIDURL = "https://developer.toutiao.com/api/apps/jscode2session" |
11 | GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search" | 12 | GETTOUTIAOCOINURL = "https://developer.toutiao.com/api/apps/gold/search" |
12 | - TOUTIAOAPPID = "tt841ff2a21b254572" //"tt29e35f5eb6c9b9dd" | ||
13 | - TOUTIAOSECRET = "14a09009e4ea999261876a4b26b09ec2ebc1e7ee" //"100cb2286445027f606844fc156121dd7db06075" | 13 | + //TOUTIAOAPPID = "tt841ff2a21b254572" //"tt29e35f5eb6c9b9dd 正式tt841ff2a21b254572" |
14 | + //TOUTIAOSECRET = "14a09009e4ea999261876a4b26b09ec2ebc1e7ee" //"100cb2286445027f606844fc156121dd7db06075 正式14a09009e4ea999261876a4b26b09ec2ebc1e7ee" | ||
15 | + TOUTIAOAPPID = "tted769bcb724e5b1201" | ||
16 | + TOUTIAOSECRET = "daa13cc0d0e27960438bb2071c950d59ab80ab14" | ||
14 | ) | 17 | ) |
src/HttpServer/logic/datadef.go
@@ -7,6 +7,7 @@ type AddcointotoutiaoReq struct { | @@ -7,6 +7,7 @@ type AddcointotoutiaoReq struct { | ||
7 | Amount int `json:"amount"` | 7 | Amount int `json:"amount"` |
8 | Description string `json:"description"` | 8 | Description string `json:"description"` |
9 | Bonus_type string `json:"bonus_type"` | 9 | Bonus_type string `json:"bonus_type"` |
10 | + GlobalID int `json:"global_id"` | ||
10 | } | 11 | } |
11 | 12 | ||
12 | type AddcointotoutiaoResp struct { | 13 | type AddcointotoutiaoResp struct { |
@@ -29,6 +30,12 @@ type GetOpenidResp struct { | @@ -29,6 +30,12 @@ type GetOpenidResp struct { | ||
29 | Errmsg string `json:"errmsg"` | 30 | Errmsg string `json:"errmsg"` |
30 | } | 31 | } |
31 | 32 | ||
33 | +type GetGlobalIDResp struct { | ||
34 | + GlobalID int `json:"global_id"` | ||
35 | + Errcode int `json:"errcode"` | ||
36 | + Errmsg string `json:"errmsg"` | ||
37 | +} | ||
38 | + | ||
32 | //-------------------------------------------------------------------------- | 39 | //-------------------------------------------------------------------------- |
33 | 40 | ||
34 | type GetcurpropertyReq struct { | 41 | type GetcurpropertyReq struct { |
src/HttpServer/logic/function.go
@@ -188,6 +188,9 @@ func GetOpenid(code string) (string, error) { | @@ -188,6 +188,9 @@ func GetOpenid(code string) (string, error) { | ||
188 | return "", errors.New(tmp.Errmsg) | 188 | return "", errors.New(tmp.Errmsg) |
189 | } | 189 | } |
190 | 190 | ||
191 | + //保存头条session key | ||
192 | + go SetBytedanceSessionKey(tmp.Openid, tmp.Session_key) | ||
193 | + | ||
191 | return tmp.Openid, nil | 194 | return tmp.Openid, nil |
192 | } | 195 | } |
193 | 196 | ||
@@ -273,6 +276,14 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | @@ -273,6 +276,14 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | ||
273 | logger.Error("AddCoinToTouTiao err=%v", err) | 276 | logger.Error("AddCoinToTouTiao err=%v", err) |
274 | return 0, 0, err | 277 | return 0, 0, err |
275 | } | 278 | } |
279 | + | ||
280 | + //获取 GlobalID | ||
281 | + globalid, err := GetBytedanceGlobalID(acctoken, openid) | ||
282 | + if err != nil { | ||
283 | + logger.Error("AddCoinToTouTiao err=%v", err) | ||
284 | + return 0, 0, err | ||
285 | + } | ||
286 | + | ||
276 | var reqdata AddcointotoutiaoReq | 287 | var reqdata AddcointotoutiaoReq |
277 | reqdata.Access_token = acctoken | 288 | reqdata.Access_token = acctoken |
278 | reqdata.Amount = amount | 289 | reqdata.Amount = amount |
@@ -280,6 +291,7 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | @@ -280,6 +291,7 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | ||
280 | reqdata.Description = descr | 291 | reqdata.Description = descr |
281 | reqdata.Device_id = deviceid | 292 | reqdata.Device_id = deviceid |
282 | reqdata.Open_id = openid | 293 | reqdata.Open_id = openid |
294 | + reqdata.GlobalID = globalid | ||
283 | logger.Info("AddCoinToTouTiao req=%v", reqdata) | 295 | logger.Info("AddCoinToTouTiao req=%v", reqdata) |
284 | bys, err := json.Marshal(&reqdata) | 296 | bys, err := json.Marshal(&reqdata) |
285 | if err != nil { | 297 | if err != nil { |
@@ -287,11 +299,17 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | @@ -287,11 +299,17 @@ func AddCoinToTouTiao(openid string, deviceid, amount int, descr string, btype s | ||
287 | return 0, 0, err | 299 | return 0, 0, err |
288 | } | 300 | } |
289 | 301 | ||
290 | - res, err := DoHttpPost(bys, ADDCOINTOTOUTIAOURL) | 302 | + //计算签名 |
303 | + signbody, _ := json.Marshal(reqdata) | ||
304 | + signature := CreateCommonBytedanceSign(signbody, openid) | ||
305 | + apiurl := ADDCOINTOTOUTIAOURL + "?signature=" + signature | ||
306 | + | ||
307 | + res, err := DoHttpPost(bys, apiurl) | ||
291 | if err != nil { | 308 | if err != nil { |
292 | logger.Error("AddCoinToTouTiao failed=%v", err) | 309 | logger.Error("AddCoinToTouTiao failed=%v", err) |
293 | return 0, 0, err | 310 | return 0, 0, err |
294 | } | 311 | } |
312 | + | ||
295 | var resp AddcointotoutiaoResp | 313 | var resp AddcointotoutiaoResp |
296 | err = json.Unmarshal([]byte(res), &resp) | 314 | err = json.Unmarshal([]byte(res), &resp) |
297 | if err != nil { | 315 | if err != nil { |
src/common/redis/def.go
@@ -3,4 +3,5 @@ package redis | @@ -3,4 +3,5 @@ package redis | ||
3 | const ( | 3 | const ( |
4 | USER_DATA_KEY = "DAYCS_USER_DATA_KEY" //玩家数据 hset | 4 | USER_DATA_KEY = "DAYCS_USER_DATA_KEY" //玩家数据 hset |
5 | GAME_ACCESS_TOKEN = "DAYCD_GAME_ACCESS_TOKEN" //头条sdk | 5 | GAME_ACCESS_TOKEN = "DAYCD_GAME_ACCESS_TOKEN" //头条sdk |
6 | + USER_SESSION_KEY = "usk_" //头条用户sessionkey | ||
6 | ) | 7 | ) |
src/mysql/dbmysql.go
@@ -145,8 +145,6 @@ func GetFromBackUp(openid string) (err error, Openid string, LastGetTime, LeftCn | @@ -145,8 +145,6 @@ func GetFromBackUp(openid string) (err error, Openid string, LastGetTime, LeftCn | ||
145 | defer rows.Close() | 145 | defer rows.Close() |
146 | } | 146 | } |
147 | 147 | ||
148 | - logger.Error("cmd", cmd) | ||
149 | - | ||
150 | if err != nil { | 148 | if err != nil { |
151 | logger.Notic("GetFromBackUp mysql select error:%v", err) | 149 | logger.Notic("GetFromBackUp mysql select error:%v", err) |
152 | return | 150 | return |