1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package oauth
- import (
- "encoding/json"
- "fmt"
- "github.com/lin-jim-leon/douyin/util"
- "net/url"
- )
- const (
- redirectOauthURL string = "https://open.douyin.com/platform/oauth/connect?client_key=%s&response_type=code&scope=%s&redirect_uri=%s"
- accessTokenUrl string = "https://open.douyin.com/oauth/access_token?client_key=%s&client_secret=%s&code=%s&grant_type=authorization_code"
- refreshTokenURL string = "https://open.douyin.com/oauth/oauth/refresh_token?client_key=%s&grant_type=refresh_token&refresh_token=%s"
- )
- // GetRedirectURL 获取授权码的url地址
- func GetRedirectURL(redirecturl string, ClientKey string, Scopes string) string {
- uri := url.QueryEscape(redirecturl)
- return fmt.Sprintf(redirectOauthURL, ClientKey, Scopes, uri)
- }
- // AccessToken返回结构体
- type ainfo struct {
- //util.CommonError
- AccessToken string `json:"access_token"`
- Description string `json:"description"`
- ErrorCode int `json:"error_code"`
- ExpiresIn int `json:"expires_in"`
- OpenId string `json:"open_id"`
- RefreshExpiresIn int `json:"refresh_expires_in"`
- RefreshToken string `json:"refresh_token"`
- Scope string `json:"scope"`
- }
- // AccessToken返回response
- type AccessTokenRes struct {
- Message string `json:"message"`
- Data ainfo `json:"data"`
- }
- // GetAccessToken 通过网页授权的code 换取access_token
- func GetAccessToken(ClientKey string, ClientSecret string, code string) (accessToken AccessTokenRes, err error) {
- uri := fmt.Sprintf(accessTokenUrl, ClientKey, ClientSecret, code)
- var response []byte
- response, err = util.HTTPGet(uri)
- if err != nil {
- return AccessTokenRes{}, err
- }
- var result AccessTokenRes
- err = json.Unmarshal(response, &result)
- if err != nil {
- return AccessTokenRes{}, err
- }
- if result.Data.ErrorCode != 0 {
- return AccessTokenRes{}, fmt.Errorf("GetAccessToken error: error_code=%v, description=%v", result.Data.ErrorCode, result.Data.Description)
- }
- return result, nil
- }
- // RefreshAccessToken 刷新AccessToken.
- // 当access_token过期(过期时间15天)后,可以通过该接口使用refresh_token(过期时间30天)进行刷新
- func RefreshAccessToken(refreshkey string, clientkey string) (accessToken AccessTokenRes, err error) {
- req := url.Values{}
- req.Set("client_key", clientkey)
- req.Set("refresh_token", refreshkey)
- req.Set("grant_type", "refresh_token")
- data := req.Encode()
- var response []byte
- response, err = util.HTTPPost(refreshTokenURL, data, "application/x-www-form-urlencoded")
- if err != nil {
- return AccessTokenRes{}, err
- }
- var result AccessTokenRes
- err = json.Unmarshal(response, &result)
- if err != nil {
- return AccessTokenRes{}, err
- }
- if result.Data.ErrorCode != 0 {
- return AccessTokenRes{}, fmt.Errorf("GetAccessToken error: error_code=%v, description=%v", result.Data.ErrorCode, result.Data.Description)
- }
- return result, nil
- }
|