forked from 316014408/oppo-push
-
Notifications
You must be signed in to change notification settings - Fork 0
/
token.go
66 lines (60 loc) · 1.42 KB
/
token.go
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
package oppopush
import (
"crypto/sha256"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"time"
)
const (
MaxTimeToLive = 3600 * 24
)
type OppoToken struct {
AccessToken string `json:"access_token"`
CreateTime int64 `json:"create_time"`
}
var tokenInstance *OppoToken
func init() {
tokenInstance = &OppoToken{
AccessToken: "",
CreateTime: 0,
}
}
//GetToken 获取AccessToken值
func GetToken(appKey, masterSecret string) (*OppoToken, error) {
nowMilliSecond := time.Now().UnixNano() / 1e6
if (nowMilliSecond-tokenInstance.CreateTime) < MaxTimeToLive*1000 && tokenInstance.AccessToken != "" {
return tokenInstance, nil
}
timestamp := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
shaByte := sha256.Sum256([]byte(appKey + timestamp + masterSecret))
sign := fmt.Sprintf("%x", shaByte)
params := url.Values{}
params.Add("app_key", appKey)
params.Add("sign", sign)
params.Add("timestamp", timestamp)
resp, err := http.PostForm(PushHost+AuthURL, params)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var result AuthSendResult
err = json.Unmarshal(body, &result)
if err != nil {
return nil, err
}
if result.Code != 0 {
return nil, errors.New(result.Message)
}
tokenInstance.AccessToken = result.Data.AuthToken
tokenInstance.CreateTime = result.Data.CreateTime
return tokenInstance, nil
}