微信小程序 登录过程
本文由笔者自己经验所得,不妥之处还望指教:
- 微信代码
- php后端代码
流程
- 小程序请求code
- 小程序请求encryptedData
- 后端请求session_key
- 后端解密
- 小程序收到解密后的数据
小程序请求code
wx.login({
success: function (res) {
var code = res.code
console.info(res)
}
})
res打印结果为
Object { errMsg: “login:ok”,
code: “0132ltkt1BK8S90VtQmt1Eexkt12ltkE”}
小程序请求encryptedData
wx.getUserInfo({
success: function (res) {
var encryptedData = res.encryptedData
var iv = res.iv
}
})
这里我们只需要 encryptedData 和iv
res打印结果为
Object {
errMsg: “getUserInfo:ok”,
rawData:”{“nickName”:”nickname”,”gender”:0,”language”:”zh_CN”…}”,
userInfo: Object,
signature: …”,
encryptData:…
encryptedData:…}
这里取encryptedData
通过服务器获取加密数据
wx.request({
url: 'https://www.xxxx.net/login.php',
data: {
code: code,
encryptedData: encryptedData,
iv: iv
},
method: 'GET',
success: function (res) {
that.globalData.userInfo =JSON.parse(res.data.trim())
cb(that.globalData.userInfo)
}
})
res打印结果为
Object {errMsg: “request:ok”, data: ”{“openId”:”…”,”nick…}}”, statusCode: 200}
这样就获得了解密后数据
php代码
把微信加密解密文件放入目录
include_once "wxBizDataCrypt.php";
$appid = '你的APPID';
$secret = '你的secret';
$code = $_GET['code'];
$encryptedData = $_GET['encryptedData'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.
'&js_code='.$code.'&grant_type=authorization_code');
$data = curl_exec($curl);
curl_close($curl);
$response_data = '';
$session_key = json_decode($data)->session_key;
$wxBizDataCrypt = new WXBizDataCrypt($appid, $session_key);
$errCode=$wxBizDataCrypt->decryptData($encryptedData, $iv, $response_data);
echo $response_data;