PHP实现阿里云金融级实人认证人脸识别h5案例源码,带签名

 PHP部分:

//本代码段为项目中的代码,部分参数接收方式和路径请自行更改
<?php
class control_face_certification
{
    
    function __construct()
    {
        date_default_timezone_set("GMT");
        $this->params = $_REQUEST;
    }


    public function index(){
        include('view/face_certification/face_certification.html');
    }

//公共参数部分
    public function get_public_params()
    {
        return [
            "Format" =>'json',
            "Version" => "2019-03-07",
            "AccessKeyId" => "------",
            "AccessKeySecret" => "-----",
            "SignatureMethod" => "HMAC-SHA1",
            "Timestamp" =>date('Y-m-d\TH:i:s\Z'),
            "SignatureVersion" => "1.0",
            "SignatureNonce" =>  md5(rand(1000,9999)),
            "SceneId" => -------
        ];

    }

//获取认证链接
    public function face_cert_url()
    {
        $data = $this->params;
        $public_params = $this->get_public_params();
        $url = "cloudauth.aliyuncs.com/?";
        $Action = "InitFaceVerify";
        $Format = $public_params["Format"];
        $Version = $public_params["Version"];
        $AccessKeyId = $public_params["AccessKeyId"];
        $AccessKeySecret = $public_params["AccessKeySecret"];
        $SignatureMethod = $public_params["SignatureMethod"];
        $Timestamp = $public_params["Timestamp"];
        $SignatureVersion = $public_params["SignatureVersion"];
        $SignatureNonce = $public_params["SignatureNonce"];
        $SceneId = $public_params["SceneId"];
        $OuterOrderNo = md5(time().rand(1000,9999));
        $ProductCode = "ID_PRO";
        $CertType = "IDENTITY_CARD";
        $CertName = $data["name"];
        $CertNo = $data["idcard"];
        $ReturnUrl = "https://".$_SERVER['HTTP_HOST']. /index.php?m=face_certification&a=call_back";
        $MetaInfo = $data["metainfo"];
        $MetaInfo = json_encode($MetaInfo,JSON_UNESCAPED_SLASHES);  
        $all_params = [
            "Format" => $Format,
            "Version" => $Version,
            "AccessKeyId" => $AccessKeyId,
            "SignatureMethod" => $SignatureMethod,
            "Timestamp" => $Timestamp,
            "SignatureVersion" => $SignatureVersion,
            "SignatureNonce" => $SignatureNonce,
            "Action" => $Action,
            "SceneId" => $SceneId,
            "OuterOrderNo" => $OuterOrderNo,
            "ProductCode" => $ProductCode,
            "CertType" => $CertType,
            "CertName" => $CertName,
            "CertNo" => $CertNo,
            "ReturnUrl" => $ReturnUrl,
            "MetaInfo" => $MetaInfo
        ];
        $Signature = $this->make_sign($all_params,$AccessKeySecret);
        $all_params["Signature"] = $Signature;
        $res = $this->callInterface($url,$all_params);
        return $res;
    }

