概述

行为验证 golang sdk提供基于 net/http 的DEMO

资源导航

条目
产品结构流程 通讯流程
SDK项目地址 https://github.com/GeeTeam/gt3-golang-sdk

安装 golang SDK

下载SDK

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

go get github.com/GeeTeam/gt3-golang-sdk

接口示例

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

func registerGeetest(w http.ResponseWriter, r *http.Request) {

geetest := geetest.NewGeetestLib(captchaID, privateKey, 2 * time.Second)
status, response := geetest.PreProcess("", "")
session, _ := store.Get(r, "geetest")
session.Values["geetest_status"] = status
session.Save(r, w)
w.Write(response)
}

注意:gtServerStatus和success字段是表示api1接口的状态,1表示正常,0表示异常,这两个字段的含义是对应的。
gtServerStatus字段是api1接口存入到session中,api2接口会从session取出这个值并进行后续判断,1就走正常二次验证逻辑,0就走宕机模式逻辑。
success字段是api1接口返回给前端的值,控制前端的表现形式,1就展现正常页面,0就展示宕机页面。

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

func validateGeetest(w http.ResponseWriter, r *http.Request) {
var geetestRes bool
r.ParseForm()
geetest := geetest.NewGeetestLib(captchaID, privateKey, 2 * time.Second)
res := make(map[string]interface{})
session, _ := store.Get(r, "geetest")
challenge := r.Form.Get("geetest_challenge")
validate := r.Form.Get("geetest_validate")
seccode := r.Form.Get("geetest_seccode")
val := session.Values["geetest_status"]
status := val.(int8)
if status == 1 {
geetestRes = geetest.SuccessValidate(challenge, validate, seccode, "", "")
} else {
geetestRes = geetest.FailbackValidate(challenge, validate, seccode)
}
if geetestRes {
res["code"] = 0
res["msg"] = "Success"
} else {
res["code"] = -100
res["msg"] = "Failed"
}
response, _ := json.Marshal(res)
w.Write(response)
}

注意:

  • 当取出status=0时表示极验宕机,此时流程进入failback模式,后续逻辑都是在您的服务器完成,不会再向极验服务器发送网络请求。本SDK demo中,对于failback模式,只对请求参数做了简单的校验,您也可以自行设计,模拟宕机模式:将验证ID替换为随意一段字符,例如123456789。此时,验证码将进入宕机模式。
  • 此SDK仅支持验证3.0的failback模式,不支持验证2.0的failback模式

运行demo

  1. 进入sdk项目根目录
  2. go run main.go
  3. 在浏览器中访问http://localhost:8888/static/login.html

二次验证不通过处理方式

二次验证不通过的主要原因及排查方法请参考帮助文档的二次验证失败