具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>人脸识别认证</title> <link rel="stylesheet" href="../../common/common.css"> <link rel="stylesheet" href="../../lib/weui.min.css"> <link rel="stylesheet" href="../../lib/jquery-weui.min.css"> <style> body { background-color: #ededed; height: 100%; overflow: hidden; } </style> </head> <body> <div style="text-align: center; padding: 30px 0;"> <img id="userIcon" src="../../images/user.png" style="width: 80px; height: 80px; border-radius: 50%;"> </div> <div class="weui-cells weui-cells_form" style="margin: 0 0 20px 0;"> <div class="weui-cell"> <div class="weui-cell__bd"> <input class="weui-input" id="name" placeholder="真实姓名"> </div> </div> <div class="weui-cell"> <div class="weui-cell__bd"> <input class="weui-input" id="id_card_number" placeholder="身份证号"> </div> </div> </div> <button style="width: 94%; margin: 0 auto;" onclick="login()" type="button" class="weui-btn weui-btn_primary">下一步</button> </body> <script src="../../common/path.js"></script> <script src="../../common/common.js"></script> <script src="../../lib/jquery-1.11.1.min.js"></script> <script src="../../lib/jquery-weui.min.js"></script> <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script> function init() { $.ajax({ url: _path + '/wechat/mp/portal/getJsapiSignature?url=' + encodeURIComponent(window.location.href), type: "get", contentType: 'application/json', success: function (res) { res.debug = false; res.jsApiList = [ 'checkIsSupportFaceDetect', 'requestWxFacePictureVerify' ]; res.beta = true; wx.config(res); } }); } init(); function login() { var name = $.trim($("#name").val()); if (name === "") { $.toptip("真实姓名不能为空", 2000, "error"); return; } var id_card_number = $.trim($("#id_card_number").val()); if (id_card_number === "") { $.toptip("身份证号不能为空", 2000, "error"); return; } else { if (!carIdNumber(id_card_number)) { $.toptip("身份证号格式不正确", 2000, "error"); return; } } wx.ready(function () { wx.invoke('checkIsSupportFaceDetect', { }, function (res) { if (res.err_code == 0) { wx.invoke('requestWxFacePictureVerify', { "appid": "wx03987249d26e8aa8", "request_verify_pre_info": { 'name': name, 'id_card_number': id_card_number }, "checkAliveType": 2 }, function (ss) { if (ss.err_code == 0) { alert("识别成功") } else { alert(ss.err_code); alert(ss.err_msg); alert(ss.lib_version_code); $.toptip(ss.err_msg, 2000, "error"); return; } }) } else { $.toptip("该设备不支持人脸识别!", 2000, "error"); return; } }) }) } function carIdNumber(value) { var vcity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }; var checkCard = function () { var card = value; //是否为空 if (card === '') return false; //校验长度,类型 if (isCardNo(card) === false) return false; //检查省份 if (checkProvince(card) === false) return false; //校验生日 if (checkBirthday(card) === false) return false; //检验位的检测 if (checkParity(card) === false) { return false; } return true; }; //检查号码是否符合规范,包括长度,类型 var isCardNo = function (card) { //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; if (reg.test(card) === false) { return false; } return true; }; //取身份证前两位,校验省份 var checkProvince = function (card) { var province = card.substr(0, 2); if (vcity[province] == undefined) { return false; } return true; }; //检查生日是否正确 var checkBirthday = function (card) { var len = card.length; //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 if (len == '15') { var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/; var arr_data = card.match(re_fifteen); var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date('19' + year + '/' + month + '/' + day); return verifyBirthday('19' + year, month, day, birthday); } //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X if (len == '18') { var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/; var arr_data = card.match(re_eighteen); var year = arr_data[2]; var month = arr_data[3]; var day = arr_data[4]; var birthday = new Date(year + '/' + month + '/' + day); return verifyBirthday(year, month, day, birthday); } return false; }; //校验日期 var verifyBirthday = function (year, month, day, birthday) { var now = new Date(); var now_year = now.getFullYear(); //年月日是否合理 if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) { //判断年份的范围(3岁到100岁之间) var time = now_year - year; if (time >= 3 && time <= 100) { return true; } return false; } return false; }; //校验位的检测 var checkParity = function (card) { //15位转18位 card = changeFivteenToEighteen(card); var len = card.length; if (len == '18') { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var cardTemp = 0, i, valnum; for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i]; } valnum = arrCh[cardTemp % 11]; if (valnum == card.substr(17, 1)) { return true; } return false; } return false; }; //15位转18位身份证号 var changeFivteenToEighteen = function (card) { if (card.length == '15') { var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var cardTemp = 0, i; card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6); for (i = 0; i < 17; i++) { cardTemp += card.substr(i, 1) * arrInt[i]; } card += arrCh[cardTemp % 11]; return card; } return card; }; return checkCard(); }; </script> </html>
html页面ios系统调用不了requestWxFacePictureVerify,安卓就没问题?我先是调用checkIsSupportFaceDetect检查是否支持人脸识别,返回支持后才调用requestWxFacePictureVerify进行人脸识别,安卓没有问题,ios系统一直调不起,返回requestWxFacePictureVerify:fail,返回err_code的值为undefined 代码如下: wx.ready(function () { wx.invoke('checkIsSupportFaceDetect', { }, function (res) { if (res.err_code == 0) { wx.invoke('requestWxFacePictureVerify', { "appid": "wx03987249d26e8aa8", "request_verify_pre_info": { 'name': name, 'id_card_number': id_card_number }, "checkAliveType": 2 }, function (ss) { if (ss.err_code == 0) { alert(ss.err_code); } else { alert(ss.err_code); alert(ss.err_msg); alert(ss.lib_version_code); $.toptip(ss.err_msg, 2000, "error"); return; } }) } else { $.toptip("该设备不支持人脸识别!", 2000, "error"); return; } }) }) }
2020-05-12你是怎么调起requestWxFacePictureVerify的?我这边用了安卓可以调,ios什么版本怎么也调不了,总是返回requestWxFacePictureVerify:fail和err_code为undefined
公众号 人脸核身 requestWxFacePictureVerify ios无响应回调?人脸核身 requestWxFacePictureVerify ios微信版本号 7.0.5 安卓无任何问题,在使用ios时,虽然可以调起人脸识别,但是处理后的结果无响应(已开启debug模式) [代码]// 微信人脸识别[代码][代码]requestWxFacePictureVerify(params: FacePictureVerify): Observable<any> {[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]Observable([代码][代码] [代码][代码]subscriber => {[代码][代码] [代码][代码]wx.ready(() => { [代码][代码] [代码][代码]wx.invoke([代码][代码]'requestWxFacePictureVerify'[代码][代码], {[代码][代码] [代码][代码]appid: [代码][代码]this[代码][代码].info.appId,[代码][代码] [代码][代码]request_verify_pre_info: params.request_verify_pre_info,[代码][代码] [代码][代码]check_alive_type: params.check_alive_type,[代码][代码] [代码][代码]},[代码][代码] [代码][代码](res) => {[代码] [代码] console.log(res); // 未被触发[代码] [代码] [代码][代码]subscriber.next(res);[代码][代码] [代码][代码]});[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]);[代码][代码]}[代码]
2020-05-11