一,前期准备
需要在uniapp的uniCloud目录下关联云空间和manifest,json文件中勾选FacialRecognitionVerify(实人认证),做完这些需要重新打一个自定义基座的包。
二,流程介绍
三,编写代码
1. 在uniCloud/cloudfunctions文件夹下新建一个云函数,下面是我的的云函数
'use strict'
const crypto = require('crypto')
exports.main = async (event, context) => {
// console.log('这个是什么',event.step);
// return
// 获取实人认证实例
const frvManager = await uniCloud.getFacialRecognitionVerifyManager({
requestId: context.requestId
})
if (event.step == 1) {
try {
/**
* 获取certifyId
* @return certifyId 认证id,用于客户端调用认证接口及云函数获取认证结果
*/
const result = await frvManager.getCertifyId({
realName: event.realName,
idCard: event.idCard,
metaInfo: event.metaInfo,
needPicture: true //是否采集人脸照片
})
if (result.errCode == 0) return {
code: 200,
data: result.certifyId,
msg: '获取certifyId成功'
}
return {
code: 500,
data: '',
msg: `获取certifyId失败:${ result.errMsg }`
}
} catch (err) {
console.log('err', err);
return {
code: 500,
data: '',
msg: '请检查您填写的姓名与身份证号是否正确'
}
}
} else {
// 获取认证结果
const result = await frvManager.getAuthResult({
certifyId: event.certifyId
})
if (result.authState == 'SUCCESS') return {
code: 200,
data: result
}
// 认证失败
if (result.authState == 'FAIL') return {
code: 500,
data: result.certifyId,
msg: `认证失败:${ result.errMsg }`
}
}
}
2.在调用之前可以加,获取摄像头等权限判断
const metaInfo = uni.getFacialRecognitionMetaInfo()
console.log(metaInfo)
if(!metaInfo) {
//提示当前设备不支持刷脸
return
}
//在调用之前可以自己加一些获取摄像头权限等操作...
uniCloud.callFunction({
name: 'getCertifyId',
data: { metaInfo, realName: idForm.name, idCard: idForm.idCard,step:1},
success({ result }) {
// return
// 3. 客户端调起sdk刷脸认证
uni.startFacialRecognitionVerify({
certifyId: result.data,
success(success) {
console.log('拿到认证结果',success);
//获取认证结果
uniCloud.callFunction({
name: 'getCertifyId',
data: { certifyId:result.data},
success({ result }) {
console.log('校验成功',result);
//你的人脸照片 临时链接只有15分钟 需要保存自己的服务器
let userImgLink = result.pictureUrl
//TODO 对接后端...
},
fail(e) {
console.log('校验失败',e);
// uni.$u.toast('认证失败!')
}
})
},
fail(e) {
},
})
},
fail(e) {
//需要做报错处理
}
})