微信小程序-人脸核身解决方案

avatar
作者
筋斗云
阅读量:0

微信小程序-人脸核身解决方案

名词解释

由于不同公司对于 人脸识别的用词不一致,微信小程序背靠腾讯,因此以下的名词主要采集于腾讯云的解释

  1. 人脸识别

    • 主要关注人脸的检测、分析、比对等技术层面,侧重于识别个体身份的技术实现。它利用人脸检测、五官定位、人脸搜索、人脸比对、人脸验证、活体检测等功能,来判断和确认两个人脸图像是否属于同一人。

    • 应用场景包括但不限于在线相册分类、刷脸门禁、人脸考勤、人脸登录、人脸特效、在线考试等,更多地用于便捷性和安全性提升的场景中。

      image-20240625225310415

  2. 人脸核身(又称人脸身份验证):

    • 是一个更综合的概念,不仅包含了人脸识别的技术,还加入了证件OCR识别、活体检测等技术,以实现对用户身份信息的真实性验证。它是一个完整的身份认证解决方案,目的是为了确认当前用户是否为其所声称的身份。

    • 人脸核身主要用于需要高度安全性和合规性的场景,比如金融服务、政务平台、共享出行等行业,确保用户身份的合法性,防止身份冒用。

      image-20240625225350697

解决方案

在微信小程序中,想要实现人脸核身,无非两种解决方案

  1. 第三方公司提供的人脸核身
  2. 微信小程序自带的人脸核身

第三方公司提供的人脸核身

由于微信小程序的官方限制,并不是所有的微信小程序都可以使用官方提供的人脸核身功能。

现阶段微信人脸核验能力,针对小程序,开放的主体类目范围包含:

