微信小程序用户登录前后台详解

来源:互联网 发布:苗勒管永存综合征 知乎 编辑:程序博客网 时间:2024/05/17 22:46

PS:本文前台默认是小程序代码,后台语言默认是PHP

一. 前台

 wx.login({      success: function(res) {           if (res.code) {                //获取用户信息                wx.getUserInfo({                     success: function (msg){                          //发起网络请求                         wx.request({                              url: 'https://test.com/onLogin.php',                              method: 'POST',                              header: {                                   // 'content-type': 'application/json'                                   'content-type': 'application/x-www-form-urlencoded'                              },                              data: {                                   code: res.code,                                   encryptedData: msg.encryptedData,                                   iv: msg.iv                              },                              success: function (data){                                   console.log(data);                              }),                              fail: function (res) {                                   console.log(res)                              }                         })                    }               })          } else {              console.log('获取用户登录态失败!' + res.errMsg)          }    }});

代码详解:
1. wx.login返回的res如下图
这里写图片描述
code为登录凭证,使用一次后失效
2. wx.getUserInfo返回的msg如下图
这里写图片描述
msg里的encryptedData和iv都非常重要的敏感信息,后面讲后台接口时会讲到
3. data为我们后台登录接口返回的数据(业务数据)

二. 后台

  1. 第一步,requier wxBizDataCrypt.php 文件,官方文件点我下载
  2. 通过code 换取 session_key, 会话密钥,按照官方文档来即可,接口地址:

    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code该返回的是包含openid和unionid的json字符串(unionid机制见文末解析),转换成数组格式如下图

    错误时返回的json包如下,

    {"errcode": 40029,"errmsg": "invalid code"}
  3. 登录验证

    $pc = new WXBizDataCrypt($appid, $sessionKey);$errCode = $pc->decryptData($encryptedData, $iv, $data );1. encryptedData和iv为前台传过来的参数(密文)2. 若$errCode !=0 则验证失败,接口应该返回失败数据3. $data为解密后的用户基本信息,json格式,转换数组后如下图

    这里写图片描述

  4. 登录验证通过后,就可以拿到用户的openid了(多平台应该是取unionid),进行查找数据库的操作,获取用户在另外平台上的数据了
  5. 末尾返回的数据就是上面前台的代码详解里的data参数啦

openid与unionid

  1. 同一用户对同一应用(公众号、小程序等)的openid是相同的
  2. 不同用户对不同应用的openid是不同的
  3. 同一个微信开放平台帐号下的应用,用户的unionid是唯一的
  4. 不同应用若想获取同一用户在其他应用数据,应先根据unionid获取用户在该平台的openid,然后根据openid获取相应数据
  5. 更多详情参考官方文档
原创粉丝点击