微信开发之微信环境h5页面登录实现流程

一、unionid和openId

在了解微信环境登录流程之前,先讲俩个概念:unionid和openId。

unionid表示某一个用户在某一个公司或者商家下的用户id(某公司或商家的身份证);

openid表示某一个用户在某一个公司或者商家下的某一个应用或者公众平台下的用户id(某一个应用或者公众平台的身份证)

所以,某一个公司或者商家下会有多个应用或者公众平台,那么就通过unionid来关联某一个用户在不同应用或者不同平台的关系。

二、静默授权和非静默授权

我们在平时开发中,总会听到产品要求是静默授权和非静默授权。那么二者之前有什么区别呢?

静默授权的意思是用户无感知的获取用户信息,不需要用户有任何的操作动作,注意静默授权只能获取到用户的openId。并不能获取到用户的其他信息。

非静默授权的意思是需要用户去操作,点击同意按钮,也就是说,如果产品要求是非静默授权,那么前端会弹起用户授权的按钮,待用户同意之后,就可以获取到用户的openId,个人信息,关注信息等相关内容。

注:静默授权和非静默授权的区别在于调用的接口的scope字段是snsapi_base还是snsapi_userinfo

三、登录流程

明白了unionid和openid、静默授权和非静默授权,我们也是时候该看看登录的流程了。

从上图中我们可以看到,过程并不复杂:

首先,前端会访问微信的授权地址:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_base&state=1#wechat_redirect

其中:

  • appid:是应用的appid
  • redirect_uri:是指回跳的url
  • response_type:只写code
  • scope:表示授权的作用域,多个可以用逗号隔开,snsapi_base表示静默授权,snsapi_userinfo表示非静默授权
  • state:用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

第二步:这样我们在跳转回来的url就可以截取到回传的参数code,这时我们就可以用这个code去获取access_token和openid

// 请求url(Get)
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

其中:

  • appid:应用的appid,
  • secret: 应用密钥AppSecret,
  • code:上一步中获取到的code
  • grant_type:值为authorization_code

这样返回值中,我们可以拿到access_token和openid等信息。返回的数据如下:

名称类型说明
access_tokenStringaccess_token
expires_inintaccess_token有效时间
refresh_tokenStringrefresh_token
openidStringopen_id
scopeString授权作用域

第三步:我们有了access_token和openid就可以去获取用户信息了。

// 请求url(Get)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

 其中:

  • access_token:上一步的access_token
  • openid:上一步的openid

返回值包括有用户手机号等:

名称类型说明
openidStringopen_id
unionidStringunion_id
nicknameString用户昵称
sexint性别
provinceString
cityString城市
countryString国家
headimgurlString用户头像
privilegeArray用户权限

 到此登录主流程走完。为什么说是主流程呢?因为登录的方式不同,但是主要是这样的,比如说pc端的扫码登录也是这样,不过是要把所扫的二维码的地址配置成获取code链接。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值