微信公众号获取openid等一系列流程

先说下为什么要获取 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