首页 > 技术文章 > 微信授权登录

z-jx 2018-09-22 11:58 原文

一、需要了解的整个过程
微信授权登录的整个过程:
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
二、具体步骤
1.用户授权并获取code
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
  • APPID就是填写你公众号的appid
  • REDIRECT_URI是填写通过urlEncode处理的授权地址,不能直接填写。(处理网站:http://tool.oschina.net/encode?type=4,在这里有一个要注意的就是,在填写网关时,要去掉http://,不然就会出现 redirect_uri的域名与审核时填写的授权域名不一致)
  • SCOPE一般填写snsapi_userinfo比较好,能够直接通过用户授权获取用户信息(snsapi_login是坑, snsapi_base只能获取openid)
请求地址参数说明
参数
是否必须
说明
appid
应用唯一标识
redirect_uri
请使用urlEncode对链接进行处理
response_type
填code
scope
应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即
state
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
 
2.通过code获取assess_token和openid
通过code获取access_token和openid(有这两个就能获取用户基本信息,如昵称、头像)
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
其实就是将获取到的code填进去,appid和secret是填写你公众号的appid和secret就行。
请求地址参数说明
参数
是否必须
说明
appid
应用唯一标识,在微信开放平台提交应用审核通过后获得
secret
应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code
填写第一步获取的code参数
grant_type
填authorization_code
 
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
参数说明
参数
说明
access_token
接口调用凭证
expires_in
access_token接口调用凭证超时时间,单位(秒)
refresh_token
用户刷新access_token
openid
授权用户唯一标识
scope
用户授权的作用域,使用逗号(,)分隔
unionid
当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。
 
三、获取用户基本信息
https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID
填上获取到的token和openid,获取用户信息。
 
四、一些总结
1.域名问题
    我是使用了ngrok进行测试的,做微信公众,域名是必须的,这里ngrok反向代理可以暂时解决。(ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。)
由于这个东西不是很了解,所以就不多叙述了(通过ngrok建立通向本地8080端口的通道,能够获取到一个随机的域名)
2.微信公众号底部菜单栏
    在做这个微信授权有一个困扰我的地方,刚开始我是通过拼接url去测试的(个人觉得巨麻烦)。后来我就使用了微信公众号底部菜单栏。这里就说一下自定义菜单栏吧。。。。。
点开官方地址
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013
拖到最底会看到一个链接(使用网页调试工具调试该接口)
通过这里就能自定义菜单了。。。。。
 
 
后记:
概念:snsapi_base与snsapi_userinfo属于微信网页授权获取用户信息的两种作用域。 区别:有无弹框 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的. (静默的另一种:对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。) 以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。 --------------------- 本文来自 enjoy_sun_moon 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/enjoy_sun_moon/article/details/79497566?utm_source=copy
 

推荐阅读