ppypp伦理天堂,91手机在线视频,免费在线观看黄色毛片,夜夜穞天天穞狠狠穞AV美女按摩

聯系官方銷售客服

1835022288

028-61286886

投訴 分享 滑塊驗證碼的插件實現方法(開源免費) 3 893
迅睿CMS版本:4.6.2 #上傳文件

滑塊驗證碼的插件實現方法

本文使用的是第三方驗證服務 -極驗驗證碼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);
            }
            
               
        }
    發布的代碼產品可以隨意使用,遵循開源協議即可。 可留言需要的小工具,簡單易用 方便大家的可以免費制作
代码语言