概述

行为验证 Python SDK目前提供基于FlaskTornadoDjango框架的demo。

开发环境

条目
兼容性 兼容python2和python3,建议python2.7+
依赖库 Web框架库(如djangotornado)等
您可以使用pip install -r requirement.txt 一键安装所有依赖

资源导航

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

安装 Python SDK

下载SDK

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

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

手动下载压缩包文件

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

引入SDK

您也许需要使用sudo命令才能执行下列命令

确认您已经成功安装所有环境后,使用以下命令即可一键安装SDK。

python setup.py install

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

from geetest import GeetestLib

配置密钥,修改请求参数

配置密钥

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

  • Django:/demo/django_demo/app/views.py
  • Flask:/demo/flask_demo/start.py
  • Tornado:/demo/tornado_demo/start.py

修改请求参数(可选)

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

接口示例

以下代码以基于Tornado框架的demo为例

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

class PcGetCaptchaHandler(SessionBaseHandler):
def get(self):
user_id = 'test'
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
status = gt.pre_process(user_id, JSON_FORMAT=0, ip_address="127.0.0.1")
if not status:
status = 2
self.session[gt.GT_STATUS_SESSION_KEY] = status
self.session["user_id"] = user_id
response_str = gt.get_response_str()
self.write(response_str)

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

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

class PcValidateHandler(SessionBaseHandler):
def post(self):
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
challenge = self.get_argument(gt.FN_CHALLENGE, "")
validate = self.get_argument(gt.FN_VALIDATE, "")
seccode = self.get_argument(gt.FN_SECCODE, "")
status = self.session[gt.GT_STATUS_SESSION_KEY]
user_id = self.session["user_id"]
if status == 1:
result = gt.success_validate(challenge, validate, seccode, user_id, JSON_FORMAT=0)
else:
result = gt.failback_validate(challenge, validate, seccode)
self.session["user_id"] = user_id
result = "<html><body><h1>登录成功</h1></body></html>" if result else "<html><body><h1>登录失败</h1></body></html>"
self.write(result)

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

运行 demo

您也许需要使用sudo命令才能执行下列命令

Flask demo 运行

命令行进入flask_demo文件夹路径,执行命令:

$ python start.py

在浏览器中访问http://localhost:5000即可看到demo界面。

Tornado demo运行

命令行进入tornado_demo文件夹路径,执行命令:

$ python start.py

在浏览器中访问http://localhost:8088即可看到demo界面

Django demo运行

命令行进入tornado_demo文件夹路径,执行命令:

$ python manage.py runserver 0.0.0.0:8000

在浏览器中访问http://localhost:8000即可看到demo界面

二次验证不通过处理方式

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