支付宝小程序提供两种对接方式:插件化对接与sdk对接,请根据下方的对比选择合适的对接方式接入
插件化与sdk接入区别
- 插件化代码不直接提供sdk代码,对接更为便捷
- 插件发布新版本后,插件订购者可在小程序内使用指定版本插件,享受更高效的插件服务。
- 小程序可以调用插件,插件不能再调用其他插件
- 插件化不支持较早版本的 APPID 为 8 位数字的小程序
1. 插件化方式
- 登陆登录开放平台控制台(https://open.alipay.com/develop/manage),进入 开发 中的插件服务
- 点击订购其他插件
- 搜索 设备指纹插件 ,选择插件,点击订购,确认获取该插件
- 选择授权并绑定小程序
小程序代码集成
- 小程序app.json里声明插件
{
"plugins": {
"tdfp-plugin": {
"version": "*", //支付宝目前只支持设置 * ,自动选择版本,后台可以配置使用哪个版本
"provider": "2021003160688029"
}
},
}
Note: 三方框架可对应添加 如uni-app,可在manifest.json文件的mp-alipay模块中添加上述声明
- 引用插件 &&必要的配置
引入插件,比如:在 pages/index/index.js 中,先在文件顶部引用插件:
const plugin = requirePlugin('tdfp-plugin')
const app = getApp()
配置
在app.js中partnerCode为必要参数,appName和channel为可选参数
App({
globalData: {
_fmOpt: {
partnerCode: "", // 请填入您的partner code
appName: "", // 请填入您的app name
channel:"", // 请填入您的channel
env: "PRODUCTION"
}
}
})
- 获取blackbox
var that = this
var fmagent = new plugin.FMAgent(app.globalData._fmOpt)
fmagent.getInfo({
page: that,
mode:'plugin',
// 请传入用户userid(可以加密或者不加密,若加密需保证加密后的userid与原始userid是一一对应关系)
unionid: '',
success: function (res) {},// 成功回调,res为blackbox字符串
fail: function (res) {},// 失败回调,res为各种exception对象
complete: function (res) {}
})
2. 标准版 SDK
1. 添加同盾域名
小程序对各种请求接口都做了域名限制,所以需要在小程序网站后台页面中添加同盾域名才可以保证小程序能正常给同盾设备指纹服务器发送信息
在 设置
-开发设置
-服务器域名白名单
中添加:
环境 | 域名 |
---|---|
生产环境(必须) | https://fp.tongdun.net |
注意:1、如果线上版本小程序仅会访问同盾生产环境,那么添加第一个生产域名即可
- 同盾支付宝小程序设备指纹 SDK 仅支持客户端基础库版本 为 1.20.0 以上的支付宝客户端,在小程序后台可以设置最低基础库版本,当低于该版本的用户打开时会提示用户升级支付宝
2. 插入 canvas 节点
假设我们想在 index
页面中采集设备信息,那么就需要在 pages/index/index.axml
文件末尾添加以下代码:
<view>
<canvas id='tdcanvas' style='visibility: hidden;position: fixed;z-index: -999; left: 9999px'></canvas>
</view>
3. 初始化 SDK
在需要使用的页面引入,比如:在 pages/index/index.js
中,先在文件顶部引用 SDK 文件:
import FMAgent from '../../fmsdk/fm-xxx-es.min.js'
配置
在app.js中partnerCode为必要参数,appName和channel为可选参数
App({
......
globalData: {
......
_fmOpt: {
partnerCode: "", // 请填入您的 partner code
appName: "", // 请填入您的 app name
channel: "", // 请填入您的channel
env: "PRODUCTION"
}
}
})
4. 获取blackbox
在设备指纹对象初始化完成后,就可以获取设备信息了。我们的设备指纹 SDK 采用回调函数模式,支持传入 success
、fail
、complete
三个回调及其它配置字段:
var that = this
var fmagent = new FMAgent(app.globalData._fmOpt)
fmagent.getInfo({
page: that, // 请传入 FMAgent 所在的 Page 或 Component 对象
// unionid 字段,如果您开通了支付宝的 userid 功能,请传入加密的用户 userid,
// 否则留空即可
unionid: '',
success: function (res) {
// 成功回调,res 为 blackBox 字符串
},
fail: function (res) {
// 失败回调,res 为各种 exception 对象
},
complete: function (res) {
// 完成回调,res为blackbox字符串或者exception 对象
}
})
设备指纹参数说明
参数名 | 类型 | 含义 | 是否必传 | 示例 | 移除字段 |
---|---|---|---|---|---|
page | Object | 当前所在的page对象或component对象 | 是 | that | |
mode | string | 当前接入方式(插件化版本请传入'plugin',sdk版本请忽略) | 否 | 'plugin' | |
timeout | Integer | 获取blackbox超时(默认2500,包括采集和发送请求的总时长,可根据自己的需要自定义设置,范围为2500—16000,单位ms) | 否 | 6000 | |
unionid | String | 加密后的用户userid(如果没有开通该功能,则无需传入该字段) | 否 | f2165dc406ac5d3c52acf938d9d6a4e5ef97c272ac4d949a7b85433c4e435cc2 | |
getInfoType | String | 获取blackbox的模式('1':优先使用缓存的blackbox,'2':优先使用实时采集的blackbox,'3':优先使用未过期的blackbox至过期,默认模式为'1') | 否 | '1' | |
getLocationAllowed | Boolean | 是否采集位置信息。(默认false不采集,如需采集请提前获取微信及小程序的位置信息授权,且配置当前项为true) | 否 | ||
getcliallowed | Boolean | 是否采集剪切板(默认false不采集) | 否 | true | clipoard |
success | function | 获取成功回调 | 是 | function(res) {/返回值为string类型,即black_box的值/} | |
fail | function | 获取失败回调 | 是 | function(res) {/返回值为一个Exception对象/} | |
complete | function | 获取完成回调 | 否 | function(res) {/完成回调,res为blackbox字符串或者exception 对象/} |