Categorygithub.com/geeteam/gt3-golang-sdk
modulepackage
0.0.0-20200116043922-446ca8a507d2
Repository: https://github.com/geeteam/gt3-golang-sdk.git
Documentation: pkg.go.dev

# README

GT3-GOLang—SDK

概述

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

集成

安装

直接试用命令行进行安装

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)
}

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

二次验证(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