66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package huawei
|
||
|
||
// http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_api_reference_s1
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
"net/url"
|
||
"time"
|
||
)
|
||
|
||
const (
|
||
_accessTokenURL = "https://login.vmall.com/oauth2/token"
|
||
_grantType = "client_credentials"
|
||
_respCodeSuccess = 0
|
||
)
|
||
|
||
// Access huawei access token.
|
||
type Access struct {
|
||
AppID string
|
||
Token string
|
||
Expire int64
|
||
}
|
||
|
||
type accessResponse struct {
|
||
Token string `json:"access_token"`
|
||
Expire int64 `json:"expires_in"` // Access Token的有效期,以秒为单位
|
||
Scope string `json:"scope"` // Access Token的访问范围,即用户实际授予的权限列表
|
||
Code int `json:"error"`
|
||
Desc string `json:"error_description"`
|
||
}
|
||
|
||
// NewAccess get token.
|
||
func NewAccess(clientID, clientSecret string) (a *Access, err error) {
|
||
params := url.Values{}
|
||
params.Add("grant_type", _grantType)
|
||
params.Add("client_id", clientID)
|
||
params.Add("client_secret", clientSecret)
|
||
res, err := http.PostForm(_accessTokenURL, params)
|
||
if err != nil {
|
||
return
|
||
}
|
||
defer res.Body.Close()
|
||
dc := json.NewDecoder(res.Body)
|
||
resp := new(accessResponse)
|
||
if err = dc.Decode(resp); err != nil {
|
||
return
|
||
}
|
||
if resp.Code == _respCodeSuccess {
|
||
a = &Access{
|
||
AppID: clientID,
|
||
Token: resp.Token,
|
||
Expire: time.Now().Unix() + resp.Expire,
|
||
}
|
||
return
|
||
}
|
||
err = fmt.Errorf("new access error, code(%d) description(%s)", resp.Code, resp.Desc)
|
||
return
|
||
}
|
||
|
||
// IsExpired judge that whether privilige expired.
|
||
func (a *Access) IsExpired() bool {
|
||
return a.Expire <= time.Now().Add(8*time.Hour).Unix() // 提前8小时过期,for renew auth
|
||
}
|