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

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如下图

Fpzlau4iizC6buxemmQ2UF1eW6Hs

code为登录凭证,使用一次后失效

2. wx.getUserInfo返回的msg如下图

FpvzodYv4bi0q5NgvFbv9BAlaICO

msg里的encryptedData和iv都非常重要的敏感信息,后面讲后台接口时会讲到

3. data为我们后台登录接口返回的数据(业务数据)

二. 后台

第一步,requier wxBizDataCrypt.php 文件,官方文件点我下载

通过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机制见文末解析),转换成数组格式如下图

FgdQymUz2xPXb31nczlD_febTtr0

错误时返回的json包如下,

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

登录验证

$pc = new WXBizDataCrypt($appid, $sessionKey);

$errCode = $pc->decryptData($encryptedData, $iv, $data );

1. encryptedData和iv为前台传过来的参数(密文)

2. 若$errCode !=0 则验证失败,接口应该返回失败数据

3. $data为解密后的用户基本信息,json格式,转换数组后如下图

FmgNZVcfEBEQ2XjXq96ZWYEUfL_K

登录验证通过后,就可以拿到用户的openid了(多平台应该是取unionid),进行查找数据库的操作,获取用户在另外平台上的数据了

末尾返回的数据就是上面前台的代码详解里的data参数啦

openid与unionid

同一用户对同一应用(公众号、小程序等)的openid是相同的

不同用户对不同应用的openid是不同的

同一个微信开放平台帐号下的应用,用户的unionid是唯一的

不同应用若想获取同一用户在其他应用数据,应先根据unionid获取用户在该平台的openid,然后根据openid获取相应数据

更多详情参考官方文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值