记一次微信公众号(微信H5)网页对接腾讯云慧眼人脸核验开发笔记
需求是这样的,客户需要一个在观看学习视频前弹出人脸识别核验真人的功能,客户找了个APP作为参考,但是在微信上第三方人脸识别是无法直接调取到前置摄像头的,都是通过用户自己获取用户的身份信息或者照片,然后在上传给接口,这样就显得很繁杂,也不符合需求,微信原生 H5 浮层模式和小程序是基于微信原生的体验,客户体验好,但有明确的主体行业限制。但是腾讯云慧眼因为都是腾讯的,所以可以接入更为友好的效果,只是最优的那个模式行业要求非常严格,所以放弃了这个选项,退一步,选择普通模式

上图就是最优方案的资质要求
普通模式则不用这些资质了。
在微信原生 H5 浮层模式之外,慧眼为无法使用浮层模式的客户提供了备选方案,普通模式没有行业限制。
人脸核身提供身份证 OCR、活体检测、人脸比对三个功能组合使用:
- 身份证 OCR :该功能为非必选项,若不需要,可以选择:手动输入或调用时传入身份信息。
- 活体检测:
- 浮层模式:支持数字活体检测、光线活体检测、光线+数字活体检测,三选一。
- 普通模式:支持读数活体检测、动作活体检测、静默活体检测,三选一。
- 人脸比对,支持两种方式:
(1)跟公安权威库比对。
(2)跟上传照片比对。 确认使用模式和功能后,需要创建业务流程,获取 RuleId 用于调用。
创建入口: 人脸核身控制台-自助接入 。流程审核通过后,系统会配置对应流程并分配一个 RuleId,客户可以使用 RuleId 调用 DetectAuth 接口,使用人脸核身服务。
其实,腾讯云慧眼集成的相当的友好的,只要控制后台开通了服务,申请一个流程就行了,这个流程可自由组合搭配的,比较灵活
有了RuleId,还要去控制台生成一个密钥对,SecretId和SecretKey,下面直接开始对接吧!
首先要去GitHub下载最新的sdk包,我是使用PHP对接的,因此去找到PHP的库包,不过官方已经暂停提供直接下载库包了,要通过composer下载,不过我下载好了一个,放网盘了,可以直接拿去用,全量的
链接: http://caiyun.feixin.10086.cn/dl/055CgRlGP1jKt 提取码:p6zu 复制内容打开和彩云手机APP,操作更方便哦
下载好类库放到项目的文件夹中,位置一般都有个库包文件夹,大家各自喜好
步骤:
根据官网的教程,先使用实名核身鉴权接口调起业务流程,然后根据流程结束后回调返回的BizToken去获取本次认证的信息,比较简单
官方的说法:
- 接入准备:
- 登录 人脸核身控制台 ,申请 ruleid 参数,在自助接入中申请创建微信 H5(通用模式)或微信原生 H5(浮层模式)业务流程,ruleid 的申请,请参考 微信 HTML5 接入准备。
- 登录官网控制台 创建 API 密钥(SecretId 和 SecretKey)
- 接入方前端显示核身入口,调用接入方服务端接口。
- 接入方服务端调用实名核身鉴权 DetectAuth 接口,传入核身所需信息与业务回跳地址 RedirectUrl,获取到核身流程标识(BizToken)及核身入口 URL 。在线调试。
- 接入方前端通过地址跳转方式重定向至步骤3中获取的核身入口 URL,进入核身流程。
- 用户完成人脸核身后,页面会跳转到 RedirectUrl 上,地址中会带上此次验证流程使用的 BizToken,接入方服务端即可凭借 BizToken 参数调用获取实名核身结果信息 GetDetectInfo 接口去获取本次核身的详细信息

