1. 简要描述

  • 目标小程序跳转到人脸小程序,完成人脸识别;
  • 通过人脸识别,完成个人身份的校验;
  • 比对的照片库为公安一所的校验库;
  • 商户号注册:https://plugin.shargoodata.com

2. 页面效果图


3. 支持的服务

  • 服务1:人脸核身

    功能:人脸检测,判断当前操作人是否是真人,且完成人脸和身份信息的一致性验证;
    注意:确保已订购了“人脸核身” 服务;订阅服务请前往:https://plugin.shargoodata.com/

  • 服务2:人脸活体验证

    功能:检验人脸真实性,确保操作人是真人
    注意:确保已订购了“人脸活体” 服务;订阅服务请前往:https://plugin.shargoodata.com/

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

参数名 类型 默认值 是否必填 说明
platformNo String 商户号
secretKey String 秘钥
expiresIn long token有效期 单位(秒)不能超过30天,最大为2592000
  • 小程序前端调用方法(仅供参考):

    wx.request({
    url: 'https://gauss.shargoodata.com/gauss/authorization/token.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
}

4. 支付宝跳转api

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

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

data输入信息

字段 类型 说明 必填 备注
token string token
platformNo string 商户号
orderNo string 订单号
type string 产品类型 living(默认) / identity / idCard
extraInfo object 人脸核身 携带姓名以及身份证信息
extendData object 扩展表

extraInfo

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

返回信息

字段 类型 说明
data object code,filePath,msg
success boolean 是否成功

加密库

// 这里使用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
    my.request({
      url: 'https://gauss.shargoodata.com/gauss/authorization/token.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",  // 订单号
      type: "identity",  // 产品类型
      extraInfo: {
        idName: "原则", // 仅限demo使用,调试环境请替换成真实数据
        idNumber: "327462199901122356" // 仅限demo使用,调试环境请替换成真实数据
      },
      extendData: {
        a: 1,
        b: 2
      }
    }
    my.navigateToMiniProgram({
      appId: '2021003157626188', // 跳转到另外一个小程序的appId(复制即可)
      path: 'pages/source/index?id=' + uuid,  // 跳转到小程序的页面(复制即可)
      extraData: {
        params: this.aseEncryptParams(JSON.stringify(data), uuid)
      },
      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();
  }
})

5. 查询接口:“人脸核身”处理结果的后端查询

功能:给需要安全性要求高的,希望通过服务端查询人脸核身结果的商户使用;

请求

查询接口:https://gauss.shargoodata.com/gauss/mp/ocr/query

表头:

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

表体:

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

返回信息

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

success为true时,code取值说明

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

success为false时,error_code报错码枚举:

code码 说明
509 结果记录未查到

6. 联系客服:

  • 微信:
文档更新时间: 2024-09-18 16:04   作者:admin