Commit 900acc73acc49abff83f492fcaa59b5961fb4f86

Authored by 李旭
1 parent 425e2c97
Exists in master

新增签名等功能

src/HttpServer/logic/bytedance.go 0 → 100644
@@ -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