概述

行为验证 PHP SDK提供基于PHP框架的demo。

开发环境

条目
兼容性 php5.2+,php7
依赖 curl

资源导航

条目
产品结构流程 通讯流程
SDK项目地址 gt3-php-sdk

安装 PHP SDK

下载SDK

使用命令从Github导入完整项目

git clone https://github.com/GeeTeam/gt3-php-sdk.git

手动下载压缩包文件

Github: gt3-php-sdk下载.zip文件

引入SDK

在您的项目中使用以下代码导入sdk

require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';

配置密钥,修改请求参数

配置密钥

极验管理后台获取您的公钥(id)和私钥(key), 并在代码中配置。配置文件路径如下:

/config/config.php

修改请求参数(可选)

名称 说明
user_id 用户标识,若担心用户信息风险,可作预处理(如哈希处理)再提供
client_type 客户端类型,web(pc浏览器),h5(手机浏览器,包括webview),native(原生app),unknown(未知)
ip_address 客户端请求您服务器的ip地址,unknow表示未知

接口示例

初始化(API1),获取流水标识并设置状态码

require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';
require_once dirname(dirname(__FILE__)) . '/config/config.php';
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
session_start();
$data = array(
"user_id" => "test", # 网站用户id
"client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
"ip_address" => "127.0.0.1" # 请在此处传输用户请求验证时所携带的IP
);
$status = $GtSdk->pre_process($data, 1);
$_SESSION['gtserver'] = $status;
$_SESSION['user_id'] = $data['user_id'];
echo $GtSdk->get_response_str();

注意:初始化结果标识status(status=1表示初始化成功,status=0表示宕机状态)需要用户保存,在后续二次验证时会取出并进行逻辑判断。本SDK demo中使用session来存取status。

二次验证(API2),包括正常流程和宕机情况

require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';
require_once dirname(dirname(__FILE__)) . '/config/config.php';
session_start();
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
$data = array(
"user_id" => $_SESSION['user_id'], # 网站用户id
"client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
"ip_address" => "127.0.0.1" # 请在此处传输用户请求验证时所携带的IP
);
if ($_SESSION['gtserver'] == 1) { //服务器正常
$result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data);
if ($result) {
echo '{"status":"success"}';
} else {
echo '{"status":"fail"}';
}
} else { //服务器宕机,走failback模式
if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) {
echo '{"status":"success"}';
} else {
echo '{"status":"fail"}';
}
}

注意:当取出status=0时表示极验宕机,此时流程进入failback模式,后续逻辑都是在您的服务器完成,不会再向极验服务器发送网络请求。本SDK demo中,对于failback模式,只对请求参数做了简单的校验,您也可以自行设计。

运行demo

将整个demo上传到开发环境的工作根目录,并运行启动项目。

在浏览器中访问http://127.0.0.1/gt3-php-sdk/static/login.html即可看到demo界面。

二次验证不通过处理方式

  1. sdk内部逻辑问题,检查读取session是否正常,代码是否走到向极验发送请求的部分,检查极验响应的返回值。
  2. 重复提交问题,该向极验发起的二次验证接口只能生效一次。
  3. challenge不一致,要保证challenge在整个流程的一致性,可能客户自己修改代码导致逻辑混乱使得challenge和此次流程未一一对应。
  4. 检查sdk中gt和key是否正确,参照demo要保证传参的正确性。
  5. 客户可提供challenge给极验助手,查询日志(是否收到二次验证请求,响应结果,异常原因等)