小程序一级类目小程序二级类目小程序三级类目使用人脸核验接口所需资质
物流服务收件/派件/《快递业务经营许可证》
物流服务货物运输/《道路运输经营许可证》(经营范围需含网络货运)
教育学历教育(学校)/(2选1):1、公立学校:由教育行政部门出具的审批设立证明 或 《事业单位法人证书》;2、私立学校:《民办学校办学许可证》与《民办非企业单位登记证书》
医疗公立医疗机构/《医疗机构执业许可证》与《事业单位法人证书》
医疗互联网医院/仅支持公立医疗机构互联网医院(2选1):1、卫生健康部门的《设置医疗机构批准书》;2、 《医疗机构执业许可证》(范围均需含“互联网诊疗”或名称含“互联网医院”等相关内容
医疗服务三级私立医疗机构/仅支持三级以上私立医疗机构,提供《医疗机构执业许可证》、《营业执照》及《医院等级证书》
政务民生所有二级类目/仅支持政府/事业单位,提供《组织机构代码证》或《统一社会信用代码证》。
金融业银行/(2选1):1、《金融许可证》; 2、《金融机构许可证》。
金融业信托/(2选1):1、《金融许可证》; 2、《金融机构许可证》。
金融业公募基金/(4选1):1、《经营证券期货业务许可证》且业务范围必须包含“基金”;2、《基金托管业务许可证》; 3、《基金销售业务资格证书》;4、《基金管理资格证书》。
金融业证券/期货/《经营证券期货业务许可证》
金融业保险/(8选1):1、《保险公司法人许可证》;2、《经营保险业务许可证》;3、《保险营销服务许可证》;4、《保险中介许可证》;5、《经营保险经纪业务许可证》;6、《经营保险公估业务许可证》或《经营保险公估业务备案》;7、《经营保险资产管理业务许可证》 ;8、《保险兼业代理业务许可证》。
金融业消费金融/银监会核准开业的审批文件与《金融许可证》与《营业执照》
金融业汽车金融/仅支持汽车金融主体,同时提供:1、《营业执照》(公司名称包含“汽车金融” ;营业范围包含“汽车金融”业务);2、《金融许可证》或银保监会及其派出机构颁发的开业核准批复文件
交通服务网约车快车/专车/其他网约车(自营性网约车)提供《网络预约出租汽车经营许可证》。(网约车平台)提供与网约车公司的合作协议以及合作网约车公司的《网络预约出租汽车经营许可证》。
交通服务航空/(航司)提供《公共航空运输企业经营许可证》。(机场)提供《民用机场使用许可证》或《运输机场使用许可证》。
交通服务公交/地铁/提供公交/地铁/交通卡公司《营业执照》
交通服务水运/(船企)提供《水路运输许可证》。(港口)提供《港口经营许可证》
交通服务骑车/仅支持共享单车,提供共享单车公司《营业执照》
交通服务火车/高铁/动车/仅支持铁路局/公司官方,提供铁路局/公司《营业执照》
交通服务长途汽车/(2选1):1、《道路运输经营许可证》(经营范围需含客运);2、官方指定联网售票平台(授权或协议或公开可查询文件)。
交通服务租车/运营公司提供《备案证明》与对应公司《营业执照》,且营业执照中包含汽车租赁业务
交通服务高速服务/仅支持ETC发行业务,(2选1):1、事业单位主体,需提供《事业单位法人证书》;2、官方指定的发行单位(一发单位),需提供“官方授权或协议,或公开可查询的文件”;
生活服务生活缴费/(供电类)提供《电力业务许可证》与《营业执照》,且《营业执照》且经营范围含供电。(燃气类)提供《燃气经营许可证》与《营业执照》,且《营业执照》且经营范围含供气。(供水类)提供《卫生许可证》与《营业执照》。
IT科技基础电信运营商/(2选1):1、基础电信运营商:提供《基础电信业务经营许可证》;2、运营商分/子公司:提供营业执照(含相关业务范围)。
IT科技转售移动通信/仅支持虚拟运营商,提供《增值电信业务许可证》(业务种类需含通过转售方式提供移动通信业务)
旅游服务住宿服务/仅支持酒店,提供《酒店业特种行业经营许可证》
商业服务公证/仅支持公证处,提供《公证处执业许可证》或《事业单位法人证书》
社交直播/(2选1):1、《信息网络传播视听节目许可证》;2、《网络文化经营许可证》(经营范围含网络表演)。

总得来说,如果你的微信小程序主体不符合以上资质,那么你只能选择第三方的公司提供的人脸核身方案了。

腾讯云 人脸核身

image-20240625224638708

  1. 活体人脸比对

    传入视频和照片,先判断视频中是否为真人,判断为真人后,再判断该视频中的人与上传照片是否属于同一个人。

  2. 活体人脸核身

    传入视频和身份信息,先判断视频中是否为真人,判断为真人后,再判断该视频中的人与权威库的证件照是否属于同一个人。

阿里云 实人认证

链接

image-20240625225916603


image-20240625225948708


image-20240625230002584

第三方公司的人脸核身通用流程

不管是使用任何第三方的人脸核身接口,都脱离不了以下相关流程

客户端-第三方服务接口

image-20240625232054751

客户端-后端-第三方服务接口

此方案对比 客户端-第三方服务接口的主要区别是多了一层中间 后端

此时 后端 的存在主要是解决 自己业务的实际问题。如自己存储人脸相关数据,或者选择服务端接入的方式实现人脸核身。

image-20240625233246461

微信小程序 - 人脸核身

来到此文重点讲解的部分。如你的公司或者组织符合相关资质。那么使用微信小程序-人脸核身方案会更存在优势

  1. 接入人脸核身更简单
  2. 暂时免费

认证流程

  1. 微信认证
  2. 补充小程序信息、名称、图表、描述等
  3. 补充小程序服务类目-设置主营类目
  4. 小程序备案

image-20240625234246662

  1. 开通人脸核身

    2024-06-25235934

编码流程

  1. 检测设备是否支持人脸活体检测 wx.checkIsSupportFacialRecognition(OBJECT)

    接口说明和使用

    OBJECT 参数说明:

    参数类型是否必填描述
    successFunction调用成功回调
    failFunction调用失败回调
    completeFunction调用完成回调(成功或失败都会回调)
    checkAliveTypeNumber人脸核验的交互方式,默认读数字(见表 2)

    checkAliveType 的值和对应的解释:

    参数解释
    2先检查是否可以屏幕闪烁,不可以则自动为读数字

    CALLBACK 返回参数

    参数类型说明
    errMsgBoolean错误信息
    errCodeNumber错误码

    回调结果说明

    回调类型ErrCode说明
    sucess0支持人脸采集
    fail10001不支持人脸采集:设备没有前置摄像头
    fail10002不支持人脸采集:没有下载到必要模型
    fail10003不支持人脸采集:后台控制不支持

    回调结果说明仅对Android生效,iOS不返回errcode。

  2. 开始人脸活体检测

    1. 业务方没有存储用户身份信息
    2. 业务放有存储用户身份信息
无用户身份相关信息

此时调用接口需要传递用户的姓名+身份证相关信息

image-20240625235415950

(一)接口描述
wx.startFacialRecognitionVerify(OBJECT)

(二)参数说明

1、OBJECT参数说明:

参数类型必填说明
nameString姓名
idCardNumberString身份证号码
successFunction调用成功回调
failFunction调用失败回调
completeFunction调用完成回调(成功或失败都会回调)

2、CALLBACK返回参数

参数类型说明
errMsgString错误信息
errCodeNumber错误码
verifyResultString本次认证结果凭据,第三方可以选择根据这个凭据获取相关信息

3、回调结果说明

2024-06-26000018

2024-06-26000056

2024-06-26000121

示例代码

  async faceAuth() {     try {       const res = await wx.startFacialRecognitionVerify({         name: "xxx",         idCardNumber: "xxx"       })       console.log(res)     } catch (e) {       //TODO handle the exception       console.log(e.message)     }   } 
有用户身份相关信息

image-20240626002952071

1、业务方上传用户姓名和身份证,获取用户凭证,把凭证给到前端通过 jsapi 调用

1.2 请求URL
https://api.weixin.qq.com/cityservice/face/identify/getuseridkey?access_token={ac cess_token}

1.3 请求方式
POST

2、请求数据格式

Json { "name" : “张三”, "id_card_number" : "452122xxxxxxx43215" } 

请求示例

#!/bin/bash TOKEN='xxxxxxxxxxxx'   URL='https://api.weixin.qq.com/cityservice/face/identify/getuseridkey' JSON='{ "name": "张三", "id_card_number": "452344xxxxxxxxxxxxx234"}' curl "${URL}?access_token=${TOKEN}" -d "${JSON}" 

参数说明

json 字段中文显示是否必传
name姓名
id_card_number身份证号码
out_seq_no业务方唯一流水号

3、返回数据

参数类 型说明
errcodeint错误码
errmsgstring错误信息
user_id_keystring用于后台交互表示用户姓名、身份证的凭证
expires_inuint32user_id_key 有效期,过期需重新获取
{ "errcode" : 0, "errmsg" : "ok", "user_id_key" : "id_key_xxxx", "expires_in": 3600 }  

4、后台消息推送
如果业务方传入out_seq_no,核身完成后会通过消息推送回调给业务方的服务器,如果回调业务方失败,会在5s尽力推送,超过5s不再推送。

参数说明

参数类 型说明
ToUserNamestring小程序原始ID
FromUserNamestring事件消息openid
CreateTimeuint32消息推送时间
MsgTypestring消息类型
Eventstring事件类型
openidstring核身用户的openid
out_seq_nostring业务方唯一流水号
verify_resultstring核身返回的加密key(凭据)

返回示例

{ 	"ToUserName": "gh_81fxxxxxxxx", 	"FromUserName": "oRRn15NUibBxxxxxxxxx", 	"CreateTime": 1703657835, 	"MsgType": "event", 	"Event": "face_identify", 	"openid": "oRRn15NUibBxxxxxxxxx", 	"out_seq_no": "test1234", 	"verify_result": "XXIzTtMqCxwOaawoE91-VNGAC3v1j9MP-5fZJxv0fYT4aGezzvYlUb-n6RWQa7XeJpQo0teKj8mGE4ZcRe1JI3GqzADBYORBu613rKjKAFfEXTXw_bu1bs7MnmPOpguS" } 

四、再次获取核验结果api

此接口是前端完成人脸核身后,基于前端返回的凭据,通过后台api再次进行核验结果和身份信息的校验,有助于提高安全性,请务必接入!
前端获取结果不可信,存在被篡改的风险,为了保障请求结果安全性,请务必对identify_ret、id_card_number_md5、name_utf8_md5字段进行校验!

(一)API说明

1、说明

人脸核身之后,开发者可以根据jsapi返回的verify_result向后台拉取当次认证的结果信息。

2、请求URL

https://api.weixin.qq.com/cityservice/face/identify/getinfo?access_token={access_token}

3、请求方式

POST

4、请求格式

json

(二)请求数据说明

1、请求

参数类型是否必填描述
verify_resultStringjsapi返回的加密key(凭据)

2、数据返回 HTTP 头如下

Date: Mon, 06 Feb 2017 08:12:58 GMT
Content-Type: application/json; encoding=utf-8
Content-Length: 85
Connection: close

json示例

{ "errcode" : 0, "errmsg" : "ok", "identify_ret" : 0, "identify_time" : 1486350357 "validate_data": "8593" 

(三)返回参数说明

1、返回参数

注:errcode和identify_ret同时为0,代表本次认证成功。

参数类型描述
errcodeint错误码, 0表示本次api调用成功
errmsgstring本次api调用的错误信息
identify_retint人脸核身最终认证结果
identify_timeuint32认证时间
validate_datastring用户读的数字(如是读数字)
openidstring用户openid
user_id_keystring用于后台交互表示用户姓名、身份证的凭证
finish_timeuint32认证结束时间
id_card_number_md5string身份证号的md5(最后一位X为大写)
name_utf8_md5string姓名MD5

2、错误码对应信息

errcode备注
84001非法identity_id
84002用户信息过期
84003用户信息不存在

参考链接

  1. 微信人脸核身接口能力官方

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!