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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39702981/article/details/84643986

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

一. 前端

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,openid,unionid 会话密钥,按照官方文档来即可,接口地址:
    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

返回的是包含openid和unionid的json字符串(多平台应该是取unionid,进行查找数据库的操作,获取用户在另外平台上的数据了,unionid机制见文末解析),转换成数组格式如下图
 


错误时返回的json包如下,

扫描二维码关注公众号,回复: 4443434 查看本文章

    {"errcode": 40029,"errmsg": "invalid code"}

3. 获取用户详细信息
$pc = new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );

encryptedData和iv为前台传过来的参数(密文)
若$errCode !=0 则验证失败,接口应该返回失败数据
$data为解密后的用户基本信息,json格式,转换数组后如下图 
 
通过后就获取到用户详细信息了
末尾返回的数据就是上面前端的代码详解里的data参数啦
openid与unionid
同一用户对同一应用(公众号、小程序等)的openid是相同的
不同用户对不同应用的openid是不同的
同一个微信开放平台帐号下的应用,用户的unionid是唯一的
不同应用若想获取同一用户在其他应用数据,应先根据unionid获取用户在该平台的openid,然后根据openid获取相应数据
更多详情参考官方文档
 

原文链接:https://blog.csdn.net/zhoubo5692/article/details/78226685/

猜你喜欢

转载自blog.csdn.net/qq_39702981/article/details/84643986