首页 > 编程语言 >【代码分享】PHP对接网易易盾活体检测代码风险,简单粗暴实现

【代码分享】PHP对接网易易盾活体检测代码风险,简单粗暴实现

时间:2023-09-14 17:08:22浏览次数:41  
标签:易盾 get 代码 picType WANGYIYIDUN token Env signature PHP

在一些日常应用中,有些敏感数据或者功能,需要用到对应真实本人进行业务操作,所以我们就会用到活体实人认证的功能,在对接过程中,发现网易易盾的较为好用,现在把实现代码贴出来,本案例仅提供数据端,前端模板大家可以自行设置

image.png

接入步骤

第一步 注册网易易盾账号,进行业务申请获取参数

所需参数

SECRETID 业务ID(唯一数据端使用) BUSINESSID(这个是业务ID,活体检测和实人认证有俩个都需要) SECRETKEY(key值) 以上三个参数均需要进行signature的签名

第二步,需要前端开发进行对接对应的jsSDK,支持NPM的方式引入,这里不做赘述,可以参考文档进行对接。

支持的浏览器 image.png

image.png

image.png

image.png

<!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

相关文章