PHP微信PC二维码登陆的实现思路
其中的$id,就是对应的二维码的值,也就是之前我们生成的那个id(其实我们为了区分Scan中的各种事件,特意将id所在的login_qrcode表自增id从1000000000开始)。 然后看if后面的处理: field('id')->where(array('third_id' => $openid))->find()) { $data=array( 'id'=>$id,'text'); }如果满足条件,并且存在该openid的用户,则更新login_qrcode表,将uid改为用户id。(这里就是关键,为什么更新了id对应的那条数据的uid为用户id就算登录了呢)。 3、继续看PC端,PC段在获取1中的二维码之后并没有停止请求,而是轮训了一个方法:
*/
public function ajaxWechatLogin(){
for ($i = 0; $i < 6; $i++) {
$database_login_qrcode = model('LoginQrcode');
$condition_login_qrcode['id'] = input('get.qrcode_id');
if(empty($condition_login_qrcode['id'])){
return $this->returnJson('未获取到qrcode_id!',0);
}
$now_qrcode = $database_login_qrcode->field('`uid`')->where($condition_login_qrcode)->find();
if (!empty($now_qrcode['uid'])) {
if ($now_qrcode['uid'] == -1) {
$data_login_qrcode['uid'] = 0;
$database_login_qrcode->where($condition_login_qrcode)->isUpdate(true)->save($data_login_qrcode);
return $this->returnJson('请在微信公众号点击授权登录!',0);
}
$database_login_qrcode->where($condition_login_qrcode)->delete();
$result = model('Member')->autologin('id',$now_qrcode['uid']);
if (empty($result['error_code'])) {
return $this->returnJson('登录成功!',$result['user']);
} else if ($result['error_code'] == 1001) {
return $this->returnJson('没有查找到用户,请重新扫描二维码!',0);
} else if ($result['error_code']) {
return $this->returnJson('登陆失败!',0);
}
}
if ($i == 5) {
return $this->returnJson('登陆失败',0);
}
sleep(3);
}
}
可以看到上面方法获取了qrcode_id,也就是1中返回的那个id,另一个返回就是二维码了。 轮训过程就是用这个id不断查看login_qrcode表的状态,如果存在了uid那么证明登陆成功!也就可以用其中的uid自动登录了。 4、以上 关键就是login_qrcode这个中间表起了桥梁的作用,一边用来生成二维码,一边用来在微信端插入用户uid,同时PC端检测表的状态变化从而实现了登录。 三、代码仓库直接clone即可,有问题提issue或者单独私我 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |