99国产在线视频有精品视频_国产精品久久久久久亚洲影视 _国产三级日本三级韩国三级在线看_精精国产XXXX视频在线my_乱VODAFONEWIFI熟妇_超碰cao国产精品一区二区_91久久精品青青草原伊人_欧美,一区,日韩,精品

淺聊公眾訂閱號如何實現掃碼獲取驗證碼登錄的思路

1232次瀏覽 更新日期:2023-03-29 14:32:12 分類:談天說地 評論:4

需求

掃碼關注公眾號,獲取驗證碼,填入驗證碼登錄


現在有很多不愿意花錢驗證實現掃碼登錄  有多種原因


實現的門檻高以及不想花錢,想白嫖  其實或一個邏輯去思考


如果要求不是太高,可以實現掃碼關注獲取驗證碼


邏輯分析(YZMCMS為例)

一,官方自帶公眾號模塊,但是大部分功能需要認證,可以不管 主要實現獲取驗證碼


二,關注自動回復驗證碼,可以用自帶的驗證碼功能來做 找到微信模塊index.class文件


在文本回復哪里,寫入一句判斷列如:


if($arr['content'] == '登錄'){
  return $this->_replytext($this->check_code()); 
}


如果用戶回復登錄關鍵詞則執行 回復驗證碼PHP代碼


執行的PHP代碼可以這樣寫 加載系統類 調用系統類代碼 并輸出


$code = yzm_ ::load_sys_class('code');

$code->get_code()

return $wxConfig;


所以打開公眾號就有現在的效果 列如:


image.png


三,因為驗證的輸出與驗證是需要開啟$_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);


五,現在驗證時間都存在臨時表里面了 那怎么用呢  我們需要綁定公眾號 分析邏輯


image.png


需要獲取用戶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的交互把功能設置到前臺即可


image.png

image.png

十,解綁 通過刪除綁定的數據則解綁成功


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'=>'解除綁定成功!'));


總結

跳過了公眾號的驗證碼獨立的思路來實現登錄 


如果你有好的思路可以和我一起探討交流 

我來說兩句
  • yzmcms
    yzmcms 官網認證 2年前
    深有體會,大部分都是伸手黨,不想花錢拿來即用的那種,而開發模板又累又不掙錢,全靠興趣支撐。
    做CMS更是如此,開發CMS付出的時間占據了我的絕大部分時間和精力,全靠幾個插件和授權,除去服務器支出,基本上沒有什么收入,也是全靠興趣堅持了這么多年,盡管如此,還有很多人不保留版權信息,哎,想想都頭疼。。。
    4
    回復
  • oolaile
    oolaile 2年前
    驚了我一身!
    1
    回復
  • 大環境如此,知識收費有新解讀:你的知識,別人收費!弄得我都差點自閉了。
    0
    回復
  • @yzmcms 總有人覺得我們很賺錢,缺不知道辛酸,唉,加油袁總
    0
    回復
作者信息
發布見解
發內容 回頂部