1. 简要描述

  • 微信小程序名称:学谷智能Face
  • 功能是通过人脸识别完成活体验证和身份验证;
  • 商户的小程序通过跳转当前小程序的方式,完成人脸识别核验后再调回商户小程序;
  • 比对的照片库为公安一所的校验库;
  • 此服务为学谷官方提供,调用前先到插件中心(https://plugin.shargoodata.com )订阅套餐包;

2. 页面效果

3. 选择的服务

  • “人脸核身2.0”
    功能:人脸检测,判断当前操作人是否是真人,且完成人脸和身份信息的一致性验证;
    注意:确保已订购了“人脸核身2.0” 试用版套餐;
  • “人脸活体验证”
    功能:检验人脸真实性,确保操作人是真人
    注意:确保已订购了“人脸活体2.0” 试用版套餐;

4. 获取 token 的接口( 建议服务端获取 )

建议服务端获取,文档地址:http://doc.shargoodata.com/docs/ocr-api/token-v2

  • 服务端获取方法

参数名 类型 默认值 是否必填 说明
platformNo String 商户号
secretKey String 秘钥
  • 小程序前端获取方法(仅供参考):

    wx.request({
    url: 'https://gauss.shargoodata.com/gauss/authorization/sdk/getToken.json',
    data: {
      platformNo: '*****', // 此为[学谷智能]商户号,请到注册邮箱查看; (商户号注册:https://plugin.shargoodata.com/)
      secretKey: '*****'
    },
    dataType: 'JSON',
    method: 'POST',
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    success: function(res) {
      console.log(res)
    }
    })

接口返回结果实例:

{
    data: "" // 返回的token
    outside_no: null
    success: true
}

5. 微信跳转api

type envVersion  = 'develop' | 'trial' | 'release'

const uuid; // 作为唯一key,16位 (仅用于加密,可以使用在线生成uuid工具,也可以后端生成)

// api文档可参考:https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html
wx.navigateToMiniProgram({
    appId: 'wxe83fe5a4f77efb58',   // 跳转到另外一个小程序的appId(复制即可)
    path: 'pages/source/index?id=' + uuid,   // 跳转到小程序的页面(复制即可)
    extraData: {
        params: aseEncryptParams(JSON.stringify(data), uuid)
    },  // data需要携带的信息,具体请见详情
    envVersion: 'release',  // 跳转的环境, 支持的枚举 envVersion
    success(res) {  // success }  // 跳转成功
})

data输入信息

字段 类型 说明 必填/选填 备注
token string token
platformNo string 商户号
orderNo string 订单号
extraInfo object 人脸核身/人脸活体 如果携带姓名以及身份证信息,自动检测人脸核身,否则检测人脸活体
extendData object 扩展表

extraInfo

字段 类型 说明 必填/选填 备注
isShowCamera boolean
idName string 姓名 人脸核身服务必传
idNumber string 身份证 人脸核身服务必传

返回信息

字段 类型 说明
data object code,filePath,msg(小程序版本filepath不可用,通过查询接口获取图片)
success boolean 执行是否成功

success为true时code取值

参数名 说明
200 验证通过
405 照片不匹配
404 库中无此号
403 相片质量校验不合格
406 身份证号与姓名不匹配
401 活体验证不通过
400 无效的参数
402 无效的证件

加密库

// 这里使用CryptoJS
import CryptoJS from 'crypto-js';
/**
 * ASE加密
 * @description 使用加密秘钥,对 需要加密的参数 进行加密
 * @param {string} word - 需要加密的参数,这里最好用JSON.stringify序列化
 * @param {string} key - 加密密钥(长度必须是 16 的整数倍,这里我们可以用uuid)
 */
export function aseEncryptParams(word: json, key: string) {
  // 加密的参数 - 从 UTF-8编码 解析出原始字符串
  const wordUTF8 = CryptoJS.enc.Utf8.parse(word);
  // 密钥 - 从 UTF-8编码 解析出原始字符串
  const keyUTF8 = CryptoJS.enc.Utf8.parse(key);

  const encrypted = CryptoJS.AES.encrypt(wordUTF8, keyUTF8, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });

  return encrypted.toString();
}

/**
 * ASE解密
 * @description 使用加密秘钥,对 需要解密的参数 进行解密
 * @param {string} encryptedWord - 需要解密的参数
 * @param {string} key - 加密密钥(长度必须是 16 的整数倍)
 */
export function aesDecryptParams(encryptedWord: string, key: string) {
  // 密钥 - 从 UTF-8编码 解析出原始字符串
  const keyUTF8 = CryptoJS.enc.Utf8.parse(key);

  const bytes = CryptoJS.AES.decrypt(encryptedWord, keyUTF8, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });

  return JSON.parse(bytes.toString(CryptoJS.enc.Utf8))
}

Demo

import CryptoJS from 'crypto-js';

