package oauth
import (
"errors"
"github.com/geiqin/thirdparty/result"
"github.com/geiqin/thirdparty/utils"
)
//微信授权登录(第三方应用)
type AuthWxWechat struct {
BaseRequest
}
func NewAuthWxWechat(conf *AuthConfig) *AuthWxWechat {
authRequest := &AuthWxWechat{}
authRequest.Set(utils.RegisterSourceWechat, conf)
authRequest.authorizeUrl = "https://open.weixin.qq.com/connect/qrconnect"
authRequest.TokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token"
authRequest.userInfoUrl = "https://api.weixin.qq.com/sns/userinfo"
return authRequest
}
//获取登录地址
func (a *AuthWxWechat) GetRedirectUrl(state string) (*result.CodeResult, error) {
url := utils.NewUrlBuilder(a.authorizeUrl).
AddParam("response_type", "code").
AddParam("appid", a.config.ClientId).
AddParam("redirect_uri", a.config.RedirectUrl).
AddParam("scope", "snsapi_login").
AddParam("state", a.GetState(state)).
Build()
_, err := utils.Post(url)
if err != nil {
return nil, err
}
return nil, nil
}
//获取token
func (a *AuthWxWechat) GetWebAccessToken(code string) (*result.TokenResult, error) {
url := utils.NewUrlBuilder(a.TokenUrl).
AddParam("grant_type", "authorization_code").
AddParam("code", code).
AddParam("appid", a.config.ClientId).
AddParam("secret", a.config.ClientSecret).
AddParam("redirect_uri", a.config.RedirectUrl).
Build()
body, err := utils.Post(url)
if err != nil {
return nil, err
}
m := utils.JsonToMSS(body)
if _, ok := m["error"]; ok {
return nil, errors.New(m["error_description"])
}
token := &result.TokenResult{
AccessToken: m["access_token"],
RefreshToken: m["refresh_token"],
ExpireIn: m["expires_in"],
OpenId: m["openid"],
UnionId: m["unionid"],
Scope: m["scope"],
TokenType: m["token_type"],
}
if token.AccessToken == "" {
return nil, errors.New("获取AccessToken数据为空!")
}
return token, nil
}
//通过移动应用获取AccessToken
func (a *AuthWxWechat) GetAppAccessToken(code string) (*result.TokenResult, error) {
url := utils.NewUrlBuilder(a.TokenUrl).
AddParam("grant_type", "authorization_code").
AddParam("code", code).
AddParam("appid", a.config.ClientId).
AddParam("secret", a.config.ClientSecret).
Build()
body, err := utils.Post(url)
if err != nil {
return nil, err
}
m := utils.JsonToMSS(body)
if _, ok := m["error"]; ok {
return nil, errors.New(m["error_description"])
}
token := &result.TokenResult{
AccessToken: m["access_token"],
RefreshToken: m["refresh_token"],
ExpireIn: m["expires_in"],
OpenId: m["openid"],
UnionId: m["unionid"],
Scope: m["scope"],
TokenType: m["token_type"],
}
if token.AccessToken == "" {
return nil, errors.New("获取AccessToken数据为空!")
}
return token, nil
}
//获取第三方用户信息
func (a *AuthWxWechat) GetUserInfo(accessToken string, openId string) (*result.UserResult, error) {
url := utils.NewUrlBuilder(a.userInfoUrl).
AddParam("openid", openId).
AddParam("access_token", accessToken).
Build()
body, err := utils.Get(url)
if err != nil {
return nil, err
}
m := utils.JsonToMSS(body)
if _, ok := m["error"]; ok {
return nil, errors.New(m["error_description"])
}
user := &result.UserResult{
OpenId: m["openid"],
UnionId: m["unionid"],
UserName: m["nickname"],
NickName: m["nickname"],
AvatarUrl: m["headimgurl"],
City: m["city"],
Province: m["province"],
Country: m["country"],
Language: m["language"],
Source: a.registerSource,
Gender: utils.GetRealGender("sex").Desc,
}
if user.OpenId == "" {
return nil, errors.New("获取用户信息为空!")
}
return user, nil
}
没有合适的资源?快使用搜索试试~ 我知道了~
Go语言实现的第三方授权登录开源库源码+项目说明.zip
共26个文件
go:22个
mod:1个
gitignore:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 180 浏览量
2022-12-26
22:58:43
上传
评论
收藏 18KB ZIP 举报
温馨提示
Go语言实现的第三方授权登录开源库源码+项目说明.zip Go语言实现的第三方授权登录,整合QQ、微信、微信小程序、微博、抖音、支付宝等第三方平台的授权登录 【微信授权登录】 package main import ( "fmt" "github.com/geiqin/thirdparty/oauth" ) func main() { wxConf := &oauth.AuthConf{ ClientId: "your app_id", ClientSecret: "your app_secret", RedirectUrl: "http://www.geiqin.com"} wxAuth := oauth.NewAuthWxWechat(wxConf) fmt.Print(wxAuth.GetRedirectUrl("sate")) //获取第三方登录地址 wxRes, err := wxAuth.GetToken("code") userInfo, _ := wxAuth.GetUserInfo(wxRes.
资源推荐
资源详情
资源评论
收起资源包目录
Go语言实现的第三方授权登录开源库源码+项目说明.zip (26个子文件)
项目说明.md 648B
go.mod 135B
mobile
auth_sms.go 125B
auth_fast.go 126B
LICENSE 11KB
utils
gender.go 958B
http.go 1006B
uuid.go 161B
url.go 797B
ip.go 343B
mss.go 1KB
source.go 979B
oauth
auth_wx_mini.go 3KB
auth_wx_wechat.go 4KB
auth_douyin.go 3KB
auth_wb.go 2KB
auth_qq.go 2KB
base.go 778B
entity
param.go 588B
failure.go 519B
.gitignore 15B
result
code.go 88B
wx_mobile.go 207B
token.go 904B
user.go 952B
main.go 461B
共 26 条
- 1
资源评论
Make程序设计
- 粉丝: 5621
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功