文章主要参考:PHP腾讯云人脸核身 接口对接和签名设置
本人使用的是小程序接口。
DetectAuth获取BizToken请求:
$secretKey = '自己的secretkey';
$srcStr = 'GETfaceid.tencentcloudapi.com/?';//使用get方式获取
$param = [
"Action"=> 'DetectAuth',//默认
"Nonce"=> rand(1000,9999), //4位随机数
"SecretId"=>"你自己的secretkey",
'Region'=>'ap-beijing',//区域列表中选
"Timestamp"=> time(), //秒级时间戳
'RuleId'=>'0',//自己创建的RuleID
"Token"=>'',//为空,不需要填
"Version"=>'2018-03-01'//默认,接口的版本号,不同的接口版本号不同
];
ksort($param); //参数升序排序
$srcStr .= urldecode(http_build_query($param)); //参数变成action=DetectAuth&Nonce=1234的格式之后进行urlencode加密
//排序后连接字符串 生成签名 官网有验证签名的地方 签名不对的话 可以把时间戳和随机数写死之后校验
$sign = urlencode(base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)));//因为是使用get,所以使用sha1加密,这个是固定格式。
$url ='https://faceid.tencentcloudapi.com/?Action='.$param['Action'].'&Nonce='.$param['Nonce'].'&Region='.$param['Region'].'&RuleId='.$param['RuleId'].'&SecretId='.$param['SecretId'].'&Signature='.$sign.'&Timestamp='.$param['Timestamp'].'&Token=&Version='.$param['Version]; //个人认为可以使用http_build_query($param)直接只不过没试过。
//然后使用curl的get格式请求$url地址就可以了。
返回值处理:
最后获取的返回值需要使用json_decode($res,true)处理。
GetDetectInfo获取人脸核验之后结果信息获取请求:
$BizToken = $token;//前端发过来的BizToken
$secretKey = '你自己的secretKey';
$srcStr = 'GETfaceid.tencentcloudapi.com/?';// 使用get方式获取
$param = [
"Action"=> 'GetDetectInfo',//默认
"Nonce"=> rand(1000,9999), //4位随机数
"SecretId"=>"你自己的secretId",
'Region'=>'ap-beijing',//区域列表中选
"Timestamp"=> time(), //秒级时间戳
"Token"=>'',//为空
"Version"=>'2018-03-01',//默认
'RuleId'=>'0',//自己创建的RuleID
'BizToken'=>$BizToken,
'InfoType'=>'3', //此处获取的是最佳人像截图,如果需要多处获取可以使用1234
];
ksort($param); //参数升序排序
$srcStr .= urldecode(http_build_query($param)); //参数变成action=DetectAuth&Nonce=1234的格
//排序后连接字符串 生成签名 官网有验证签名的地方 签名不对的话 可以把时间戳和随机数写死之后校验
$sign = urlencode(base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)));//因为是使用get,所以使用sha1加密,这个是固定格式。
$url ='https://faceid.tencentcloudapi.com/?Action='.$param['Action'].'&Nonce='.$param['Nonce'].'&Region='.$param['Region'].'&RuleId='.$param['RuleId'].'&BizToken='.$param['BizToken'].'&InfoType='.$param['InfoType'].'&SecretId='.$param['SecretId'].'&Signature='.$sign.'&Timestamp='.$param['Timestamp'].'&Token=&Version='.$param['Version']; //个人认为可以使用http_build_query($param)直接只不过没试过。
//然后使用curl的get格式请求$url地址就可以了。
返回值处理(两个坑):
获取的数据需要使用两次json_decode($res,true)解密,第一次的使用对象是获取的全部,之后还要对你选择的InfoTpye=1234返回数据第二次进行解密。
注意:当使用InfoType=3的时候,返回的是base64的图片数据,API文档标注了是要jpg格式的,但是返回的数据是不带格式的,需要自己加“data:image/jpg;base64, ”,注意是有逗号的。