微信小程序 登录实例详解
发布时间 - 2026-01-10 22:33:39 点击率:次微信小程序登录

一. 小程序不支持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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel如何使用.env文件管理环境变量?(最佳实践)
北京网站制作的公司有哪些,北京白云观官方网站?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何在橙子建站中快速调整背景颜色?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
香港网站服务器数量如何影响SEO优化效果?
如何正确选择百度移动适配建站域名?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
用v-html解决Vue.js渲染中html标签不被解析的问题
如何快速查询网址的建站时间与历史轨迹?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
专业商城网站制作公司有哪些,pi商城官网是哪个?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何在万网自助建站平台快速创建网站?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
使用Dockerfile构建java web环境
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在腾讯云服务器上快速搭建个人网站?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
什么是javascript作用域_全局和局部作用域有什么区别?
网站制作壁纸教程视频,电脑壁纸网站?
制作企业网站建设方案,怎样建设一个公司网站?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
如何实现javascript表单验证_正则表达式有哪些实用技巧
Bootstrap整体框架之CSS12栅格系统
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
手机软键盘弹出时影响布局的解决方法
如何在IIS中配置站点IP、端口及主机头?
微信小程序 闭包写法详细介绍
浅谈javascript alert和confirm的美化
如何在阿里云高效完成企业建站全流程?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Python自动化办公教程_ExcelWordPDF批量处理案例
php json中文编码为null的解决办法
Android使用GridView实现日历的简单功能
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
如何破解联通资金短缺导致的基站建设难题?
微信小程序 wx.uploadFile无法上传解决办法
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Android 常见的图片加载框架详细介绍
如何用西部建站助手快速创建专业网站?
Python并发异常传播_错误处理解析【教程】

