设备指纹web-sdk接入手册 #
-
在需要使用数美反欺诈服务的页面嵌入SDK即可,例如注册、登录等页面,其它页面不用嵌入。
-
WEB SDK不需要下载额外SDK包,直接按照如下步骤接入即可。
1. 启动SDK #
在页面底部引入如下所示代码:
最新版本:3.0.0
(
function
(
)
{
window
.
_smReadyFuncs
=
[
]
;
window
.
SMSdk
=
{
onBoxDataReady
:
function
(
boxData
)
{
// 非必填
console
.
log
(
'此时拿到的数据为boxData或者boxId'
,
boxData
)
;
}
,
ready
:
function
(
fn
)
{
fn
&&
_smReadyFuncs
.
push
(
fn
)
;
}
}
;
// 1. 通用配置项
window
.
_smConf
=
{
organization
:
'xxxxxxxxxx'
,
// 必填,组织标识,邮件中organization项
appId
:
'xxxxxxxxxx'
,
// 必填,应用标识,默认传值default,其他应用标识提前联系数美协助定义
publicKey
:
'xxxxxxxxxx'
,
// 必填,私钥标识,邮件中publicKey项
staticHost
:
'static.portal101.cn'
,
// 必填, 设置JS-SDK文件域名,建议填写static.portal101.cn
protocol
:
'https'
,
// 如果使用https,则设置,如不使用,则不设置这个字段
// 2. 连接海外机房特殊配置项,仅供设备数据上报海外机房客户使用
// 2.1 业务机房在国内
// 1) 用户分布:国内(默认设置)
// apiHost:'fp-it.portal101.cn'
// 2) 用户分布:全球
// apiHost:'fp-it-acc.portal101.cn'
// 2.2 业务机房在欧美(弗吉尼亚)
// 1) 用户分布:欧美
// apiHost: 'fp-na-it.portal101.cn'
// 2) 用户分布:全球
// apiHost: 'fp-na-it-acc.portal101.cn'
// 2.3 业务机房在欧美(法兰克福)
// apiHost: 'api-device-eur.portal101.cn'
// 2.4 业务机房在东南亚
// 1) 用户分布:东南亚
// apiHost:'fp-sa-it.portal101.cn'
// 2) 用户分布:全球
// apiHost:'fp-sa-it-acc.portal101.cn'
// 2.5 私有化特殊配置
// staticHost: 'xxxxxx' // 私有化客户自己引入线上cdn地址,此项必填;如果客户本地引入js文件,此项不填
// apiHost: 'xxxxxx'; // 私有化部署的服务域名
}
;
var
url
=
(
function
(
)
{
var
isHttps
=
'https:'
===
document
.
location
.
protocol
;
var
protocol
=
isHttps
?
'https://'
:
'http://'
;
var
fpJsPath
=
'/dist/web/v3.0.0/fp.min.js'
;
var
url
=
protocol
+
_smConf
.
staticHost
+
fpJsPath
;
return
url
;
}
)
(
)
;
var
sm
=
document
.
createElement
(
'script'
)
;
var
s
=
document
.
getElementsByTagName
(
'script'
)
[
0
]
;
sm
.
src
=
url
;
s
.
parentNode
.
insertBefore
(
sm
,
s
)
;
}
)
(
)
;
2. 使用设备标识 #
/**
* 绑定事件
*
@param
element
*
@param
eventType
*
@param
func
*/
function
bindEvent
(
element
,
eventType
,
func
)
{
if
(
element
.
addEventListener
)
{
element
.
addEventListener
(
eventType
,
func
,
false
)
;
}
else
if
(
element
.
attachEvent
)
{
eventType
=
'on'
+
eventType
;
element
.
attachEvent
(
eventType
,
func
)
;
}
else
{
eventType
=
'on'
+
eventType
;
element
[
eventType
]
=
func
;
}
}
/**
* cb业务逻辑
* 使用数美设备标识逻辑
*/
function
dealSmDeviceId
(
cb
)
{
var
smDeviceId
=
''
;
var
smDeviceIdReady
=
false
;
SMSdk
.
ready
(
function
(
)
{
if
(
SMSdk
.
getDeviceId
)
{
smDeviceId
=
SMSdk
.
getDeviceId
(
)
;
}
if
(
!
smDeviceIdReady
)
{
smDeviceIdReady
=
true
;
// 执行业务逻辑
cb
&&
cb
(
smDeviceId
)
;
}
}
)
;
}
// 客户根据实际情况选择以下场景,如有疑问直接联系数美技术支持答疑
// 场景一:需要点击按钮(如:登录、注册、领卷等)交互场景使用
var
buttonEl
=
document
.
getElementById
(
'getDeviceId'
)
;
bindEvent
(
buttonEl
,
'click'
,
function
(
)
{
dealSmDeviceId
(
function
(
deviceId
)
{
console
.
log
(
'回调执行成功,设备标识为:'
+
deviceId
)
;
}
)
;
}
)
;
// 场景二:无需交互直接使用(如:浏览)
dealSmDeviceId
(
function
(
deviceId
)
{
console
.
log
(
'回调执行成功,设备标识为:'
+
deviceId
)
;
}
)
;
- 获取到的deviceId如果通过POST方式请求后端接口,可以直接传参;如果通过GET方式请求后端接口,URL参数值需要使encodeURIComponent进行编码,服务端使用对应语言的decode代码进行处理。
- 避免页面多次引用,引用后可通过抓包查看fp.min.js的引用次数。