迅睿CMS框架是一款PHP8高性能·簡單易用的CMS開源開發框架,基于MIT開源許可協議發布,免費且不限制商業使用,是免費開源的產品,以萬端互聯為設計理念,支持的微信公眾號、小程序、APP客戶端、移動端網站、PC網站等多終端式管理系統。
聯系官方銷售客服
1835022288
028-61286886
滑塊驗證碼的插件實現方法
本文使用的是第三方驗證服務 -極驗驗證碼4.0
如使用上有問題可聯系我-將持續免費開源更新
--下載頁可以隱藏當前下載地址(支持上傳文件和輸入文件地址)
去官網申請賬號,本插件基于免費版開發,https://console.geetest.com/sensbot/management
創建業務模塊
新增業務場景
獲取到id和key
3、添加極驗id和key
功能配置
http://www.zbshanke.com/book/17/83.html
2024/07/18 更新 下載頁適配
所有代碼下載鏈接回復后自取:
https://file.xunruicms.com/gwbbs/ueditor/file/202407/17212831392a194d.zip
使用方式:
根目錄解壓縮
主要邏輯文件在dayrui\App\Geetest\Controllers\api.php中
舉例 下載頁驗證實現邏輯:
public function down() { error_reporting(0); // 點擊下載驗證后 會通過get方式獲取到前端極驗的別名 $cname = $_GET['cname']; //這里做一個判斷別名空值 if(!$cname){ \Phpcmf\Service::C()->_json(0, dr_lang('獲取極驗別名為空,請檢查')); } //通過別名獲取極驗后臺錄入的id以及key $captcha_id = dr_geetest($cname, 2); $captcha_key = dr_geetest($cname, 3); // 定義極驗備用服務器地址 $api_servers = [ "http://gcaptcha4.geetest.com", "http://gcaptcha4.geevisit.com", "http://gcaptcha4.gsensebot.com" ]; // 獲取用戶驗證后前端傳過來的驗證流水號參數“這邊是極驗回傳的參數” $lot_number = $_GET['lot_number']; $captcha_output = $_GET['captcha_output']; $pass_token = $_GET['pass_token']; $gen_time = $_GET['gen_time']; // 3. 生成簽名 $sign_token = hash_hmac('sha256', $lot_number, $captcha_key); // 4. 上傳校驗參數到極驗二次驗證接口,校驗用戶驗證狀態 $result = $this->validateCaptcha($api_servers, $captcha_id, $lot_number, $captcha_output, $pass_token, $gen_time, $sign_token); // 5. 根據極驗返回的用戶驗證狀態,進行自定義業務邏輯(這里只寫了驗證通過,不通過則給提示) $status = $result['result']; $reason = $result['reason']; //二次驗證通過 if ($status == 'success') { //通過get方式獲取前端下載頁地址 $currentUrl = \Phpcmf\Service::L('input')->get('currentUrl'); //通過PHP 內置的 parse_url 函數,獲取?號之后的代碼 “s=api&c=file&m=down&id=fec5ebe1ba6e6d5863ad6aa569cd9078” $queryString = parse_url($currentUrl, PHP_URL_QUERY); //arse_str函數,是把后面的地址,解析成一個數組 “s=api c=file...” parse_str($queryString, $params); //把“id=fec5ebe1ba6e6d5863ad6aa569cd9078”賦值給id,下面是官方的一個讀取附件的代碼 $id = $params['id']; //判斷 $id 是否是數字 if (is_numeric($id)) { //純數字就是你跳轉過來的內容頁的id $rt = [ 'id' => $id, 'name' => dr_safe_replace(\Phpcmf\Service::L('input')->get('name')), ]; } //判斷是否32位的字符串 “id=fec5ebe1ba6e6d5863ad6aa569cd9078” elseif (strlen((string)$id) == 32) { //是的話就找緩存文件(上傳文件都是有一個緩存文件存儲) $rt = \Phpcmf\Service::L('cache')->get_auth_data('down-file-'.$id); if (!$rt) { $this->_msg(0, dr_lang('此附件下載鏈接已經失效')); } } //如果都不是,直接返回id else { $rt = [ 'id' => dr_safe_replace(urldecode($id)), 'name' => dr_safe_replace(\Phpcmf\Service::L('input')->get('name')), ]; } //然后通過把上面獲取到的id賦值 $id = trim($rt['id']); //通過上傳文件緩存獲取對應的url下載鏈接 $data = \Phpcmf\Service::L('cache')->get_file('attach-info-'. $id, 'attach'); 判斷是否有文件緩存文件 if($data){ //有的話返回出緩存文件內的url地址 $url = $data['url']; }else{ //如果沒有的話直接返回id(這個位置是根據官方附件獲取邏輯寫的,沒有獲取緩存文件的地址,代表可能是你手動輸入的地址,而這里的id會直接獲取到文件下載地址) $url = $rt['id']; } // 獲取驗證成功后的 URL 返回后前端使用ajax獲取下載地址 echo sprintf('{"status":"%s","url":"%s"}', $status, $url); } else { // 在驗證失敗時執行的代碼,只返回狀態碼 echo sprintf('{"status":"%s","reason":"%s"}', $status, $reason); } }
其他自己開發業務,只需要自己中間驗證成功后寫api,前端回傳即可
public function test() { error_reporting(0); // 點擊下載驗證后 會通過get方式獲取到前端極驗的別名 $cname = $_GET['cname']; //這里做一個判斷別名空值 if(!$cname){ \Phpcmf\Service::C()->_json(0, dr_lang('獲取極驗別名為空,請檢查')); } //通過別名獲取極驗后臺錄入的id以及key $captcha_id = dr_geetest($cname, 2); $captcha_key = dr_geetest($cname, 3); // 定義極驗備用服務器地址 $api_servers = [ "http://gcaptcha4.geetest.com", "http://gcaptcha4.geevisit.com", "http://gcaptcha4.gsensebot.com" ]; // 獲取用戶驗證后前端傳過來的驗證流水號參數“這邊是極驗回傳的參數” $lot_number = $_GET['lot_number']; $captcha_output = $_GET['captcha_output']; $pass_token = $_GET['pass_token']; $gen_time = $_GET['gen_time']; // 3. 生成簽名 $sign_token = hash_hmac('sha256', $lot_number, $captcha_key); // 4. 上傳校驗參數到極驗二次驗證接口,校驗用戶驗證狀態 $result = $this->validateCaptcha($api_servers, $captcha_id, $lot_number, $captcha_output, $pass_token, $gen_time, $sign_token); // 5. 根據極驗返回的用戶驗證狀態,進行自定義業務邏輯(這里只寫了驗證通過,不通過則給提示) $status = $result['result']; $reason = $result['reason']; //二次驗證通過 if ($status == 'success') { //自己的業務代碼 } else { // 在驗證失敗時執行的代碼,只返回狀態碼 echo sprintf('{"status":"%s","reason":"%s"}', $status, $reason); } }
2024/07/18 更新 下載頁適配
所有代碼下載鏈接回復后自取:
使用方式:
根目錄解壓縮
主要邏輯文件在dayrui\App\Geetest\Controllers\api.php中
舉例 下載頁驗證實現邏輯:
其他自己開發業務,只需要自己中間驗證成功后寫api,前端回傳即可