oauth.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package oauth
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/lin-jim-leon/kuaishou/util"
  6. )
  7. const (
  8. accessTokenUrl = "https://open.kuaishou.com/oauth2/access_token?grant_type=authorization_code&app_id=%s&app_secret=%s&code=%s"
  9. refreshTokenURL = "https://open.kuaishou.com/oauth2/refresh_token?grant_type=refresh_token&app_id=%s&app_secret=%s&refresh_token=%s"
  10. )
  11. // accesstoken信息
  12. type AccessTokenRes struct {
  13. Result int `json:"result"`
  14. AccessToken string `json:"access_token"`
  15. ExpiresIn int `json:"expires_in"`
  16. RefreshToken string `json:"refresh_token"`
  17. RefreshTokenExpiresIn int `json:"refresh_token_expires_in"`
  18. OpenId string `json:"open_id"`
  19. Scopes []string `json:"scopes"`
  20. ErrorMsg string `json:"error_msg"`
  21. }
  22. // GetAccessToken 通过网页授权的code 换取access_token
  23. func GetAccessToken(ClientKey string, ClientSecret string, code string) (accessToken AccessTokenRes, err error) {
  24. uri := fmt.Sprintf(accessTokenUrl, ClientKey, ClientSecret, code)
  25. var response []byte
  26. response, err = util.HTTPGet(uri)
  27. if err != nil {
  28. return AccessTokenRes{}, err
  29. }
  30. var result AccessTokenRes
  31. err = json.Unmarshal(response, &result)
  32. if err != nil {
  33. return AccessTokenRes{}, err
  34. }
  35. if len(result.ErrorMsg) > 0 {
  36. return AccessTokenRes{}, fmt.Errorf("GetAccessToken error: error_msg=%s", result.ErrorMsg)
  37. }
  38. return result, nil
  39. }
  40. type RefreshTokenRes struct {
  41. Result int `json:"result"`
  42. AccessToken string `json:"access_token"`
  43. ExpiresIn int `json:"expires_in"`
  44. RefreshToken string `json:"refresh_token"`
  45. RefreshTokenExpiresIn int `json:"refresh_token_expires_in"`
  46. Scopes []string `json:"scopes"`
  47. ErrorMsg string `json:"error_msg"`
  48. }
  49. // RefreshAccessToken 刷新AccessToken.
  50. // 当access_token过期(过期时间2天)后,可以通过该接口使用refresh_token(过期时间180天)进行刷新
  51. func RefreshAccessToken(refreshkey string, clientkey string, clientsecret string) (accessToken RefreshTokenRes, err error) {
  52. uri := fmt.Sprintf(refreshTokenURL, clientkey, clientsecret, refreshkey)
  53. var response []byte
  54. response, err = util.HTTPGet(uri)
  55. if err != nil {
  56. return RefreshTokenRes{}, err
  57. }
  58. var result RefreshTokenRes
  59. err = json.Unmarshal(response, &result)
  60. if err != nil {
  61. return RefreshTokenRes{}, err
  62. }
  63. if len(result.ErrorMsg) > 0 {
  64. return RefreshTokenRes{}, fmt.Errorf("RefreshAccessToken error: error_msg=%s", result.ErrorMsg)
  65. }
  66. return result, nil
  67. }