其实这个图片我看着感觉比较复杂,我简单描述一下,准备好参数,传参过去腾讯服务器,服务器返回数据,我们再拿数据去查数据,就是这样子
关于接口的调用方式大家各有所好,我是把调用封装在一个类中,供全局调用
第一步:创建一个类文件
QcloudFaceAuth.PHP
<?php
/**
* 腾讯云慧眼
*/
require_once dirname(__FILE__).'/../../library/tencentcloud-sdk-php/autoload.php';
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Faceid\V20180301\FaceidClient;
use TencentCloud\Faceid\V20180301\Models\DetectAuthRequest;
use TencentCloud\Faceid\V20180301\Models\GetDetectInfoEnhancedRequest;
class QcloudFaceAuth{
public $secretId;
public $secretKey; function __construct($secretId, $secretKey) {
$this->secretId = $secretId;
$this->secretKey = $secretKey;
}
//调用鉴权认证流程方法
public function getDetectAuth($region,$params){
try {
$cred = new Credential($this->secretId, $this->secretKey);
$httpProfile = new HttpProfile();
$httpProfile->setEndpoint("faceid.tencentcloudapi.com"); $clientProfile = new ClientProfile();
$clientProfile->setHttpProfile($httpProfile);
$client = new FaceidClient($cred, $region, $clientProfile); $req = new DetectAuthRequest(); $req->fromJsonString(json_encode($params)); $resp = $client->DetectAuth($req); return ['code'=>1,'msg'=>'success','data'=>$resp->toJsonString()];
}catch (TencentCloudSDKException $e){
return ['code'=>0,'msg'=>$e->getMessage(),'data'=>''];
} }
//获取认证信息方法
public function getDetectInfoEnhanced($region,$params){
try { $cred = new Credential($this->secretId, $this->secretKey);
$httpProfile = new HttpProfile();
$httpProfile->setEndpoint("faceid.tencentcloudapi.com"); $clientProfile = new ClientProfile();
$clientProfile->setHttpProfile($httpProfile);
$client = new FaceidClient($cred, $region, $clientProfile); $req = new GetDetectInfoEnhancedRequest(); $req->fromJsonString(json_encode($params)); $resp = $client->GetDetectInfoEnhanced($req); return ['code'=>1,'msg'=>'success','data'=>$resp->toJsonString()];
}
catch(TencentCloudSDKException $e) {
return ['code'=>0,'msg'=>$e->getMessage(),'data'=>''];
}
} }
可以看到就两个方法,一个是调起流程(getDetectAuth),一个是获取信息(getDetectInfoEnhanced)
然后在你想使用的地方引入或者包含这个类文件就可以new一个对象调用方法了
include_once dirname(__FILE__).'/inc/common/QcloudFaceAuth.php';
调用位置:
$params=[
"RuleId" => "申请的业务流程id",
"IdCard" => '身份证号',
"Name" => '姓名',
"RedirectUrl"=>'回调地址,也就是认证流程完成之后跳转的地址',
]; $SecretId='你的秘钥id';
$SecretKey='你的秘钥';
$faceAuth=new QcloudFaceAuth($SecretId,$SecretKey);
$region='地区';//ap-chengdu西南地区(成都),ap-guangzhou华南地区(广州)
$resp=$faceAuth->getDetectAuth($region,$params);
$resp=json_decode($resp['data'],true);
if ($resp){
$this->resultJson(['code'=>200,'msg'=>'success','data'=>$resp]);
}else{
$this->resultJson(['code'=>0,'msg'=>$resp,'data'=>[]]);
}
这里返回的数据中,我们需要取到的是一个流程URL,也就是$resp['Url'],然后你可以让程序调整访问这个URL就可以进入认证流程了;
等流程结束后,会跳转到刚才传过去的 RedirectUrl地址上,然后你可以在这个地址获取返回的BizToken,然后去请求获取认证结果接口
$params = array(
"InfoType" => "0",
"BizToken" => $BizToken,
"RuleId" => "1"
);
$SecretId='你的秘钥id';
$SecretKey='你的秘钥';
$faceAuth=new QcloudFaceAuth($SecretId,$SecretKey);
$region='ap-chengdu';//同上接口解释 $resp=$faceAuth->getDetectInfoEnhanced($region,$params);//获取认证信息接口调用
//往下就是自己的业务代码
load()->func('file');
$resp=json_decode($resp['data'],true);
if ($resp['Text']['ErrCode']===0){
$base64_image_content=$resp['BestFrame']['BestFrame'];
$path = '/images/shot';
$new_file = $path."/".date('Ymd',time())."/";
if(!file_exists(MODULE_ROOT.$new_file)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdirs(MODULE_ROOT.$new_file);
}
$new_file = $new_file.time().".jpg";
if (file_put_contents(MODULE_ROOT.$new_file, base64_decode($base64_image_content))){
$data = array(
'uniacid' => $uniacid,
'uid' => $uid,
'lessonid' => $id,
'sectionid' => $sectionid,
'path' => $new_file,
'addtime' => time()
);
$r = pdo_insert($this->table_member_shot, $data);
if($r){
//$this->resultJson(['code'=>200,'msg'=>'success','data'=>$r]);
}else{
message('认证数据写入失败', $this->createMobileUrl('lesson', array('id'=>$id,'sectionid'=>$sectionid,'uid'=>$uid)), "warning");
}
}else{
message('认证取样失败', $this->createMobileUrl('lesson', array('id'=>$id,'sectionid'=>$sectionid,'uid'=>$uid)), "warning");
}
}else{
message('认证失败,请重新认证', $this->createMobileUrl('lesson', array('id'=>$id,'sectionid'=>$sectionid,'uid'=>$uid)), "warning");
}
只要拿到了BizToken,通过接口获取认证信息,然后做自己想要的业务判断了,我这里获取了视频认证中返回的最佳帧图片,存到本地来,他们接口返回的图片是base64格式的,所以要转换一下
其实接口不难,就是调试时候很多小毛病,需要细心注意

