先说下为什么要获取 openid?
因为用户管理类接口可以通过openid可以获取用户的一些信息的.
说到 openid 必须先说微信授权登录的过程
-
前端需要在进入路由的是beaforEach的时候,先去判断链接上有没有 openid
-
如果没有,就去跳转到服务端给的一个地址。如果有,就继续往下走(next())
-
这个时候服务端会往下面的链接(https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect来获取code)上跳转,去引导用户去点击授权,用户授权之后就会重定向到 redirect_uri(服务端的地址)
-
利用 code 获取 openid 之后(服务端去做),服务端会跳转到前端页面(带上openid)
下面作为了解:
微信授权使用的是 OAuth2.0授权方式。主要有以下简略的步骤:
第一步:用户同意授权,获取 code
第二步:通过 code获取网页授权access_token
第三步:刷新access_token(如果需要)
第四步:拉取用户信息(需scope为 snsapi_userinfo)
下面来具体api表示下怎么获取的 code 和 openid 吧
一:获取code:
通过https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect来获取code
参数:
APPID:应用唯一标识
redirect_uri:授权后重定向的回调链接地址,用户同意后,code 会自动添加到后面。(请使用urlEncode对链接进行处理 ($url = urlencode('')) )
scope:是应用授权作用域 (一般有两种:一种是静默方式(snsapi_base); 一种是非静默方式(snsapi_userinfo),需要用户去手动同意才能获取用户信息)
微信中尤其提醒:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
** code 是微信自动生成的。并且放在redirect_uri(重定向后的回调链接地址)后面,并且带上code和state参数
上面提到了 code。那么 code又是什么呢?
code:作为换取 access_token的票据,每次用户授权带上的 code 都不一样。5分钟未被使用自动过期(过期的这里下面有讲)
二:然后授权成功之后。得到 code。就用 code 去获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx41cb8dbd827a16e9&secret=d4624c36b6795d1d99dcf0547af5443d&code=00137323023ab55775be09d6d8e75ffA&grant_type=authorization_code
参数说明:
appid:应用唯一标识
code:上一步已经获取到了
secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
正确的返回
"access_token":"ACCESS_TOKEN", // 接口调用凭证 "expires_in":7200, // access_token接口调用凭证超时时间 "refresh_token":"REFRESH_TOKEN", // 用户刷新access_token "openid":"OPENID", // 授权用户唯一标识 "scope":"SCOPE", // 作用域 等
三:通过access_token、openid获取用户信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
就会得到用户的信息:
得到参数:
openid:用户的唯一标识
nickname:用户昵称
sex: 男女
等。。。
特别注意:
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret); 2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为; 3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。 建议将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。
最后总结下详细的步骤:
- 1.用户关注微信公众账号。
- 2.微信公众账号提供用户请求授权页面URL。
- 3.用户点击授权页面URL,将向服务器发起请求
- 4.服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
- 5.用户同意(scope为snsapi_base时无此步骤)
- 6.服务器将CODE通过回调传给微信公众账号
- 7.微信公众账号获得CODE
- 8.微信公众账号通过CODE向服务器请求Access Token
- 9.服务器返回Access Token和OpenID给微信公众账号
- 10.微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
- 11.服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
公众号链接(官网更权威):
https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html