Page({
  data: {
    token: ""
  },
  onLoad() {
    this.init() // 初始化获取token
  },
  init() {
    const that = this
    wx.request({
      url: 'https://gauss.shargoodata.com/gauss/authorization/sdk/getToken.json',
      data: {
        platformNo: "xxx", // 商户号
        secretKey: "xxx" // 密钥
      },
      dataType: 'JSON',
      method: 'POST',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      success: function(res) {
        that.setData({
          token: JSON.parse(res.data).data
        })
      }
    })
  },
  /**
  * 点击事件
  */
  handleToProgram() {
    const uuid = "xxx" // 作为唯一key,16位 (仅用于加密,可以使用在线生成uuid工具,也可以后端生成)
    const data = {
      token: this.data.token,
      platformNo: "xxx",  // 商户号
      orderNo: "xxx",  // 订单号
      extraInfo: {
        isShowCamera: true,
        idName: "原则", // 仅限demo使用,调试环境请替换成真实数据
        idNumber: "327462199901122356" // 仅限demo使用,调试环境请替换成真实数据
      }
    }
    wx.navigateToMiniProgram({
      appId: 'wxe83fe5a4f77efb58', // 跳转到另外一个小程序的appId(复制即可)
      path: 'pages/source/index?id=' + uuid,  // 跳转到小程序的页面(复制即可)
      extraData: {
        params: this.aseEncryptParams(JSON.stringify(data), uuid)
      },
      envVersion: 'release',
      success(res) {
        console.log(res)
      }
    })
  },
  /**
  * 加密函数
  */
  aseEncryptParams(word, key) {
    // 加密的参数 - 从 UTF-8编码 解析出原始字符串
    const wordUTF8 = CryptoJS.enc.Utf8.parse(word);
    // 密钥 - 从 UTF-8编码 解析出原始字符串
    const keyUTF8 = CryptoJS.enc.Utf8.parse(key);

    const encrypted = CryptoJS.AES.encrypt(wordUTF8, keyUTF8, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7,
    });

    return encrypted.toString();
  }
})

6. 查询接口:获取“人脸核身2.0”处理结果;

功能:除了前端返回处理结果,系统也提供服务端查询接口,便于商户通过服务端获取处理结果和照片;

请求URL:

表头:

参数名 类型 默认值 是否必填 说明
token String token

表体:

参数名 类型 默认值 是否必填 说明
platformNo String 商户号
body String 订单号

返回信息

字段 类型 说明
success boolean true代表执行成功,扣费
data object code,msg,image(base64形式,人脸照片)

success为true时code取值

参数名 说明
200 验证通过
405 照片不匹配
404 库中无此号
403 相片质量校验不合格
406 身份证号与姓名不匹配
401 活体验证不通过
400 无效的参数
402 无效的证件

7. 常规故障处理:

  • 1)Q:页面测试一直提示“拼命加载中”
    A:因开发者工具真机调试缺乏部分api,因此人脸识别暂时不支持 真机调试 ,只能用 真机预览请勿使用小程序开发者工具的 真机调试 功能进行调试,建议直接编译到手机运行,或者在有摄像头的电脑上进行调试

  • 2)插件并不是每次跳转都会跳到用户传入的url去,当且仅当插件中没有出现错误的时候(比如传入的商户号错误,或者token无效),
    正常情况下,插件调用的是wx.redirectTo跳转指定url,如果是tabBar页面,需填写urlType为tabBar

  • 3)当您希望插件结束后跳转至新的小程序页面时,success方法中更改dom的话会导致无效,这是插件跳转小程序的一个bug;
    解决方法为:success回调方法中保存插件传来的值到全局变量中,然后在onload中使用此全局变量修改dom(如果插件没有跳转到新的小程序页面,即url不传的话,此问题将不会存在)

  • 4)Q:提示“你暂时不具备此资质”;
    A:检查一下extraInfo里的isshowcamera这个字段的参数值是true还是false,把这个值改成true可正常使用;

  • 5)Q:上传到体验版或者线上,提示“验证签名失败”;
    A:在小程序公众平台的服务器配置这里,把获取token的网址配置一下;网址为:https://gauss.shargoodata.com
    然后删除小程序重新进去就可以了;

  • 6)Q:开发工具上可以,为什么发布到体验版就不行了?
    A:在小程序公众平台的服务器配置这里,把获取token的网址配置一下;网址为:https://gauss.shargoodata.com
    然后删除小程序重新进去就可以了;

  • 7)Q:页面一直显示”Lodaing…正在跳转,请稍后…”
    A:请检查参数是否正确,加密库以及加密模式要保持一致;

  • 8)Q:如何获取小程序跳转后返回的参数
    A:了解微信小程序开发文档里面的api

8. 产品体验demo:

小程序体验demo

9. 客服咨询:

手机号:15068737550

邮箱: enjoycai@shargoodata.com

微信:

文档更新时间: 2024-04-28 23:42   作者:admin