微信小程序登录

一. 小程序不支持cookie会话
1. 通过传递与检验3rd_session来保持会话
2. 3rd_session可以执行‘`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`该命令生成
3. 使用Redis或者数据库存储session
4. 生成的3rd_session发送给客户端,写入storage
5. 客户端的每次请求必须带上3rd_session
二、加密数据解码
1. $iv,$code是被加密过的数据,由于请求过程中因为编码原因+号变成了空格,所以我们需要用下面的方法转换回来
function define_str_replace($data){
return str_replace(' ','+',$data);
}
三、例子:
php
// 微信登录
public function weixin_login(){
$session_db=D('Session');
$session_id=I('get.sessionid','');
$session=$session_db->getSession($session_id);
if( !empty( $session ) ){
$this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]);
}else{
$iv=define_str_replace(I('get.iv')); //把空格转成+
$encryptedData=urldecode(I('get.encryptedData')); //解码
$code=define_str_replace(I('get.code')); //把空格转成+
$msg=D('Weixin')->getUserInfo($code,$encryptedData,$iv); //获取微信用户信息(openid)
if($msg['errCode']==0){
$open_id=$msg['data']->openId;
$users_db=D('Users');
$info=$users_db->getUserInfo($open_id);
if(!$info||empty($info)){
$users_db->addUser(['open_id'=>$open_id,'last_time'=>['exp','now()']]); //用户信息入库
$info=$users_db->getUserInfo($open_id); //获取用户信息
$session_id=`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`; //生成3rd_session
$session_db->addSession(['uid'=>$info['id'],'id'=>$session_id]); //保存session
}
if($session_id){
$this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]); //把3rd_session返回给客户端
}else{
$this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_db->getSid($info['id'])]);
}
}else{
$this->ajaxReturn(['error_code'=>'用户信息获取失败!']);
}
}
}
获取微信信息模型(包括信息解密,官方例子点击下载)
require_once ABS_APP_PATH.'/Addon/Aes/wxBizDataCrypt.php';
class WeixinModel{
// 获取微信的用户信息(openid)
public function getUserInfo($code,$encryptedData,$iv){
$appid=C('appid');
$secret=C('secret');
$grant_type='authorization_code';
$url='https://api.weixin.qq.com/sns/jscode2session';
$url= sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$url,$appid,$secret,$code,$grant_type);
$user_data=json_decode(file_get_contents($url));
$session_key= define_str_replace($user_data->session_key);
$data="";
$wxBizDataCrypt=new \WXBizDataCrypt($appid,$session_key);
$errCode=$wxBizDataCrypt->decryptData($encryptedData,$iv,$data);
return ['errCode'=>$errCode,'data'=>json_decode($data),'session_key'=>$session_key];
}
}
javascript
getUserInfo: function(cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" && cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.login({
success: function(r) {
wx.getUserInfo({
success: function(res) {
that.login({
code: r.code,
iv: res.iv,
encryptedData: encodeURIComponent(res.encryptedData),
})
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
login: function(param) {
wx.request({
url: this.requestUrl('Index/weixin_login'),
data: param,
header: {
'content-type': "application/json",
},
success: function(res) {
var data = JSON.parse(res.data.trim());
wx.setStorageSync('sessionid', data.sessionid);
}
})
},
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 微信小程序
# 登录
# 登录详解
# 登录实例
# 微信小程序实战之登录页面制作(5)
# 微信小程序用户授权
# 以及判断登录是否过期的方法
# 微信小程序获取手机号授权用户登录功能
# 微信小程序实现授权登录
# 一步步教会你微信小程序的登录鉴权
# 微信小程序 登录的简单实现
# 微信小程序 后台登录(非微信账号)实例详解
# 微信小程序 如何保持登录状态
# 微信小程序静默登录的实现代码
# 一文教会你微信小程序如何实现登录
# 客户端
# 转成
# 希望能
# 不支持
# 点击下载
# 谢谢大家
# 需要用
# 过程中
# 变成了
# 发送给
# Session
# session_db
# weixin_login
# public
# str_replace
# return
# data
# php
# define_str_replace
# nbsp
相关文章:
音响网站制作视频教程,隆霸音响官方网站?
如何撰写建站申请书?关键要点有哪些?
深入理解Android中的xmlns:tools属性
如何通过cPanel快速搭建网站?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何高效配置IIS服务器搭建网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
上海网站制作开发公司,上海买房比较好的网站有哪些?
建站VPS能否同时实现高效与安全翻墙?
如何安全更换建站之星模板并保留数据?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
建站上传速度慢?如何优化加速网站加载效率?
网站制作企业,网站的banner和导航栏是指什么?
如何在建站主机中优化服务器配置?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何实现建站之星域名转发设置?
如何设置并定期更换建站之星安全管理员密码?
再谈Python中的字符串与字符编码(推荐)
清除minerd进程的简单方法
如何在建站之星绑定自定义域名?
c# 在ASP.NET Core中管理和取消后台任务
济南网站制作的价格,历城一职专官方网站?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
制作门户网站的参考文献在哪,小说网站怎么建立?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何通过商城自助建站源码实现零基础高效建站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在服务器上三步完成建站并提升流量?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
如何选择高性价比服务器搭建个人网站?
如何在宝塔面板中修改默认建站目录?
北京制作网站的公司,北京铁路集团官方网站?
小型网站制作HTML,*游戏网站怎么搭建?
已有域名和空间,如何快速搭建网站?
个人网站制作流程图片大全,个人网站如何注销?
如何在IIS中新建站点并配置端口与IP地址?
如何在VPS电脑上快速搭建网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
Python路径拼接规范_跨平台处理说明【指导】
建站主机服务器选型指南与性能优化方案解析
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
如何在景安云服务器上绑定域名并配置虚拟主机?
*请认真填写需求信息,我们会在24小时内与您取得联系。