You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
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 |
|
}
|
|
|