golang_微信公众号网页授权

UnionID
同一用户、同一微信平台下的不同应用unionid相同

静默授权
1. snsapi_base为scope的网页授权
2. 已进入本公众号的网页授权页snsapi_userinfo

网页授权4步:
1. 用户同意授权,获取code
2. 通过code换取网页授权access_token
3. 刷新access_token(如有需要)
4. scope为snsapi_userinfo时拉取用户信息

第一步,引导用户打开认证的页面

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type 返回类型,即code
scope 应用授权作用域,
snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),
snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state 重定向后会带上state参数(非必须)
wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE(5分钟未被使用自动过期)

secret 公众号的appsecret
grant_type 即authorization_code

第二步,通过code换取网页授权access_token

如果scope为snsapi_token,获取access_token同时获取openid。

获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

返回数据:

{
“access_token”:“ACCESS_TOKEN”, // 网页授权接口调用凭证
“expires_in”:7200,
“refresh_token”:“REFRESH_TOKEN”, // 用户刷新access_token
“openid”:“OPENID”,
“scope”:“SCOPE”
}

第三步:刷新access_token(如果需要)

获取第二步的refresh_token后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

第四步:拉取用户信息(需scope为 snsapi_userinfo)

如果scope为 snsapi_userinfo,通过access_token和openid拉取用户信息

http:GET(请使用https协议)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

返回数据:

{
“openid”:" OPENID",
“nickname”: NICKNAME,
“sex”:“1”,
“province”:“PROVINCE”,
“city”:“CITY”,
“country”:“COUNTRY”,
“headimgurl”: “http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46”,
“privilege”:[ “PRIVILEGE1” “PRIVILEGE2” ],
“unionid”: “o6_bmasdasdsad6_2sgVt7hMZOPfL”}

检验授权凭证(access_token)是否有效

http:GET(请使用https协议)
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

相关链接:
1 微信网页开发-网页授权

部分封装方法如下:

const (
	redirectOauthURL       = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"
	webAppRedirectOauthURL = "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"
	webAccessTokenURL      = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"
	refreshAccessTokenURL  = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s"
	userInfoURL            = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN"
	checkAccessTokenURL    = "https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s"
	accessTokenURL         
### 实现微信登录功能 #### OAuth2授权流程 为了使用户能够在微信公众号内置浏览器中完成登录操作,需遵循OAuth2协议。具体来说,在前端页面加载时应重定向至特定的微信授权链接[^3]: ```javascript let redirect_uri = encodeURI(window.location.href).split('#')[0], appid = "YOUR_APP_ID"; // 替换成实际应用ID let wx_url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`; window.location.href = wx_url; ``` 此代码片段会引导用户的设备访问由`wx_url`指定的位置,从而触发微信服务器向第三方应用程序发送临时凭证(即`code`),该凭证稍后可用于交换更持久性的令牌。 #### 后端处理逻辑 一旦接收到带有`code`参数的回调请求,服务端应当立即利用这个一次性码去换取access_token以及其他必要的个人信息。以下是基于Golang编写的简化版控制器函数来构建这样的响应机制[^2]: ```go // AuthLogin @Title 授权URL // @router /authLogin [post,get] func (u *UserController) AuthLogin() { url := fmt.Sprintf("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=200#wechat_redirect", appid, baseUrl) u.Success(0, url, "成功") } ``` 请注意替换其中的变量值以匹配具体的项目环境配置。 #### JS-SDK初始化与权限声明 为了让网页能够调用微信提供的JavaScript API,开发者还需要提前准备好一系列准备工作,比如注册并启用相应的API接口名称列表。对于地理位置相关的交互而言,则至少要包含如下所示的内容[^1]: ```json { "jsApiList": ["openLocation","getLocation"] } ``` 同时确保已按照官方指引完成了JS-SDK的安全域名备案工作,并通过有效的签名算法验证当前页面合法性之后再执行任何敏感的操作。 #### 注意事项 - **安全性考量**:在整个过程中务必妥善保管各类密钥信息,防止泄露给未经授权方;另外建议采用HTTPS加密传输方式保障数据安全。 - **调试工具的应用**:可以借助微信公众平台提供的在线沙盒账号来进行初步的功能测试,方便快捷地获取到所需的AppId和AppSecret用于本地模拟运行期间。 - **多团队协作管理**:当存在多名成员共同参与同一个项目的开发周期内,记得各自独立创建专属的小程序实例以便于分工合作而不至于混淆彼此之间的资源文件版本控制等问题的发生。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值