不规范接入问题
未动态加载验证码 JS 会产生那些问题?
1. 接入方式:Web/App 客户端接入验证码时,没有采用动态加载 TJCaptcha.js 的方式,而是通过其他手段规避加载。
2. 安全风险:以上接入方式会导致验证码无法正常更新,对抗能力无法保证,甚至引起误拦截及前端报错。
3. 解决方案:动态引入验证码 JS,详情请参见 Web 客户端接入。
<!-- 验证码程序依赖(必须)。请勿修改以下程序依赖,如通过其他手段规避加载,会导致验证码无法正常更新,对抗能力无法保证,甚至引起误拦截。 --><script src="https://turing.captcha.qcloud.com/TJCaptcha.js"></script>
未接入票据校验会产生那些问题?
1. 接入方式:仅客户端接入了验证码,服务端未接入票据校验。
2. 安全风险:未接入票据校验,会导致黑产轻易伪造验证结果,失去验证码人机对抗效果。
3. 解决方案:服务端完成票据校验接入,详情请参见 接入票据校验(Web 及 App) 、接入票据校验(微信小程序)。
Web/App 客户端接入问题
测试过程中,提示“您的操作过于频繁,请稍后再试”,该如何解决?
这是验证码服务拦截疑似恶意用户的表现。可能是用户在同一网络环境下高频集中地访问同一场景的验证码服务,导致的小规模风控拦截。解决方法如下:
等待10 - 20分钟后重新进行测试。
尝试更换 IP 或 设备再体验。
登录 验证码控制台,进入验证“安全配置”,将恶意拦截等级调至“体验优先”。
接入后没有弹出验证码是什么原因?
1. 登录 验证码控制台,查看对应的 CaptchaAppId 是否开启了智能免验证或者无感验证:
若开启了智能免验证:可信用户访问时,默认不弹出验证问题。若需要弹出验证码查看效果,可以同设备频繁触发验证。在多次触发后,由于频繁访问,会被验证码系统识别为风险用户而弹出验证问题。
若开启了无感验证:所有的访问默认不弹出验证问题,仅在票据校验阶段返回验证结果。
2. 可能的原因是验证码的相关样式被覆盖,导致无法展示。例如在前端接入时:
.tcaptcha-transform{display:none}:导致验证码弹窗被隐藏。
.tcaptcha-transform{margin-left:9999px}:导致验证码弹窗被平移到其他位置。
Android 使用 Web 前端 H5 方式进行接入,调试过程中先弹出空白背景,后弹出验证码页面如何调整?
调试过程中,正常情况下会首先调起 webview 加载网页,然后弹出验证码页面。
如果出现先弹出空白背景,后弹出图形验证页面的现象。形成原因如下:
加载验证码 js 的时间导致白屏。
空白层形成原因是页面没有内容时,加载的 webview 就显示出来,需要等待 ready 事件触发后再进行 webview 展示。
因此,Android 需要先加载页面但不进行展示,等待 ready 回调后,再通知 Android 进行展示。ready 配置说明,请参见 Web 客户端接入-创建验证码对象 文档。
options={ready: function(size){// 与Android通信}}new TencentCaptcha(appId, callback, options);
App 客户端接入验证码显示不完整如何调整?
验证码根据容器宽高进行居中显示,验证码显示不完整可能由于容器本身设置较宽,导致展示的验证码被截断,该情况需要对客户端的弹框进行调整。此外随意加载其他 webview 都可能会出现截断的情况。
验证码以嵌入式方式展示如何配置?
初始化验证码对象时,将 options 提供的配置参数 type 设置为
embed
。new TencentCaptcha(element, CaptchaAppId, callback, {type: 'embed'});
示例代码
<div id="tc"></div><script>//初始化验证码对象,将验证码绑定到id为‘tc’的容器元素中new TencentCaptcha(document.getElementById('tc'),CaptchaAppId,callback,{type:'embed'}).show()</script>
注意
如果使用嵌入式,容器元素在界面里找不到会报错。
微信小程序客户端接入问题
是否支持使用 webview 方式接入微信小程序?
在微信小程序中以内嵌 Web 页面的方式接入验证码服务,提示“不支持引用非业务域名”?
是否支持百度小程序、支付宝小程序等其他小程序接入?
是否支持使用 uni-app 框架接入微信小程序?
微信小程序:使用小程序插件方式进行接入,详情请参见 小程序插件接入。
服务端票据校验接入问题
票据校验接口返回报错如何处理?
错误码 | 返回信息 | 说明 |
10001 | 未开通权限 | 可能原因: |
7 | captcha no match | Randstr 和 Ticket 不匹配。建议重新生成 Randstr、Ticket 进行校验。 |
8 | verify timeout | Ticket票据过期,前端生成Ticket后,有效时长为5分钟。 |
9 | Sequence repeat | Ticket票据被重复校验,建议重新生成 Randstr、Ticket 进行校验。 |
15 | decrypt fail | 以下情况均可导致该错误发生: CaptchaType 不等于9。 Randstr 或 Ticket 所填写的值和前端生成的不一致。 userIP 不合法。 CaptchaAppId、AppSecretKey 填写有误。 |
16 | appid no match |
票据校验接口超时时间为多久?
票据校验接口超时时间为5秒。
客户端验证生成的票据有效时长为多久?
有效时长为5分钟,若超过5分钟再进行核验票据,接口会返回"CaptchaCode": 8;"CaptchaMsg": "verify timeout"的报错。
验证码票据过期时间能否手动设置?
当前暂不支持手动设置后端票据校验过期时间,后端 ticket 有效时长为5分钟。
H5 接入问题
如何关闭遮罩层/自定义 loading 样式?
初始化验证码 SDK 时,修改以下内容。
var captcha = new TencentCaptcha("appid",callback,{loading:false})
入口脚本 TCaptcha.js/TJCaptcha.js 报跨域错误?
目前验证码接入只支持用 script 动态接入,如通过 xhr、fetch 请求接入将会出现 CORS 跨域错误。
如何指定内嵌验证码元素位置?
初始化验证码 SDK 时,修改以下内容。
/** embedEleDom:指定渲染验证码区域dom元素 */var embedEleDom=document.getElementById('embedEleDom');var captcha = new TencentCaptcha(embedEleDom, appid, callback, {type:"embed"})
在内嵌验证码时,如果将 loading 设置为 false,为什么 loading 效果仍然存在?
当 loading 为 false 时,只有弹出式验证码码形生效,内嵌式无法取消 loading 效果。