bytedance.go 2.93 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"
	"fmt"
	"io/ioutil"
	"net/http"
	"strconv"
	"time"
)

// 计算签名算法
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

}

//并发次数
func GetConcurrency(key, openid string) int {
	rediskey := key + "_" + openid
	defaultval := fmt.Sprintf("%d", DAILY_FETCH_CNT)
	b, _ := redishandler.GetRedisClient().Exists(rediskey)
	if b == true {
		defaultval, _ = redishandler.GetRedisClient().GetString(rediskey)
	} else {
		redishandler.GetRedisClient().SetExString(rediskey, defaultval, 86400)
	}

	intval, _ := strconv.Atoi(defaultval)


	return intval
}

//并发次数
func Decrcurrency(key, openid string) int {
	rediskey := key + "_" + openid
	b, _ := redishandler.GetRedisClient().Exists(rediskey)
	intval := 0
	if b == true {
		defaultval, _ := redishandler.GetRedisClient().Decr(rediskey)
		intval, _ = strconv.Atoi(defaultval)
	}

	return intval
}

//当前日期字符串
func DateNowStr() string {
	tim := time.Unix(time.Now().Unix(), 0).Format("060102")
	return fmt.Sprintf("%s", tim)
}