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. 联系客服:
手机号:15068737550
- 微信:
文档更新时间: 2024-12-12 14:16 作者:admin