验证码依赖设备指纹检测设备环境,本文档描述了设备指纹SDK和验证码SDK的集成方式

# 后台配置

在字节小程序开发者平台,开发管理 - 开发设置 - 服务器域名

添加request合法域名

https://fp.tongdun.net
https://sphinx.tongdun.net
https://static.tongdun.net

添加downloadFile合法域名

https://sphinx.tongdun.net
https://static.tongdun.net

# 小程序代码集成

# 1. 获取并添加 SDK

联系运营获取最新的设备指纹和验证码 SDK。

将设备指纹SDK添加至小程序适当的目录中,将验证码SDK里的 tdcaptcha 组件文件夹添加至小程序组件components目录下。

# 2. 获取设备指纹 blackbox

设备指纹中使用了 canvas 指纹技术,由于目前小程序的限制,无法通过 JS 来动态创建 DOM 节点,所以需要在集成时手动加入。例如,在 pages/index/index.ttml 页面尾部添加以下代码:

<view>
    <canvas canvas-id='tdcanvas' style="visibility: hidden;position: fixed;z-index: -999;left: 9999px;"></canvas>
</view>

pages/index/index.js 文件顶部引用SDK:

import FMAgent from '../../fmsdk/fm-xxx-es.saas.js'

然后在 onLoad 方法中获取设备指纹 blackbox,只需获取一次:

onLoad: function() {
	var that = this;
        // partnerCode-合作方标识,由同盾分配, appName-应用标识,由同盾分配
	var fmagent = new FMAgent({{partnerCode:"", appName:"", env:"PRODUCTION"}});
        fmagent.getInfo({
          page: that, 
          openid: '', // 请传入加密的用户 openid
          // 如果您开通了 unionid 功能,请传入加密的用户 unionid,否则留空即可
          unionid: '', 
          success: function (res) {
             // 获取blackbox成功回调,res 为 blackbox 字符串
             // 可以setData保存到页面,传给验证码API使用
             that.setData({blackbox: res});
          },
         }
        })
   
}

设备指纹 API 参数说明

参数 类型 是否 必填 描述 示例
page Object 当前所在的page对象或component对象 that
unionid String 加密后的用户userid; 加密算法可以随意选择,请确保加密前后一一对应,建议使用MD5或者SHA256; 没有值,请传空字符串 ef54040ea***58fe66157
timeout Number 获取blackbox超时时间,单位毫秒; 默认2500,包括采集和发送请求的总时长,范围:2500-16000 6000
noClipboard Boolean 是否不采集剪切板; 采集剪切板可部分增强设备指纹恢复能力,部分手机系统会提示采集了剪切板; 默认true,不采集 true
success Function 获取成功回调 function(res) {/res即blackbox /}

# 3. 引用 tdcaptcha 组件

在需要使用验证码页面的 .json 文件中,添加使用组件配置

{
  "usingComponents": {
    "td-captcha": "/components/tdcaptcha/captcha/index"
  }
}

# 4. 添加验证码组件

在需要使用验证码页面的 .ttml 文件中,添加验证码组件元素

<td-captcha  tt:ref="captchaRef" id="tdCaptcha"></td-captcha>

# 5. 触发验证

在需要验证码页面的 .js 文件中,添加验证码调用事件及监听事件

onReady() {
    // 兼容组件实例,id与ttml保持一致
    this.selectComponent("#tdCaptcha", res => {
        this.tdcaptcha = res;
    })
   
  },
  
  // captchaRef与ttml里tt:ref保持一致
  // 获取组件实例(2.23支持)
  captchaRef(ref) {
    this.tdcaptcha = ref;
  },
  // 触发验证码方法,比如绑定到登录按钮
  triggerCaptcha: function() {
    // 调用组件API,弹出验证码
    this.tdcaptcha.triggerCaptcha({
      partnerCode: 'XXX',  // 合作方
      appName: 'XXX', // 应用
      env: 1, 
      blackbox: this.data.blackbox || "",  // 设备指纹blackbox,, 
      onSuccess: this.onSuccess, 
      onFail: this.onFail, 
    });
  },
  
  onSuccess: function(validateToken) {
    // 验证通过
    // 将validateToken传递至服务端二次校验
  },

  onFail: function(msg) {
    // todo
  },

# 验证码 API 参数说明

参数 类型 是否 必填 描述
partnerCode String 同盾合作方标识
appName String 同盾合作方应用标识
env Number 1:线上生产环境 0:测试环境
blackbox String 同盾设备指纹blackbox
maskClose Number 点击蒙层是否关闭验证码 0:否 1:是
onSuccess Function 验证成功的回调函数,回调函数会把validateToken传递过来
onFail Function 验证失败的回调函数; 验证失败会返回新的验证码,此时onFail回传msg为 'opFail',一般不需要另行处理
onClose Function 验证码弹窗关闭的回调函数,可根据需要自定义
mfaId String 如果您已对接MFA产品,请将MFA流程中接口获取的mfa_id赋值给验证码配置参数, 未对接可以忽略
: 2023/06/07 16:19:48