1. 简要描述

  • 目标小程序跳转到人脸小程序,完成人脸识别;
  • 通过人脸识别,完成个人身份的校验;
  • 比对的照片库为公安一所的校验库;

2. 使用前须知

  • 此插件服务由学谷智能提供,须在官网注册获取商户号才能使用;https://plugin.shargoodata.com

3. 获取 Token 的接口

功能:提供服务端和前端两种获取token方式,建议服务端获取更安全;

服务端获取方法:


简要描述:
  • api获取请求token
请求URL:
 接口地址:https://gauss.shargoodata.com/gauss/authorization/token.json
 请求方式:POST
 数据类型:x-www-form-urlencoded
请求参数:
参数名 是否必须 类型 说明
platformNo 是 string 商户号
secretKey 是 string 密钥
expiresIn 是 long token有效期,单位(秒),建议设置不超过300(5分钟),定时轮换token;最大限制2592000(30天)
响应结果:
参数名 类型 说明
success boolean 是否成功获取到token,true:成功,false:失败;
data string token
error_code string 错误代码
message string 描述
附:小程序前端调用方法(供参考):
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. 查询接口:“人脸核身”处理结果的后端查询

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

请求URL:

接口地址:https://gauss.shargoodata.com/gauss/mp/ocr/query
请求方式:POST
数据类型:x-www-form-urlencoded
表头:
参数名 类型 默认值 是否必填 说明
token String 无 是 token
表体:
参数名 类型 默认值 是否必填 说明
platformNo String 无 是 商户号
body String 无 是 订单号,与前文的orderNo相同

返回信息

字段 类型 说明
success boolean true代表执行成功,扣费;false代表执行不成功,不扣费
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 结果记录未查到
502 证件号无效或请求异常

6. 联系客服:

  • 微信:
文档更新时间: 2026-02-09 18:21   作者:admin