diff --git a/officialaccount/oauth/oauth.go b/officialaccount/oauth/oauth.go index c7c647a..58ebfcd 100644 --- a/officialaccount/oauth/oauth.go +++ b/officialaccount/oauth/oauth.go @@ -1,6 +1,7 @@ package oauth import ( + ctx2 "context" "encoding/json" "fmt" "net/http" @@ -73,11 +74,28 @@ type ResAccessToken struct { UnionID string `json:"unionid"` } +// GetUserInfoByCodeContext 通过网页授权的code 换取用户的信息 +func (oauth *Oauth) GetUserInfoByCodeContext(ctx ctx2.Context, code string) (result UserInfo, err error) { + var ( + token ResAccessToken + ) + if token, err = oauth.GetUserAccessTokenContext(ctx, code); err != nil { + return + } + + return oauth.GetUserInfoContext(ctx, token.AccessToken, token.OpenID, "") +} + // GetUserAccessToken 通过网页授权的code 换取access_token(区别于context中的access_token) func (oauth *Oauth) GetUserAccessToken(code string) (result ResAccessToken, err error) { + return oauth.GetUserAccessTokenContext(ctx2.Background(), code) +} + +// GetUserAccessTokenContext 通过网页授权的code 换取access_token(区别于context中的access_token) with context +func (oauth *Oauth) GetUserAccessTokenContext(ctx ctx2.Context, code string) (result ResAccessToken, err error) { urlStr := fmt.Sprintf(accessTokenURL, oauth.AppID, oauth.AppSecret, code) var response []byte - response, err = util.HTTPGet(urlStr) + response, err = util.HTTPGetContext(ctx, urlStr) if err != nil { return } @@ -94,9 +112,14 @@ func (oauth *Oauth) GetUserAccessToken(code string) (result ResAccessToken, err // RefreshAccessToken 刷新access_token func (oauth *Oauth) RefreshAccessToken(refreshToken string) (result ResAccessToken, err error) { + return oauth.RefreshAccessTokenContext(ctx2.Background(), refreshToken) +} + +// RefreshAccessTokenContext 刷新access_token with context +func (oauth *Oauth) RefreshAccessTokenContext(ctx ctx2.Context, refreshToken string) (result ResAccessToken, err error) { urlStr := fmt.Sprintf(refreshAccessTokenURL, oauth.AppID, refreshToken) var response []byte - response, err = util.HTTPGet(urlStr) + response, err = util.HTTPGetContext(ctx, urlStr) if err != nil { return } @@ -113,9 +136,14 @@ func (oauth *Oauth) RefreshAccessToken(refreshToken string) (result ResAccessTok // CheckAccessToken 检验access_token是否有效 func (oauth *Oauth) CheckAccessToken(accessToken, openID string) (b bool, err error) { + return oauth.CheckAccessTokenContext(ctx2.Background(), accessToken, openID) +} + +// CheckAccessTokenContext 检验access_token是否有效 with context +func (oauth *Oauth) CheckAccessTokenContext(ctx ctx2.Context, accessToken, openID string) (b bool, err error) { urlStr := fmt.Sprintf(checkAccessTokenURL, accessToken, openID) var response []byte - response, err = util.HTTPGet(urlStr) + response, err = util.HTTPGetContext(ctx, urlStr) if err != nil { return } @@ -149,12 +177,17 @@ type UserInfo struct { // GetUserInfo 如果scope为 snsapi_userinfo 则可以通过此方法获取到用户基本信息 func (oauth *Oauth) GetUserInfo(accessToken, openID, lang string) (result UserInfo, err error) { + return oauth.GetUserInfoContext(ctx2.Background(), accessToken, openID, lang) +} + +// GetUserInfoContext 如果scope为 snsapi_userinfo 则可以通过此方法获取到用户基本信息 with context +func (oauth *Oauth) GetUserInfoContext(ctx ctx2.Context, accessToken, openID, lang string) (result UserInfo, err error) { if lang == "" { lang = "zh_CN" } urlStr := fmt.Sprintf(userInfoURL, accessToken, openID, lang) var response []byte - response, err = util.HTTPGet(urlStr) + response, err = util.HTTPGetContext(ctx, urlStr) if err != nil { return }