人脸识别代码解读起来太复杂,以下代码大致就是微信支付宝人脸识别认证的全部流程,大约每一行代码都做了详细的注释,可能会有不完善的可以指出来,具体的业务逻辑后续会做进一步的整理说明。
先引入进来几个封装的接口方法:
import { facewxauth, facewxback, wxSdk } from "@/api/module/base";
import wx from "weixin-js-sdk";
import axios from '@/libs/api.request'
import qs from 'qs'
//微信sdk
export const wxSdk = (data) => {
return axios.request({
url: '/auth/wx/jssdksignature.do',
method: 'post',
data: qs.stringify(data)
})
}
//微信人脸识别初始化
export const facewxauth = (data) => {
return axios.request({
url: '/icard/face/wx-auth.do',
method: 'post',
data: qs.stringify(data)
})
}
//微信人脸识别结果查询
export const facewxback = (data) => {
return axios.request({
url: '/icard/face/wx-auth-callback.do',
method: 'post',
data: qs.stringify(data)
})
}
navigator是HTML中的内置对象,包含浏览器的信息;userAgent是navigator的属性方法,可以返回由客户机发送服务器的头部的值,可以判断用户使用哪个端的哪种浏览器打开页面。作用其实就是返回当前用户所使用的是什么浏览器,toLowerCase()是将转换为小写。
userAgent变量接收的信息在这里的意思就是当前用户所使用的浏览器信息,取得浏览器的userAgent字符串
let userAgent = window.navigator.userAgent.toLowerCase();
micromessenger为微信内嵌的浏览器 ,通过userAgent是否indexOf包含MicroMessenger来判断是否在微信内置浏览器打开网页
let userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf("micromessenger") > -1) {
// 代码执行进来,则表明是在微信内置的浏览器中操作的
// 调用jssdk人脸核身校验
let req = { userName: this.name, userCardNo: this.cardNo };
//人脸识别前先进行一次初始化,调用微信人脸识别初始化封装接口的方法facewxauth(),传入参数为用户本人的信息
facewxauth(req).then((res) => {
// 用navigator.userAgent这种方法可以判断用户使用哪个端的哪种浏览器打开页面
var u = navigator.userAgent,
app = navigator.appVersion;
// 取到浏览器信息,运行逻辑判断是哪个端打开的浏览器,这里判断是否是安卓端
var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Linux") > -1; //g
// match() ⽅法可在字符串内检索指定的值,或找到⼀个或多个正则表达式的匹配
// 判断结果时这里判断是否是ios终端
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
// 取到人脸识别初始化成功后的结果 rsp
let rsp = res.data;
;
// 返回的code为200时,表明初始化成功了
if (rsp.code == 200) {
// 取到初始化成功后的数据 data1
let data1 = rsp.data;
// 调用微信jssdk
let datas = {
// 判断跳转的地址是安卓还是ios,两个不一样,所以需要判断一下
url: isAndroid
? window.location.href
: process.env.VUE_APP_BASE_URL +
process.env.VUE_APP_PUBLICPATH +
"faceauth",
};
//调用微信sdk封装接口的方法wxSdk(),接受一个参数是地址
wxSdk(datas).then((res) => {
// 把this的指向重新赋值
var that = this;
// 取到sdk接口调用成功返回的结果
let data = res.data.data;
// wx 就是引入的微信内的网页开发工具js-sdk包,所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用,通过config接口注入权限验证配置
wx.config({
beta: true, // 必填,开启内测接口调用,注入 wx.invoke 和 wx.on 方法
debug: false, // 选填,开启调试模式,默认为 false 不开启
appId: data.appid, // 必填,公众号的唯一标识
timestamp: data.timeStamp, // 必填,生成签名的时间戳
nonceStr: data.nonceStr, // 必填,生