    //认证完成后跳转接口
    public function call_back()
    {
        $data = $this->params;
        $response = stripslashes($data["response"]);   
        $result = json_decode($response,true);
        $CertifyId = $result["extInfo"]["certifyId"];
        $face_result = $this->get_face_result($CertifyId);
        $face_result = json_decode($face_result,true);
        $Code = $face_result["Code"];
        $Passed = $face_result["ResultObject"]["Passed"];
        include('view/face_certification/face_result.html');
        $filename = $_SERVER['DOCUMENT_ROOT'] . "/resources/log.txt";
        $log_time = "\n-----" . date("Y-m-d H:i:s") . "-----------------------\n";
        file_put_contents($filename,$log_time."输入response    ".$response,FILE_APPEND);

        $log_time = "\n-----" . date("Y-m-d H:i:s") . "-----------------------\n";
        file_put_contents($filename,$log_time."输入face_result".json_encode($face_result),FILE_APPEND);
    }

//确认识别结果
    public function get_face_result($CertifyId)
    {
        $public_params = $this->get_public_params();
        $url = "cloudauth.aliyuncs.com/?";
        $Action = "DescribeFaceVerify";
        $Format = $public_params["Format"];
        $Version = $public_params["Version"];
        $AccessKeyId = $public_params["AccessKeyId"];
        $AccessKeySecret = $public_params["AccessKeySecret"];
        $SignatureMethod = $public_params["SignatureMethod"];
        $Timestamp = $public_params["Timestamp"];
        $SignatureVersion = $public_params["SignatureVersion"];
        $SignatureNonce = $public_params["SignatureNonce"];
        $SceneId = $public_params["SceneId"];
        $all_params = [
            "Format" => $Format,
            "Version" => $Version,
            "AccessKeyId" => $AccessKeyId,
            "SignatureMethod" => $SignatureMethod,
            "Timestamp" => $Timestamp,
            "SignatureVersion" => $SignatureVersion,
            "SignatureNonce" => $SignatureNonce,
            "Action" => $Action,
            "SceneId" => $SceneId,
            "CertifyId" => $CertifyId
        ];
        $Signature = $this->make_sign($all_params,$AccessKeySecret);
        $all_params["Signature"] = $Signature;
        $res = $this->callInterface($url,$all_params);
        return $res;
    }

//签名
    public function make_sign($all_params,$AccessKeySecret)
    {
        ksort($all_params);
        $canonicalizedQueryString = '';
        foreach($all_params as $key => $value)
        {
            $canonicalizedQueryString .= '&' . $this->percentEncode($key)
                . '=' . $this->percentEncode($value);
        }
        $stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
        $Signature = base64_encode(hash_hmac('sha1', $stringToSign, $AccessKeySecret . '&', true));
        return $Signature;
    }

//发送最终阿里接口请求
    public function callInterface($url,$all_params){

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url . http_build_query($all_params));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $res = curl_exec($ch);
        return $res;
    }

//参数编码
    public function percentEncode($str)
    {
        // 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范
        $res = urlencode($str);
        $res = preg_replace('/\+/', '%20', $res);
        $res = preg_replace('/\*/', '%2A', $res);
        $res = preg_replace('/%7E/', '~', $res);
        return $res;
    }	
}

?>

html部分:

 face_certification.html

<html>
   <div>真实姓名:<input type="text" id="name" />
    身份证号:<input type="text" id="idcard" /></div> 
<br />
<button id="go_face_cert">去实名认证</button>
</html>
<script src="<?php echo __PUBLIC__?>web/weUI/js/jquery-1.12.1.min.js" type="text/javascript"></script>
<script type="text/javascript"
    src="https://cn-shanghai-aliyun-cloudauth.oss-cn-shanghai.aliyuncs.com/web_sdk_js/jsvm_all.js"></script>
<script>
    $(function(){
        var metainfo = getMetaInfo();
           $("#go_face_cert").click(function(){
            var name = $("#name").val();
        var idcard = $("#idcard").val();
        if(name == "")
        {
            alert("姓名不能为空!");
            return;

        }
        if(idcard == "")
        {
            alert("身份证号不能为空!");
            return;
        }
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        if(!reg.test(idcard))
        {
            alert("身份证号格式错误!");
            return;
        }
    $.ajax({
        type: "POST",
        url: "index.php?m=face_certification&a=face_cert_url",
        data: {
            "metainfo":metainfo,
            "name":name,
            "idcard":idcard
        },
        dataType: "json",
        success: function (res) {
            console.log(res);
            if(res.Code == 200)
            {
                var face_cert_url = res.ResultObject.CertifyUrl;
                window.location.href = face_cert_url;
            }
            else
            {
                alert("服务器错误"+res.Message);

            }
        },
         error: function () {
            alert("服务器错误");
        }
        
    });
 
    })
});

</script>

 face_result.html

<html>
    <?php
    if($Code == 200)
    {
        if($Passed == "T")
        {
            echo "认证通过";
        }
        else
        {
            echo "认证不通过";
        }
    }
    else
    {
        echo "认证失败";
    }
    ?>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_58881595/article/details/118112395
今日推荐