bytedance.go 2.06 KB
package logic

//2021-04-14添加
//https://bytedance.feishu.cn/docs/doccnkUkS6ivKQgbeGPxjN3mgNc#

import (
	"HttpServer/redishandler"
	"common/logger"
	"common/redis"
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"encoding/json"
	"errors"
	"io/ioutil"
	"log"
	"net/http"
)

// 计算签名算法
func CreateCommonBytedanceSign(post_body []byte, openid string) string {
	sessionkey := GetBytedanceSessionKey(openid)
	if sessionkey != "" {
		return CreateBytedanceSign(sessionkey, post_body)
	}
	return ""
}

// 计算签名算法
func CreateBytedanceSign(session_key string, post_body []byte) string {
	h := hmac.New(sha256.New, []byte(session_key))
	h.Write(post_body)
	hashcode2 := hex.EncodeToString(h.Sum(nil))

	//logtest
	log.Println("CreateBytedanceSign::,session_key:", session_key, ",post_body:", string(post_body), ",hashcode2:", hashcode2)
	//logtest

	return hashcode2
}

// 保存sessionkey
func SetBytedanceSessionKey(openid, sessionkey string) {
	rediskey := redis.USER_SESSION_KEY + "_" + openid
	expire := 86400 * 30
	redishandler.GetRedisClient().SetExString(rediskey, sessionkey, expire)
}

// 获取sessionkey
func GetBytedanceSessionKey(openid string) string {
	rediskey := redis.USER_SESSION_KEY + "_" + openid
	val, _ := redishandler.GetRedisClient().GetString(rediskey)
	return val
}

//获取global_id
func GetBytedanceGlobalID(access_token, openid string) (globalid int64, err error) {
	url := GETGLOBALIDURL + "?access_token=" + access_token + "&open_id=" + openid
	res, err := http.Get(url)
	if err != nil {
		logger.Error("GetBytedanceGlobalID err=%v", err)
		return
	}

	result, _ := ioutil.ReadAll(res.Body)
	defer res.Body.Close()

	var tmp GetGlobalIDResp
	err = json.Unmarshal(result, &tmp)
	if err != nil {
		logger.Error("GetBytedanceGlobalID err=%v", err)
		return
	}

	if tmp.Errcode != 0 {
		logger.Error("GetBytedanceGlobalID err=%v", tmp.Errmsg)
		err = errors.New("GetBytedanceGlobalID error:tmp:" + string(result))
		return
	}

	log.Println("GetBytedanceGlobalID::", string(result))

	globalid = tmp.GlobalID

	log.Println("globalid::", globalid)

	return

}