掃碼關注公眾號,獲取驗證碼,填入驗證碼登錄
現在有很多不愿意花錢驗證實現掃碼登錄 有多種原因
實現的門檻高以及不想花錢,想白嫖 其實或一個邏輯去思考
如果要求不是太高,可以實現掃碼關注獲取驗證碼
一,官方自帶公眾號模塊,但是大部分功能需要認證,可以不管 主要實現獲取驗證碼
二,關注自動回復驗證碼,可以用自帶的驗證碼功能來做 找到微信模塊index.class文件
在文本回復哪里,寫入一句判斷列如:
if($arr['content'] == '登錄'){ return $this->_replytext($this->check_code()); }
如果用戶回復登錄關鍵詞則執行 回復驗證碼PHP代碼
執行的PHP代碼可以這樣寫 加載系統類 調用系統類代碼 并輸出
$code = yzm_ ::load_sys_class('code'); $code->get_code() return $wxConfig;
所以打開公眾號就有現在的效果 列如:
三,因為驗證的輸出與驗證是需要開啟$_SESSION而且要在頁面上才能實現
會出現發出的驗證碼一直提示為錯誤 那么我們就需要一個臨時存儲的數據表
字段就需要id code token inputime status
四,微信模塊index.class文件寫 回復驗證碼并插入
$data['code'] = $code->get_code(); $data['status'] = 1; $data['inputtime'] = SYS_TIME; $data['token'] = $this->msgobj->FromUserName; D('code')->insert($data);
五,現在驗證時間都存在臨時表里面了 那怎么用呢 我們需要綁定公眾號 分析邏輯
需要獲取用戶ID 以及微信模塊插入儲存的token
PHP語句可以這樣寫 查找剛剛插入的驗證碼 并重新插入member_authorization
$arr['token'] = $data['token']; $arr['userid'] = intval(get_cookie('_userid')); $arr['inputtime'] = SYS_TIME; $arr['authname'] = 'wx'; D('member_authorization')->insert($arr, true, false);
現在數據都有了 用戶ID 用戶的token 都有了
六,判斷是否綁定公眾號,查詢 member_authorization 表 條件是查詢userid
如果有數據則綁定了,如果沒有那就是沒有綁定 寫一個函數判斷一下
function get_authorization($userid,$authname) { $data = D('member_authorization')->where(array('userid' => $userid,'authname'=>$authname))->find(); if($data){ return $data['userid']; } else{ return''; } }
七,現在驗證碼 綁定我們都有了 接下來判斷驗證那碼
通過前端傳來的驗證碼 我們查詢是否有此驗證碼 如果沒有驗證碼就是錯的 如果查詢不到那也是錯的
就不能執行 注意格式化大小寫
if(empty($data['code']) || strtolower($code)!=$data['code'])
八,判斷時間是否過期 官方自帶的驗證碼沒有過期一說,只有正確或者錯誤 所以我們在上一步中插入了
驗證碼時間 如果驗證碼大于現在的時間 那就是沒有過期 如果小于 就是過期了
if($starttimedelete(array('inputtime'=>$data['inputtime'])); return_json(array('status'=>1,'message'=>'驗證碼已過期!')); }
驗證碼過期或者不正確都不能留著表里 所以在PHP執行完以后刪除該驗證碼
九,都驗證完成后 通過提交的token 查詢當前的用戶ID 沒錯 現在又可以往后查詢
$member_authorization = D('member_authorization')->where(array('token'=>$data['token']))->find();
查詢不到 那就是沒有綁定公眾號或者沒有該用戶
$member = D('member')->where(array('userid'=>$member_authorization['userid']))->find();
如果查詢到了 那么就設置 緩存在本地
$_SESSION['_userid'] = $member['userid']; $_SESSION['_username'] = $member['username']; set_cookie('_userid', $member['userid'], 0, true); set_cookie('_username', $member['username'], 0, true); set_cookie('_groupid', $member['groupid'], 0, true); set_cookie('_nickname', $member['username']);
緩存設置完成后 就直接提示成功,并刪除該驗證碼 提示如果緩存沒有設置成功 那么你需要設置
new_session_start();
最后通過書寫html代碼以及js的交互把功能設置到前臺即可
十,解綁 通過刪除綁定的數據則解綁成功
if(!$_GET['authname']) return_json(array('status'=>1,'message'=>'解除綁定的類型不能為空!')); D('member_authorization')->delete(array('userid'=>$userid,'authname'=>$_GET['authname'])); return_json(array('status'=>0,'message'=>'解除綁定成功!'));
跳過了公眾號的驗證碼獨立的思路來實現登錄
如果你有好的思路可以和我一起探討交流