tencent.go 1.91 KB
Newer Older
kzkzzzz's avatar
kzkzzzz committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
package tencent

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"github.com/tencentyun/tls-sig-api-v2-golang/tencentyun"
	"hilo/common/httpclient"
	"io/ioutil"
)

type (
	Config struct {
		TencentYunAppId int
		TencentYunKey   string
	}

	TencentYun struct {
		Config *Config
	}
)

var (
	Global *TencentYun
)

func SetTencentYun(ty *TencentYun) {
	Global = ty
}

func NewTencentYun(conf *Config) *TencentYun {
	return &TencentYun{Config: conf}
}

func (t *TencentYun) getAdminSig() (string, error) {
	sig, err := tencentyun.GenUserSig(t.Config.TencentYunAppId, t.Config.TencentYunKey, "administrator", 86400*180)
	if err != nil {
		return "", err
	}
	return sig, nil
}

func (t *TencentYun) GetUserSig(externalId string) (string, error) {
	sig, err := tencentyun.GenUserSig(t.Config.TencentYunAppId, t.Config.TencentYunKey, externalId, 86400*180)
	if err != nil {
		return "", err
	}
	return sig, nil
}

func (t *TencentYun) UserRegister(ctx context.Context, externalId string, nick string, avatar string) error {
	type BodyStruct struct {
		Identifier string
		Nick       string
		FaceUrl    string
	}

	type RespStruct struct {
		ActionStatus string
		ErrorInfo    string
		ErrorCode    int
	}

	url, err := t.getLoginUrl()
	if err != nil {
		return err
	}

	body := BodyStruct{
		Identifier: externalId,
		Nick:       nick,
		FaceUrl:    avatar,
	}

	jsonStr, err := json.Marshal(body)
	if err != nil {
		return err
	}

	resp, err := httpclient.Default.Post(url, "application/json", bytes.NewBuffer(jsonStr))
	defer resp.Body.Close()
	if err != nil {
		return err
	}

	result, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	respStruct := RespStruct{}
	if err := json.Unmarshal(result, &respStruct); err != nil {
		return err
	}
	if respStruct.ErrorCode == 0 {
		return nil
	} else {
		return fmt.Errorf(fmt.Sprintf("tencentyun UserRegister resp ErrorCode:%v, ErrorInfo:%v", respStruct.ErrorCode, respStruct.ErrorInfo))
	}
}