在WeiPHP4.0中,可以在后台开启扫码登录功能,默认是关闭的
![](https://box.kancloud.cn/86313ea34a7dfa76e3aea85f21d109dc_696x400.png)
未开启扫码登录前的效果:
![](https://box.kancloud.cn/9edb27ba1c5d84f1d8dde12c710b83b8_437x441.png)
开启扫码登录前的效果:
![](https://box.kancloud.cn/769d9f67619fac624f26aca35fde7a1b_421x493.png)
除了本系统的运营人员可以扫码登录外,还支持子系统也能使用扫码登录功能。这比较适合于有一个主站,还有多个子站的客户。比如我们WeiPHP官网,体验环境相当于主站,社区论坛,商城等其它产品的体验站点相当于子站。这些站点之间都可以通过扫码登录的方式为用户提供统一登录方式,**不再需要用户重复注册和登录**。
子站要使用扫码登录功能,需要使用API接口与主站进行交互,以获取二维码和用户登录信息,如下图:
![](https://box.kancloud.cn/9efda856d74fd49e6becd9dc1c7d8433_968x700.jpg)
子站集成扫码登录的开发流程
### 生成LoginKey,并换取二维码
~~~
// 生成LoginKey,并放到Cookie中,防止用户重复刷新获取二维码
$key = cookie ( 'LoginKey' );
if (empty ( $key )) {
$key = uniqid ();
cookie ( 'LoginKey', $key );
}
$this->assign ( 'LoginKey', $key );
$main_url = 'http://demo.weiphp.cn/'; // 主站的网址,开发者要替换成自己的网站
// 获取二维码的地址 TODO 待加上access_token
$qr_code = get_data ( $main_url . 'index.php?s=/Home/ScanLoginApi/getQrCode/key/' . $key );
~~~
### 不断询问用户扫码进度
模板HTML的关键代码:
~~~
<!--显示二维码给用户扫描-->
<img src="{$qrcode}" width=250 height=250>
<script type="text/javascript">
$(function(){
//每隔3秒询问下用户是否已扫码,如已扫码,自动跳转到指定页面
setInterval(function(){
$.post("{:U('checkLogin')}",{},function(res){
if(res.status==1){
window.location.href = res.url;
}
});
},3000)});
</script>
~~~
### 完成自动注册和自动登录
后端PHP处理的关键代码:
~~~
function checkLogin() {
$main_url = 'http://demo.weiphp.cn/'; // 主站的网址,开发者要替换成自己的网站
$key = cookie ( 'LoginKey' );
// 通过LoginKey获取用户扫码进度
$user = get_data ( $main_url . 'index.php?s=/Home/ScanLoginApi/checkLogin/key/' . $key );
if (empty ( $user )) { // 用户未扫码,直接返回
exit ( '0' );
}
// 已扫码,获取用户信息
$user = json_decode ( $user, true );
unset ( $user ['uid'] );
// 获取用户ID,如果用户未注册,会自动完成注册
$user ['uid'] = D ( 'Common/Follow' )->init_follow ( $user ['openid'], $user ['token'], false, $user );
// 自动完成登录
D ( 'Common/User' )->autoLogin ( $user );
$return ['status'] = 1;
$return ['url'] = cookie ( '__forward__' );
if (! $return ['url']) {
$return ['url'] = U ( 'Home/Apps/lists' );
} else {
cookie ( '__forward__', null );
}
// 返回跳转地址信息
exit ( json ( $return ) );
}
~~~
- 序言
- 基础
- 安装WeiPHP
- 目录结构
- 错误码分配
- 错误码问答系统
- 入答疑群方法
- 快速入门
- 谈谈开发目标
- 前期准备
- 增加应用
- 编写微信响应代码
- 激动的时刻_体验测试
- 用户
- 用户体系
- 超级管理员
- 运营人员
- 粉丝
- 扫码登录
- 公众号
- 手工绑定
- 一键绑定
- 自定义菜单
- 微信支付
- 微信平台支付配置
- 公众号支付
- 原生扫码支付
- 异步接收支付结果
- 现金红包
- 发放普通红包
- 查询红包记录
- 红包记录数据结构
- 现金支付
- 下发支付
- 查询支付记录
- 现金支付数据结构
- 刷卡支付
- 提交刷卡支付
- 查询刷卡支付记录
- 撤销刷卡支付
- 支付记录数据结构
- API服务
- oauth2.0安全验证
- 后台配置API
- 小程序
- HTTPS部署
- 腾讯云服务器部署
- 阿里云HTTPS部署
- 自发证书HTTPS部署
- openssl升级到1.02
- 自动登录注册
- 短信验证码
- 网络请求
- 上传图片
- 生成事件二维码
- 小程序支付
- 小程序微信支付配置
- 小程序调用支付功能
- 模板消息
- 消息模板配置
- 支付后发模板消息
- 提交表单后发模板消息
- 卡券(会员卡、优惠券)
- 客服
- 与公众号互通
- 微信开放平台
- 一键绑定公众号
- 积分等级
- 积分规则
- 积分操作
- 积分等级数据结构
- 日志
- 后台日志
- 运营日志
- 接口日志
- 调试日志
- 错误日志
- 日志数据结构
- 应用管理
- 应用管理列表
- 新增应用
- 应用开发
- 安装应用
- 模型
- 模型介绍
- 模型管理
- 新增加模型
- 新增加字段
- 列表定义
- 通用视图模板
- 定时任务
- 定时任务介绍
- 配置定时任务
- 开启定时器
- 系统自触发
- window定时器
- Linux定时器
- Mac定时器
- 定时任务数据结构
- 商业应用
- 分销商城
- 教育培训
- 摇红包
- 梦云社区
- 婚庆派
- 部署
- Linux服务器一键安装包部署
- Window集成包部署