最新实现人脸识别功能

一、能力背景

        现在人脸识别功能,只对特定主主体类目进行开放,具体主体类目参考:

人脸识别开放主题类目 | 微信社区 (qom)

二、接入能力

        申请人脸识别功能的详细过程,可查看 微信人脸核身申请过程 | 微信开放社区 (qq.com)

三、具体使用方法

        1.首先我们在进行人脸识别的时候肯定需要输入 身份证和姓名进行身份信息验证,比如

        2.进行下一步的业务操作的时候,需要对当前的身份信息进行一次验证,为了保险,可以将数据发送给后端,进行验证,具体代码如下:

       前端操作:

    /* 发送请求将数据发送给后台 */
    requestIdentify() {
        const that = this;
        const data = {
            name: that.data.name,  //用户姓名
            id_card_number: that.data.card  //用户的身份证号
        }
        wx.showLoading({
            title: '加载中',
        })
        wx.request({
            url: '后台接口地址',
            data: data,
            success(res) {
                if (res.data.ec == 200) {
                    //这里验证成功进行下一步验证操作
                }else{
                    //如果没有验证成功,弹出框提示用户错误信息
                    app.errorTip(that, res.data.em, 2000);
                }
            },
            complete() {
                wx.hideLoading()
                console.log('调用完成')
            }
        })
    }

        后端操作(没有具体代码,重点跑逻辑),后端拿到这个身份信息需要调用微信提供的 api,进行身份验证,

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

        access_token 表示登录的状态 token

        2、请求方式
        POST

        3、请求数据格式

//Json 数据格式
{
    "name" : “张三”,
    "id_card_number" : "452122xxxxxxx43215"
}

        4、返回数据

参数类 型说明
errcodeint错误码
errmsgstring错误信息
user_id_keystring用于后台交互表示用户姓名、身份证的凭证
expires_inuint32user_id_key 有效期,过期需重新获取

通过验证之后,以上返回的数据也是给我们前端返回的数据,

        3.我们拿到这个 user_id_key 之后调用 jsApi,进行人脸识别验证,具体代码:
    /* 人脸识别 */
    faceRecogniza(user_id_key) {
        const that = this
        /* 检查设备是否支持人脸识别 */
        wx.checkIsSupportFacialRecognition({
            success(res) {
                /* 开始进行人脸识别 */
                wx.startFacialRecognitionVerify({
                    userIdKey: that.data.userIdKey,
                    success(res) {
                        /* 第一次验证成功 */
                        // 拿到用户凭据 
                        if (res.errCode == 0) {
                            /* 获取加密 key 再次验证 */
                            that.requestVerify(res.verifyResult)
                        }
                    },
                    fail(res) {
                        if (res.errCode == 90100) {
                            app.errorTip(that, '用户取消授权', 2000)
                        }
                    },
                    complete() {
                        console.log(111111)
                    }
                })
            },
            fail(res) {
                app.errorTip(that, '该设备暂不支持人脸识别', 2000)
            },
            complete() {
                console.log('调用完毕')
            }
        })
    }

我们调用完 js Api 接口之后,仍然需要拿到凭据 verifyResult,进行最后一次验证,保证信息的准确性,具体代码:

        前端:

//最后一次验证
requestVerify(verifyResult) {
        const that = this;
        const data = {
            verify_result: verifyResult,
        }
        wx.request({
            url: '后台接口',
            data: data,
            success(res) {
                /* 再次检验成功 */
                //执行接下来的业务逻辑
            },
            fail(res) {
                console.log(res)
            },
            complete() {

            }
        })
}

        后端:需要再次拿到我们前端传递的 verifyResult,再次调用验证身份信息,

        1、请求URL

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

        2、请求方式

        POST

        3、请求格式

        json

        4.请求数据

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

          5.返回参数说明

注: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

四、示意图展示

 (1)点击同意,点击开始验证按钮

         这里我们避免一个问题:在页面的onLoad方法中直接调用人脸识别接口最有可能导致这个问题,因为很可能 webview 还没加载完。于是,在onLoad方法中只赋值,在页面单独加个按钮,点击时触发人脸识别接口。

       

 (2)调用接口,点击下一步

 (3)开始验证

(4)提示验证结果

如果验证成功,可以进行下一步业务操作,如果验证失败,会提示错误信息,进行信息修改确认至此,人脸识别就完成了.

  • 81
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双头雄狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值