小程序登录逻辑
![](https://i-blog.csdnimg.cn/blog_migrate/7c84252924ac0b10ae1a6c7a722d2aa2.png)
①通过uni.login()接口获取小程序用户的code值
uni.login({
success(res) { // // {errMsg: "login:ok", code: "033vPJhy1W2RH906Y0gy1B5Chy1vPJhO"}
console.log(res)
if (res.code) {
// 发起网络请求
wx.request({
url: 'http://wuxinzhe.top/test/test.php',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
}) |
②服务器端通过调用code2session接口通过code换取session_key(只能用一个code调取一次)和用户的openid
https://api.weixin.qq.com/sns/jscode2session?appid={$appId}&secret={$secret}&js_code={$code}&grant_type=authorization_code
php代码
<?php
$appId="wxaf151ae9618b2911";
$secret="d9ba0f5c57905040d8af7d71aa77af9e";
$code="033VjYWj0hgvmq1KWG0k0G9ZWj0VjYWC";
$url="https://api.weixin.qq.com/sns/jscode2session?appid={$appId}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
// create curl resource
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
//请求接口成功,返回用户的openid和session_key
//{"session_key":"gwKsCu8np9ps3a89bgnoRQ==","expires_in":7200,"openid":"orwIJ0fjAUInTl-7kGBkdVRw4MKM"}
var_dump($output);
//存入session中逻辑处理
//返回给小程序前端
curl_close($ch);
?> |
③小程序前端中,收到服务器端返回的信息,自定义登录状态,存入缓存中,uniapp中调用uni.setStorageSync(KEY,DATA)方法.与openid和session_key关联
④每次请求之前,获取缓存中的数据uni.getStorageSync(KEY),携带着状态去请求,服务器端查询openid和session_key,返回业务数据