THINKPHP6.02调用百度H5实名认证接口
1、首先你要有百度账号并通过实名认证
2、在人脸识别处新建应用,如下三张图所示:
你在你的账号能看到上面的三张图,证明你的前提工作已经准备好。下面是代码。
3、代码部份:
3.1先获取ACCESS_TOKEN,再获取VERIRY_TOKEN,然后才可以进入实人认证界面。注意:要把VERIRY_TOKEN记下来或自行存进数据库,因为一会查询验证结果时,要用的。
public function index()
{
//第一步:获取ACCESS_TOKEN
$data = array("grant_type" => "client_credentials",
"client_id" => "9VxDIKAY9lKc1fu1CeeIi***",
"client_secret"=>'NicAlBwS7e60WkgygR4uaZTo0258e***'
);
//client_id和client_secret自行在百度后台查找,grant_type是固定的
$data_string = $data;
$url = "https://aip.baidubce.com/oauth/2.0/token";
$ch = curl_init ();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data_string );
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
//将获取到的数据转成JSON
$my_json = json_decode($response);
//第二步:利用ACCESS_TOKEN获取verify_token
$data_string = "{\"plan_id\":10928}";//注意这一步,必须是JSON格式,否则会提示方案不存在,当然,你必须提前在后台申请方案
$url = "https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/verifyToken/generate?access_token=".$my_json->access_token;
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data_string );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
//将获取到的数据转成JSON
$my_json = json_decode($response);
//第三步:将拼接的URL输出到页面
$url="https://brain.baidu.com/face/print/?token="
.$my_json->result->verify_token."&successUrl=http://XXXX.oicp.net:50559/public/index.php/index/success1"
."&failedUrl=http://XXXX.oicp.net:50559/public/index.php/index/faild1";
View::assign('url',$url);
View::assign('verify_token',$my_json->result->verify_token);
// 模板输出
return View::fetch('index');
}
3.2要有成功的页面和失败的页面。
//认证成功后跳转的页面
public function success1()
{
// 模板输出
return View::fetch('success1');
}
//认证失败后跳转的页面
public function faild1()
{
// 模板输出
return View::fetch('faild1');
}
3.3用刚才记住的VERIFY_TOKEN来查询认证结果。
//查询页面
public function query()
{
//获取传进来的verify_token
$verify_token=input('get.verify_token');
echo $verify_token."</br>";
//第一步:获取ACCESS_TOKEN
$data = array("grant_type" => "client_credentials",
"client_id" => "9VxDIKAY9lKc1fu1CeeIi***",
"client_secret"=>'NicAlBwS7e60WkgygR4uaZTo0258e***'
);
$data_string = $data;
$url = "https://aip.baidubce.com/oauth/2.0/token";
$ch = curl_init ();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data_string );
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
//将获取到的数据转成JSON
$my_json = json_decode($response);
//第二步:利用ACCESS_TOKEN加上这个用户认证时使用的verify_token
$data_string = "{\"verify_token\":\"".$verify_token."\"}";//注意这一步,必须是JSON格式
$url = "https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/result/detail?access_token=".$my_json->access_token;
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data_string );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
echo $response;
//将结果从UNICODE转成中文
$result = unicode2Chinese($response);
echo $result;
//将获取到的数据转成JSON
//$my_json = json_decode($response);
}
3.4辅助代码,UNICODE转中文。
function unicode2Chinese($str)
{
return preg_replace_callback("#\\\u([0-9a-f]{4})#i",
function ($r) {return iconv('UCS-2BE', 'UTF-8', pack('H4', $r[1]));},
$str);
}
4、效果如下图: