在一些日常应用中,有些敏感数据或者功能,需要用到对应真实本人进行业务操作,所以我们就会用到活体实人认证的功能,在对接过程中,发现网易易盾的较为好用,现在把实现代码贴出来,本案例仅提供数据端,前端模板大家可以自行设置
接入步骤
第一步 注册网易易盾账号,进行业务申请获取参数
所需参数
SECRETID 业务ID(唯一数据端使用) BUSINESSID(这个是业务ID,活体检测和实人认证有俩个都需要) SECRETKEY(key值) 以上三个参数均需要进行signature的签名
第二步,需要前端开发进行对接对应的jsSDK,支持NPM的方式引入,这里不做赘述,可以参考文档进行对接。
支持的浏览器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<meta name="referrer" content="origin" />
<title>活体检测H5接入示例</title>
<style>
#NELiveDetection {
width: 100%;
height: 100%;
}
</style>
<!-- 引入 sdk 样式文件 -->
<link rel="stylesheet" href="NELiveDetection.min.css" />
</head>
<body>
<div id="root">
<div id="NELiveDetection"></div>
</div>
<!-- 引入 sdk -->
<script src="NELiveDetection.umd.js"></script>
<script>
(function () {
const neLiveDetection = new NELiveDetection({
businessKey: '易盾申请的 businessKey',
container: '#NELiveDetection',
diameter: 220,
onMount: (instance) => {},
// 等价于 instance.on('ready', () => {})
onReady: (instance) => {},
});
// 实例化后必须调用 mount 方法
neLiveDetection && neLiveDetection.mount();
// 调用 start 方法开始活体检测流程
neLiveDetection.on('ready', () => {
neLiveDetection.start();
});
// 流程走完并检验完成
neLiveDetection.on('verify', (token) => {
console.log('token:', token);
// 在校验成功后拿到 token 去做服务端校验
});
// 发生错误
neLiveDetection.on('error', (err) => {
console.log('err:', err);
switch (err.name) {
case '10000': // 校验未通过错误码
// 如果校验未成功,会返回 err 对象,做后续处理
break;
// 其他错误码
default:
break;
}
});
})();
</script>
</body>
</html>
文档地址
https://support.dun.163.com/documents/391676076156063744?docId=675533343461699584
*数据端代码
signature签名
/**
* 生成签名信息
* $secretKey 产品私钥
* $params 接口请求参数,不包括signature参数
*/
function netEasyMakeSignature($secretKey,$params)
{
ksort($params);
$buff="";
foreach($params as $key=>$value){
$buff .=$key;
$buff .=$value;
}
$buff .= $secretKey;
return md5(mb_convert_encoding($buff, "utf8", "auto"));
}
网易易盾活体检测验证
/*
* 网易易盾活体检测验证
* */
public function inVivoDetection()
{
$token = input('post.token');
if($token === '')
{
return json(['code'=>201,'msg'=>'网易易盾活体检测token不可为空']);
}
$url = 'https://verify.dun.163.com/v1/liveperson/recheck';
$secretKey = Env::get('WANGYIYIDUN.SECRETKEY','');
$noce = rand(10000,99999);
list($msec, $sec) = explode(' ', microtime());
$time = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);//切记毫秒级的unix时间戳
//参与签名参数
$parmas = [
'secretId'=>Env::get('WANGYIYIDUN.SECRETID',''),
'businessId'=>Env::get('WANGYIYIDUN.BUSINESSIDD',''),
'version'=>'v1',
'timestamp'=>$time,
'nonce'=>$noce,
'token'=>$token,
'needAvatar'=>'true'
];
$signature = netEasyMakeSignature($secretKey,$parmas);//参数加密生成signature
//请求参数
$reParmas = [
'token'=>$token,
'needAvatar'=>'true',
'secretId'=>Env::get('WANGYIYIDUN.SECRETID',''),
'businessId'=>Env::get('WANGYIYIDUN.BUSINESSIDD',''),
'version'=>'v1',
'timestamp'=>$time,
'nonce'=>$noce,
'signature'=>$signature
];
$result = publicHttpRequest($url,$reParmas,1);
return json($result);
}
网易易盾实人认证
/*
* 网易易盾实人认证
* */
public function realPersonAuth()
{
$name = input('post.name');
$idCard = strtoupper(input('post.idCard'));
$avatar = input('post.avatar');//用户头像如picType为url,长度限制为256如picType为BASE64,大小限制为大小180K
$picType = input('post.picType');//图片类型:1-URL,2-BASE64
if($name === '' || $idCard === '' || $avatar === '' || $picType === '')
{
return json(['code'=>201,'msg'=>'参数均不可为空']);
}
//接口地址
$url = 'https://verify.dun.163.com/v1/rp/check';
$secretKey = Env::get('WANGYIYIDUN.SECRETKEY','');
$noce = rand(10000,99999);
list($msec, $sec) = explode(' ', microtime());
$time = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
//参与签名参数
$parmas = [
'secretId'=>Env::get('WANGYIYIDUN.SECRETID',''),
'businessId'=>Env::get('WANGYIYIDUN.BUSINESSID',''),
'version'=>'v1',
'timestamp'=>$time,
'nonce'=>$noce,
'name'=>$name,
'cardNo'=>$idCard,
'picType'=>$picType,
'avatar'=>$avatar
];
$signature = netEasyMakeSignature($secretKey,$parmas);//参数加密生成signature
//请求参数
$reParmas = [
'name'=>$name,
'cardNo'=>$idCard,
'picType'=>$picType,
'avatar'=>$avatar,
'secretId'=>Env::get('WANGYIYIDUN.SECRETID',''),
'businessId'=>Env::get('WANGYIYIDUN.BUSINESSID',''),
'version'=>'v1',
'timestamp'=>$time,
'nonce'=>$noce,
'signature'=>$signature
];
$result = publicHttpRequest($url,$reParmas,1);
return json($result);
}
以上就是所有的活体实人认证的流程。 其实,整体业务流程为前端打开进行活体验证收到token-->交付后端验证->后端验证成功返回一张图片->再进行身份证号码和姓名和返回的图片进行实人认证。后续升级改造根据自己的业务场景进行改造
整体的业务文档
https://support.dun.163.com/documents/391676076156063744?docId=501976500076822528
好了今天的内容就到这里
最后:希望大家给点点赞 收藏收藏有什么疑问可以评论私信给我,欢迎各位大佬指出不足之处谢谢
标签:易盾,get,代码,picType,WANGYIYIDUN,token,Env,signature,PHP From: https://blog.51cto.com/u_16240159/7471259