概述
当用户在前端界面通过验证码后,会产生一批与验证码相关的参数,用户的业务请求带上这些参数,后台业务接口再将这些参数上传到极验二次校验接口,确认该用户本次验证的有效性。
二次校验接口
1.请求参数
参数名 |
类型 |
说明 |
lot_number |
string |
验证流水号 |
captcha_output |
string |
验证输出信息 |
pass_token |
string |
验证通过标识 |
gen_time |
string |
验证通过时间戳 |
captcha_id |
string |
验证 id |
sign_token |
string |
验证签名 |
2.响应参数
参数名 |
类型 |
说明 |
result |
string |
二次校验结果 |
reason |
string |
校验结果说明 |
captcha_args |
dict |
验证输出参数 |
响应参数返回示例
{ "result": "success", "reason": "", "captcha_args": { "used_type": "slide", "user_ip": "127.0.0.1", "lot_number": "4dc3cfc2cdff448cad8d13107198d473", "scene": "反爬虫", "referer": "http://127.0.0.1:8077/" } }
{ "result": "fail", "reason": "pass_token expire", "captcha_args": { ... } }
{ "status": "error", "code": "-50005", "msg": "illegal gen_time", "desc": { "type": "defined error" } }
|
接入示例代码
def post(self): captcha_id = '647f5ed2ed8acb4be36784e01556bb71' captcha_key = 'b09a7aafbfd83f73b35a9b530d0337bf' api_server = 'http://gcaptcha4.geetest.com'
lot_number = self.get_argument('lot_number', '') captcha_output = self.get_argument('captcha_output', '') pass_token = self.get_argument('pass_token', '') gen_time = self.get_argument('gen_time', '')
lotnumber_bytes = lot_number.encode() prikey_bytes = captcha_key.encode() sign_token = hmac.new(prikey_bytes, lotnumber_bytes, digestmod='SHA256').hexdigest()
query = { "lot_number": lot_number, "captcha_output": captcha_output, "pass_token": pass_token, "gen_time": gen_time, "sign_token": sign_token, } url = api_server + '/validate' + '?captcha_id={}'.format(captcha_id) try: res = requests.post(url, query) assert res.status_code == 200 gt_msg = json.loads(res.text) except Exception as e: gt_msg = {'result': 'success', 'reason': 'request geetest api fail'} if gt_msg['result'] == 'success': self.write({'login': 'success', 'reason': gt_msg['reason']}) else: self.write({'login': 'fail', 'reason': gt_msg['reason']})
|