记一次微信公众号(微信H5)网页对接腾讯云慧眼人脸核验开发笔记的更多相关文章
- 【微信H5支付】微信公众号里H5网页点击调取微信支付
最近在公众号里开发了下单支付H5网页,需要在H5里调用微信支付界面.开发思路和代码整理如下: todo...
- 微信公众号内H5调用微信支付国内服务商模式
最近在折微信公众号内H5用JSAPI调用微信支付,境内服务商版支付,微信支付给出的官方文档以及SDK不够详细,导至我们走了一些弯路,把他分享出来,我这边主要是用PHP开发,所以未加说的话示例都是PHP ...
- 免费微信公众号专用h5在线电影票API
免费h5在线电影票API,通过嵌套返回的h5页面url,实现电影票购买. 接口文档:https://www.juhe.cn/docs/api/id/252,通过此申请APPKEY 接口备注:通过请求返 ...
- 微信公众号、H5、APP三者各有什么优势?
昨天给大家分享了一个现在很热的H5,众所周知,当下H5手机网站.微信公众号.APP这三种载体都越来越火了,而且三者都有各自的一些优势和劣势. HTML5(H5) H5之所以能引发如此广泛的效应,根本在 ...
- [转]微信小程序、微信公众号、H5之间相互跳转
本文转自:https://www.cnblogs.com/colorful-paopao1/p/8608609.html 转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加 ...
- 微信小程序、微信公众号、H5之间相互跳转
转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 图片有点小,我把文字打出来吧: 可关联已有的小程序或快速创建小程序.已关联的小程序可被使用在自定义菜单和模版消息 ...
- 微信公众号 微信连wifi最全的教程
微信公众号 微信连wifi最全的教程 http://jingyan.baidu.com/article/1709ad806c69bd4634c4f0b3.html 放到自定义菜单 只能用新建图文 把二 ...
- java版微信公众号支付(H5调微信内置API)
最近需要做微信公众号支付,网上找了大堆的代码,大多都只说了个原理,自己踩了太多坑,所有的坑,都会再下面的文章中标注,代码我也贴上最全的(叫我雷锋)!!! 第一步:配置支付授权目录 你需要有将你公司的微 ...
- vue微信公众号、H5微信支付
1.H5微信支付 后台会返回一个URL,前端直接跳转就OK(需要你传给后台一个ip,必须保证在同一域名下) 使用window.location.href =res.data;进行页面跳转到支付界面(r ...
随机推荐
- Centos-配置网络或显示当前网络接口状态-ifconfig
ifconfig 配置网络或显示当前网络接口状态,必须由root用户执行 相关选项 -a 显示所有网络接口信息,包括活动或非活动 -s 显示活动接口简要信息 -v 如果网卡接口出现错误则返回错误信息 ...
- 使用Jest快照测试api
你知道什么很烦人吗?API不匹配. 有一天,后台开发人员在没有通知前端开发人员的情况下更改了其中一个api."我们认为dateCreated这个名字比created_at更好,"他 ...
- IDEA推送docker镜像到私服/利用dockerfile-maven-plugin插件在springboot中上传镜像到远程的docker服务器、远程仓库
利用dockerfile-maven-plugin插件在springboot中上传镜像到远程仓库 这篇文章讲解在开发工具中把打包好的jar编译成docker镜像,上传到远程的docker服务 ...
- git 上传文件到 gitee 码云远程仓库(强制上传)
1.先git init 会出现一个.git的文件夹,有些人可能是隐藏了,工具哪里打开就行了 2.将当前的数据上传到码云,看清楚奥,是当前.git add ./ 这是代表当前的意思 3.将上传的数据备注 ...
- 回炉重造系列-C# func and action委托是什么?
如题: C# func and action委托是什么? 1) 回答这个问题之前,我们需要了解什么是委托(英文 Delegate )? 为了便于理解,再往前推一步,回到c语言时代,指针的概念. 什么是 ...
- [CISCN2019 华北赛区 Day2 Web1]Hack World 1详解
打开题目, 我们开始尝试注入, 输入0回显Error Occured When Fetch Result. 输入1回显Hello, glzjin wants a girlfriend. 输入2回显Do ...
- Django 中实现连接多个数据库并实现读写分离
读写分离 其基本原理就是让主数据库处理事务性增,改,删操作(INSERT,UPDATE,DELETE)操作,而从数据库处理SELECT查询操作,数据库复制被用来把事物性操作导致的变更同步到其他从数据库 ...
- 换掉7z-zip默认的ico图标,自定义压缩文件图标更美观。
下图就是7z官网源代码里面的ico文件,如果有条件自己编译,可以直接替换下面的图标,然后编译一个你自己的7z工具就行.不过我比较懒,还是通过修改注册表的方式改成别的ico图标吧. 源码和可执行程序下载 ...
- elasticsearch练习
elasticsearch练习 最近在学习elasticsearch,做了一些练习,分享下练习成果,es基于6.7.2,用kibana处理DSL,有兴趣的伙伴可以自己试试 1.简单查询练习 sourc ...
- BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令
BASH的PS1变量控制提示符相关的东西,善用它可以让BASH用起来舒服很多 提示符颜色 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色 提示符生成的时间(这样就知道上一条命 ...