From d4fd145bb5c828087eaa041f83979b93a2abd58d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=BD=E5=9B=BD=E9=B9=8F?= <1033404553@qq.com> Date: Thu, 2 Nov 2023 09:38:42 +0800 Subject: [PATCH] =?UTF-8?q?add:=20oauth=20=E6=B7=BB=E5=8A=A0=20ctx,=20?= =?UTF-8?q?=E4=B8=94=E5=A2=9E=E5=8A=A0=20GetUserInfoByCodeCtx=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=BF=AB=E9=80=9F=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=20(#747)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add: oauth 添加 ctx, 且增加 GetUserInfoByCodeCtx 方法快速获取用户信息 * fix: code style * fix: white space --------- Co-authored-by: seth-shi --- officialaccount/oauth/oauth.go | 41 ++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) 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 }