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

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

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

名词解释

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

  1. 人脸识别
  • 主要关注人脸的检测、分析、比对等技术层面,侧重于识别个体身份的技术实现。它利用人脸检测、五官定位、人脸搜索、人脸比对、人脸验证、活体检测等功能,来判断和确认两个人脸图像是否属于同一人。
  • 应用场景包括但不限于在线相册分类、刷脸门禁、人脸考勤、人脸登录、人脸特效、在线考试等,更多地用于便捷性和安全性提升的场景中。
    `UG5%`]L`CRR~@RC0X]9@ZJ.png
  1. 人脸核身(又称人脸身份验证):
  • 是一个更综合的概念,不仅包含了人脸识别的技术,还加入了证件OCR识别、活体检测等技术,以实现对用户身份信息的真实性验证。它是一个完整的身份认证解决方案,目的是为了确认当前用户是否为其所声称的身份。
  • 人脸核身主要用于需要高度安全性和合规性的场景,比如金融服务、政务平台、共享出行等行业,确保用户身份的合法性,防止身份冒用。
    UH(W$0]%(V4XKBNN$_J1N9H.png

解决方案

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

  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、《网络文化经营许可证》(经营范围含网络表演)。

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

腾讯云 人脸核身

(O4~W$43G6BNY489G$NK$@V.png

  1. 活体人脸比对
    传入视频和照片,先判断视频中是否为真人,判断为真人后,再判断该视频中的人与上传照片是否属于同一个人。
  2. 活体人脸核身
    传入视频和身份信息,先判断视频中是否为真人,判断为真人后,再判断该视频中的人与权威库的证件照是否属于同一个人。

阿里云 实人认证

链接

8)}S)T7{FFP9{Z3)[CM@8XD.png


%8]469%{)MP8@SQI)L1{_1L.png


4J$TR3SJEA){NG((Z4%HCIV.png

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

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

客户端-第三方服务接口

O~K59_FFB]H31_G7F_Z~)[T.png

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

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

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

J_9MBCO3`XY7U$IV)HGZGZW.png

微信小程序 - 人脸核身

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

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

认证流程

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

DQ[0ZA$%VVY{I[CX1C)NWF4.png

  1. 开通人脸核身
    Y8XHAW2R]HD1SA_E}$]]FRF.png

编码流程

  1. 检测设备是否支持人脸活体检测 wx.checkIsSupportFacialRecognition(OBJECT)
    接口说明和使用
    OBJECT 参数说明:
参数 类型 是否必填 描述
success Function 调用成功回调
fail Function 调用失败回调
complete Function 调用完成回调(成功或失败都会回调)
checkAliveType Number 人脸核验的交互方式,默认读数字(见表 2)
  1. checkAliveType 的值和对应的解释:
参数 解释
2 先检查是否可以屏幕闪烁,不可以则自动为读数字
  1. CALLBACK 返回参数
参数 类型 说明
errMsg Boolean 错误信息
errCode Number 错误码
  1. 回调结果说明
回调类型 ErrCode 说明
sucess 0 支持人脸采集
fail 10001 不支持人脸采集:设备没有前置摄像头
fail 10002 不支持人脸采集:没有下载到必要模型
fail 10003 不支持人脸采集:后台控制不支持
  1. 回调结果说明仅对Android生效,iOS不返回errcode。
  2. 开始人脸活体检测
  1. 业务方没有存储用户身份信息
  2. 业务放有存储用户身份信息

无用户身份相关信息

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

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

(二)参数说明

1、OBJECT参数说明:

参数 类型 必填 说明
name String 姓名
idCardNumber String 身份证号码
success Function 调用成功回调
fail Function 调用失败回调
complete Function 调用完成回调(成功或失败都会回调)

2、CALLBACK返回参数

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

3、回调结果说明

]O7]ACFZ1`3[E)9IPHTD`WY.png

T9]YFIA8W5U)CC825I]FW03.png

5`CFN~IRJM6D5J7WC21PEJX.png

示例代码

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)
    }
  }

有用户身份相关信息

[_C)6RN[YC402YH$DYTTY]M.png

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

1.2 请求URL api.weixin.qq.com/cityservice… 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、返回数据

参数 类 型 说明
errcode int 错误码
errmsg string 错误信息
user_id_key string 用于后台交互表示用户姓名、身份证的凭证
expires_in uint32 user_id_key 有效期,过期需重新获取

{
"errcode" : 0, "errmsg" : "ok",
"user_id_key" : "id_key_xxxx", "expires_in": 3600
}

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

参数说明

参数 类 型 说明
ToUserName string 小程序原始ID
FromUserName string 事件消息openid
CreateTime uint32 消息推送时间
MsgType string 消息类型
Event string 事件类型
openid string 核身用户的openid
out_seq_no string 业务方唯一流水号
verify_result string 核身返回的加密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

api.weixin.qq.com/cityservice…

3、请求方式

POST

4、请求格式

json

(二)请求数据说明

1、请求

参数 类型 是否必填 描述
verify_result String jsapi返回的加密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,代表本次认证成功。

参数 类型 描述
errcode int 错误码, 0表示本次api调用成功
errmsg string 本次api调用的错误信息
identify_ret int 人脸核身最终认证结果
identify_time uint32 认证时间
validate_data string 用户读的数字(如是读数字)
openid string 用户openid
user_id_key string 用于后台交互表示用户姓名、身份证的凭证
finish_time uint32 认证结束时间
id_card_number_md5 string 身份证号的md5(最后一位X为大写)
name_utf8_md5 string 姓名MD5

2、错误码对应信息

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

参考链接

  1. 微信人脸核身接口能力官方
目录
相关文章
|
1天前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
16 1
|
4天前
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
8天前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
19 2
|
11天前
|
机器学习/深度学习 人工智能 小程序
做AI运动小程序有哪些解决方案,如何进行选型?
随着深度学习技术的发展,AI运动应用如“天天跳绳”和“百分运动”变得流行。本文探讨了将AI运动功能引入微信小程序的可行性,并介绍了几种解决方案。实现AI运动计数的关键技术包括视频抽帧、人体检测、姿态识别等。文中详细描述了离线方案(全离线和半离线)和原生方案(自研AI引擎和成熟插件)的不同实现方式,并对各种方案进行了对比,建议优先选择成本低、体验佳的AI运动识别插件方案。
|
7天前
|
云安全 存储 小程序
PHP微信小程序解决方案PhpMall
PHP微信小程序解决方案PhpMall
19 0
|
8天前
|
小程序
微信小程序之weui.wxss不能引用查找的解决方案
微信小程序之weui.wxss不能引用查找的解决方案
13 0
|
22天前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
5天前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
13 0
微信小程序更新提醒uniapp
|
2月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
80 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
2月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
77 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序