PHP接入腾讯云人脸核验接口后去BizToken和人脸核验之后结果信息获取

文章主要参考: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, ”,注意是有逗号的。

你可能感兴趣的:(php)