业务文档
业务文档
实名服务接口说明
1 概述
前提条件:第三方应用在天威诚信电子认证云服务平台(简称天威云)进行应用注册,获得应用标识和应用密钥。 异常相应结果参数及格式如下: status:状态码,1表示成功; 0表示失败; message:对调用失败原因的描述;
2 前提条件
第三方应用在天威诚信电子认证云服务平台进行应用注册,获得应用标识和应用密钥。
3 通用约束
● 所有请求内容类型默认使用application/x-www-form-urlencoded; ● 所有涉及到编码的环节一律采用UTF-8(例如URLEncoding、String转byte[]等); ● 当接口参数为二进制字节数组时,一律Base64编码后再传递; ● 所有图片数据限制在2M以内;
4 安全性设计
● 通讯安全 采用SSL安全连接,防止信息篡改、中间人窃听和重放攻击; ● 访问安全 请求中请求方必须带Content-Signature签名值,签名的内容为请求参数,签名密钥为应用密钥,确保信息的不被篡改。
代码示例:
org.eclipse.jetty.client.api.Request request = jettyhttpclient.POST(url)
.header("Content-Signature", "HMAC-SHA1 " + signature)
.content(new BytesContentProvider(byterequest), "application/json;charset=UTF-8");
HttpUtil类文件下载
5 服务接口定义
5.1 个人实名认证
个人实名失败特殊事项说明:
一、传入的身份证号有误,或者有空格等;
二、个人实名次数一天内超过10次(为保护个人信息,限制24小时同一个用户只能实名10次,防止试探用户身份信息)
三、如核实身份号传入没问题,可能的原因有 (1)做过户口迁移,新迁入的户籍信息,系统数据尚未更新; (2)现役军人, 系统没有存储军人信息; (3)刚退役的军人,新办理的户口及身份证还未更新到系统; (4)刚上大学或者刚毕业的大学生,迁移了户口,信息还未更新。 (5)身份证过期未办理,或新办理的身份证数据库还未更新。 (6)不实的身份证信息
身份证信息更新滞后是由于各个地方公安同步数据的时间问题,一直没有更新到中心,因为同步的环节较多,是县---->市---->省---->部里--→中心
关于港澳台同胞身份的认证建议灵活处理,比如如果在内地有办理手机号,那么可以采用手机三要素;有办理内地银行卡可以采用银行卡四要素等
5.1.1 个人实名综合申请接口
名称 | 内容 |
接口说明 | 个人实名身份认证,根据认证方式分配一个服务编码(serviceCode) 详见不同认证方式传参要求 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
selfUrl | String | 可选 | 人像照片网络地址 |
selfImg | String | 可选 | 人像照片base64编码串 |
bankcard | String | 必选 | 银行卡号 |
mobile | String | 必选 | 手机号 |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ;1:是,将留存照片 ; 0:否 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
备注: | 1.selfUrl与selfImg必须二选一,当它们同时存在时,优先使用selfImg。 2.当验证手机号三要素时,手机号必选; 3.当验证银行三四要素时,银行卡号必选。 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
confidence | Float | 可信度,最大为1(仅限身份证人像核验返回) |
orderNumber | String | 业务流水号 |
正常调用示例:
x
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 个人实名认证综合接口
public static void idenAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = null;
String bankcard = "null;
String mobile = "null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("bankcard", bankcard);
params.put("mobile", mobile);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1
.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
public static void main(String[] args) throws Exception {
idenAuth();//个人实名认证综合接口
}
}
正常返回示例:
xxxxxxxxxx
{
"message": "二要素比对成功。",
"status": "1",
"orderNumber": "YYCSidc201810291455302175022"
}
5.1.1.1 身份证简项
名称 | 内容 |
接口说明 | 提交姓名、身份证号,与公安身份证信息比对。 |
接口说明 | 统一调用个人实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 个人实名认证综合接口——身份证简项认证方式
public static void idenAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = null;
String bankcard = null;
String mobile = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1
.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"message": "二要素比对成功。",
"status": "1",
"orderNumber": "YYCSidc201810291455302175022",
}
错误返回示例:
xxxxxxxxxx
{
"status": 100002,
"message": "提交的参数不完整或格式不正确"
}
5.1.1.2 身份证人像核验
名称 | 内容 |
接口说明 | 提交姓名、身份证号、人像照片,与公安身份证信息以及预留人像比对。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
selfUrl | String | 可选 | 人像照片网络地址 |
selfImg | String | 可选 | 人像照片base64编码串(图片大小限制2M以内) |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ,1:是 , 0:否 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
confidence | String | 可信度,最大为100% |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test { // 个人实名认证综合接口——身份证人像核验方式
public static void portraitAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = "/9j/4AAQSkZJRgABAQEASABIA******";
String bankcard = null;
String mobile = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("selfImg", selfImg);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1
.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"confidence":93.0%,
"message":"人像比对成功",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":103013,
"confidence":3.0%,
"message": "相似度比对未通过",
"orderNumber": " idc2020011414265759110**"
}
5.1.1.3 银行卡三要素
名称 | 内容 |
认证说明 | 提交姓名、身份证号、银行卡号,与在银行开户时预留的信息比对。 |
接口说明 | 统一调用个人实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
bankcard | String | 必选 | 银行卡号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 个人实名认证综合接口——银行卡三要素认证方式
public static void bankAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = null;
String bankcard = "6227******";
String mobile = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("bankcard", bankcard);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"银行卡比对成功",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message": "提交的参数不完整或格式不正确"
}
5.1.1.4 银行卡四要素
名称 | 内容 |
认证说明 | 提交姓名、身份证号、银行卡号、手机号,与在银行开户时预留的信息比对。 |
接口说明 | 统一调用个人实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
bankcard | String | 必选 | 银行卡号 |
mobile | String | 必选 | 手机号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 个人实名认证综合接口——银行卡四要素认证方式
public static void banksAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = null;
String bankcard = "6227******";
String mobile = "1531******";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("bankcard", bankcard);
params.put("mobile", mobile);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"银行卡比对成功",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message":"提交的参数不完整或格式不正确"
}
5.1.1.5银行卡五要素
名称 | 内容 |
认证说明 | 提交姓名、身份证号、银行卡号、手机号、账户类型,与在银行开户时预留的信息比对。 |
接口说明 | 本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/bankCardFiveElements 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/bankCardFiveElements... |
请求方法 | GET/POST |
应答格式 | JSON |
请求头参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
bankcard | String | 必选 | 银行卡号 |
mobile | String | 必选 | 手机号 |
accountType | String | 必选 | 账户类型:固定值1 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
请求参数:
名称 | 类型 | 约束 | 描述 |
key | String | 必选 | 密钥 |
realname | String | 必选 | 姓名 |
idcard | String | 必选 | 身份证号 |
bankcard | String | 必选 | 银行卡号 |
mobile | String | 必选 | 手机号 |
accountType | String | 必选 | 账户类型,取值[1,2,3];1类账户,2类账户,3类账户(目前只支持1类) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
//银行卡五要素认证
public static void bankCardFiveAuth() throws Exception {
String appId = APP_ID;
//产品编码
String serviceCode = "idc0009";
//姓名
String name = "李**";
//身份证号
String idCard = "411503********8739";
//银行卡号
String bankcard = "622588****098754";
//手机号
String mobile = "153****2145";
//账户类型
String accountType = "1";
Map<String, Object> params = new HashMap<String, Object>(8);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("idCard", idCard);
params.put("name", name);
params.put("accountType", accountType);
params.put("bankcard", bankcard);
params.put("mobile", mobile);
Map<String, String> headers = new HashMap<>(8);
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonBankCardFiveAuth(params), SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/person/bankCardFiveElements", params, headers);
System.out.println(response);
}
//必须按照以下顺序依次获取map键所对应的值
private static String getPersonBankCardFiveAuth(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode") + params.get("name") + params.get("idCard") + params.get("bankcard") + params.get("mobile") + params.get("accountType");
System.out.println(ss);
return ss;
}
}
正确返回示例:
xxxxxxxxxx
{
"orderNumber":"idc202104231941283113028",
"message":"不匹配",
"status":106010
}
5.1.1.6手机号三要素
名称 | 内容 |
认证说明 | 提交姓名、身份证号、手机号,与在运营商开户留的信息比对。 |
接口说明 | 统一调用个人实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
mobile | String | 必选 | 手机号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 个人实名认证综合接口——手机号三要素认证方式
public static void idenAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String selfUrl = null;
String selfImg = null;
String bankcard = null;
String mobile = "138******";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("mobile", mobile);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idCard + selfUrl + selfImg + bankcard + mobile, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/person/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"手机三要素比对成功",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message": "提交的参数不完整或格式不正确"
}
5.1.1.7银行卡四要素(境外)
名称 | 内容 |
认证说明 | 通过传递姓名+身份证号码+手机号+银行卡卡号+证件类型,校验信息是否一致 |
接口说明 | 更具用户提供信息,校验信息是否一致 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/bankCardFourElementsOverseas 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/bankCardFourElementsOverseas |
请求方法 | POST /JSON |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
mobile | String | 必选 | 手机号 |
idtype | String | 必选 | 证件类型 (01-身份证/ 02-护照 /03-港澳证 04-台胞证 /11-回乡证) |
bankcard | String | 必选 | 银行卡号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void idenAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String name = "张三";
String idCard = "2******";
String bankcard = 62 ***1;
String mobile = "138******";
String idtype = "01";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("mobile", mobile);
params.put("idtype", idtype);
String jsonBody = JSON.toJSONString(params);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("appId", appId);
headers.put("serviceCode", serviceCode);
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(jsonBody, SECRET_KEY + serviceCode)));
String response = HttpUtil.doPostJson("http://******:**/apigate/authapi" + "/person/bankCardFourElementsOverseas", jsonBody, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"银行卡四要素(境外)比对成功",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"orderNumber": "idc202111291732133298236",
"message": "认证信息不匹配,与银行卡预留信息不一致",
"status": 108010
}
5.1.2 H5数读活体人脸验证接口
名称 | 内容 |
接口说明 | 分两步调用: 1、获取验证数读活体检测时所需要读的数字 2、根据录制上传的视频进行活体人脸比对(视频录制时长:2~5s) |
请求地址 | 生产环境: 【H5获取唇语数字】https://open.itruscloud.com/apigate/authapi/h5/getlips 测试环境: 【H5获取唇语数字】https://demo-open.itruscloud.com/apigate/authapi/h5/getlips |
生产环境: 【H5活体人脸验证】https://open.itruscloud.com/apigate/authapi/h5/bodyFaceCheck 测试环境: 【H5活体人脸验证】https://demo-open.itruscloud.com/apigate/authapi/h5/bodyFaceCheck | |
请求方法 | GET/POST |
应答格式 | JSON |
【H5获取唇语数字】
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idnumber | String | 必选 | 身份证号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ;1:是,将留存照片 ; 0:否 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
lips | String | 需要读的数字 |
orderNo | String | 获取唇语数字单号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
//H5获取唇语
public static void h5Auth() throws Exception {
String appId = APP_ID;
String serviceCode = "idc2008";
String name = "晶";
String idnumber = "612429199001121316";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idnumber", idnumber);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idnumber, SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/h5/getlips", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"status": 1,
"message": "成功",
"lips": "3520",
"orderNo": "idc2019032810453803858**"
}
错误返回示例:
xxxxxxxxxx
{
"status": 100005,
"message": "服务密钥错误"
}
【H5活体人脸验证】
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
name | String | 必选 | 姓名 |
idnumber | String | 必选 | 身份证号 |
orderNo | String | 必选 | 获取唇语数字单号 |
saveFlag | String | 可选 | 是否保存图片标识 ,1:是 , 0:否 |
videoFile | String | 必选 | 录制的视频(需传base64)视频大小限制:3M以内 |
备注: | 当活体人脸比对是数读时,serviceCode字段填写获取唇语接口中的此字段;orderNo字段是在获取唇语时返回的。 |
返回值:
名称 | 类型 | 描述 |
status | int | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
confidence | Float | 相似度比对结果(75以上为通过) |
orderNo | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
//H5活体校验
public static void h5portraitAuth() throws Exception {
String appId = APP_ID;
String serviceCode = "idc2009";
String name = "兴";
String idnumber = "131024198801150912";
String orderNo = "";
String videoFile = Img2Base64Util.getImgStr("d:\\a93cf6abdb2387bbeeafe05886909560.mp4");
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idnumber", idnumber);
params.put("orderNo", orderNo);
params.put("videoFile", videoFile);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idnumber + orderNo + videoFile, SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/h5/bodyFaceCheck", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"校验成功",
"confidence":"75.0",
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":2,
"message":"相似度太低",
"confidence":"0.0",
"orderNumber":"idc2020011510035834260**"
}
5.1.3 H5静默/活体人脸验证接口
名称 | 内容 |
接口说明 | 根据录制上传的视频进行活体人脸比对(视频录制时长:3~5s) |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/h5/bodyFaceCheck 测试环境: https://demo-open.itruscloud.com/apigate/authapi/h5/bodyFaceCheck |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
name | String | 必选 | 姓名 |
idnumber | String | 必选 | 身份证号 |
videoFile | String | 必选 | 录制的视频(需传base64)视频大小限制:3M以内 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ;1:是,将留存照片 ; 0:否 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
confidence | Float | 相似度比对结果(75以上为通过) |
orderNo | String | 业务流水号 |
faceImage | String | 通过时返回 base64编码人脸裁剪图片 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
//H5活体校验
public static void h5portraitAuth() throws Exception {
String appId = APP_ID;
String serviceCode = "idc2009";
String name = "兴";
String idnumber = "131024198801150912";
String orderNo = "";
String videoFile = Img2Base64Util.getImgStr("d:\\a93cf6abdb2387bbeeafe05886909560.mp4");
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idnumber", idnumber);
params.put("orderNo", orderNo);
params.put("videoFile", videoFile);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + name + idnumber + orderNo + videoFile, SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/h5/bodyFaceCheck", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"status":1,
"message":"校验成功",
"confidence":"75.0",
"orderNo":"idc2020011414265759110**",
"faceImage":"base64编码图片"
}
错误返回示例:
xxxxxxxxxx
{
"status":2,
"message":"相似度太低",
"confidence":"0.0",
"orderNo":"idc2020011414265759110**"
}
5.1.4身份证OCR-API
名称 | 内容 |
接口说明 | 根据上传身份证正面、反面照片获取身份证具体信息。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/image/ocrCheck 测试环境: https://demo-open.itruscloud.com/apigate/authapi/image/ocrCheck |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
base64File | String | 必选 | 图片的base64格式字符串 (图片限制大小3M以内) |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权,1:是 , 0:否 |
返回值:
名称 | 类型 | 描述 |
status | int | 1:成功 2:身份证OCR验证失败,其他:详见“错误码”的描述 |
message | String | 接口执行结果信息 |
info | String | 获具体信息【JSON格式字符串】见下 |
orderNo | String | 业务流水号 |
【JSON格式字符串】
info具体返回信息格式
xxxxxxxxxx
身份证正面:
{
"number":"身份证号",
"address":"地址",
"gender":"性别",
"month":"出生月",
"nation":"民族",
"year":"出生年",
"name":"姓名",
"day":"出生日"
}
身份证反面:
{
"authority":"签发机关",
"timelimit":"身份证有效期"
}
正常调用示例:
xxxxxxxxxx
public class OcrTest {
private static final String URL = "http://open.itruscloud.com/apigate";
private static final String APP_ID = "488**********41";
private static final String SECRET_KEY = "e1fa6e*******************20214f9";
//身份证ocr验证--正面
public static void idCardFort() throws Exception {
String appId = APP_ID;
String serviceCode = "idc1004";
String base64File = Img2Base64Util.getImgStr("D:\\img\\wxh.png");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("base64File", base64File);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/authapi/image/ocrCheck", params, headers);
System.out.println(response);
}
//身份证ocr验证--反面
public static void idCardBank() throws Exception {
String appId = APP_ID;
String serviceCode = "idc1004";
String base64File = Img2Base64Util.getImgStr("D:\\img\\yt1.jpg");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("base64File", base64File);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/authapi/image/ocrCheck", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
身份证正面:
{
"orderNo":"idc201907171019104122154",
"message":"身份证OCR验证成功",
"status":1,
"info":"{"number":"36233***********3094","address":"江西省上饶市鄱阳县谢家滩镇陈七村009号","gender":"男","month":"6","nation":"汉","year":"1996","name":"陈**","day":"5"}"
}
身份证反面:
{
"orderNo":"idc201907171021433926475",
"message":"身份证OCR验证成功",
"status":1,
"info":"{"authority":"上海市公安局闵行分局","timelimit":"20060307-20260307"}"
}
5.1.5银行卡OCR-API
名称 | 内容 |
接口说明 | 根据上传身份证正面、反面照片获取身份证具体信息。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/image/bankcardCheck 测试环境: https://demo-open.itruscloud.com/apigate/authapi/image/bankcardCheck |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
base64File | String | 必选 | 图片的base64格式字符串 (图片限制大小3M以内) |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权,1:是 , 0:否 |
返回值:
名称 | 类型 | 描述 |
status | int | 1:成功 2:银行卡OCR验证失败,其他:详见“错误码”的描述 |
message | String | 接口执行结果信息 |
info | String | 获具体信息(JSON格式字符串)见下 |
orderNo | String | 业务流水号 |
【JSON格式字符串】
info具体返回信息格式
xxxxxxxxxx
{
"bank_identification_number": "发卡行标识代码",
"card_number": "银行卡号",
"bank_name": "发卡行名称",
"card_name": "卡片名称",
"card_type": "卡片类型(注:支持借记卡,贷记卡,准贷记卡及预付费卡类型的 识别)"
}
正常调用示例:
xxxxxxxxxx
public class OcrTest {
private static final String URL = "http://open.itruscloud.com/apigate";
private static final String APP_ID = "488**********41";
private static final String SECRET_KEY = "e1fa6e*******************20214f9";
//银行卡ocr验证
public static void bankCard() throws Exception {
String appId = APP_ID;
String serviceCode = "idc1005";
String base64File = Img2Base64Util.getImgStr("D:\\img\\gs.jpg");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("base64File", base64File);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/authapi/image/bankcardCheck", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"orderNo": "idc201907171022497041720",
"message": "银行卡OCR验证成功",
"status": 1,
"info": "{"bank_identification_number":"01030000","card_number":"9559980210373015416","bank_name":"农业银行","card_name":"借记卡(银联卡)","card_type":"借记卡"}"
}
5.1.6人脸比对-API
名称 | 内容 |
认证说明 | 提交两张通过接口上传的人脸照片进行比对,通过相似度判断是否为同一个人 |
接口说明 | 人脸比对接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/image/personFace 测试环境: https://demo-open.itruscloud.com/apigate/authapi/image/personFace |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
selfieImgUrl | String | 可选 | 人像照片网络地址1 |
selfieImg | String | 可选 | 人像照片base64编码串1 |
faceImgUrl | String | 可选 | 人像照片网络地址2 |
faceImg | String | 可选 | 人像照片base64编码串2 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权,1:是 , 0:否 |
备注: | selfieUrl与selfieImg必须二选一,当它们同时存在时,优先使用selfieImg;faceImgUrl与faceImg必须二选一,当它们同时存在时,优先使用faceImg。 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
confidence | String | 可信度,最大为100.00% |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
public class FaceTest {
private static final String URL = "http://open.itruscloud.com/apigate";
private static final String APP_ID = "a929c*******e46";
private static final String SECRET_KEY = "7d837a8f7b1********02cc94815b6db";
//人脸比对
public static void PersonFaceVerification() throws Exception {
String appId = APP_ID;
String serviceCode = "idc3001";
String selfieImgUrl = null;
String faceImgUrl = null;
String selfieImg = Img2Base64Util.getImgStr("D:\\天威工作\\picture\\test01.jpg");
String faceImg = Img2Base64Util.getImgStr("D:\\天威工作\\picture\\test01.jpg");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
// params.put("selfieImgUrl", selfieImgUrl);
// params.put("faceImgUrl", faceImgUrl);
params.put("selfieImg", selfieImg);
params.put("faceImg", faceImg);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/authapi/image/personFace", params, headers);
System.out.println(response);
}
// 必须按照以下顺序依次获取map键所对应的值
private static String getPersonSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode") + params.get("faceImgUrl") + params.get("faceImg") + params.get("selfieImgUrl") + params.get("selfieImg");
System.out.println(ss);
return ss;
}
public static void main(String[] args) throws Exception {
PersonFaceVerification();
}
}
正常返回示例:
xxxxxxxxxx
{
"orderNumber": "idc201908281827056117848",
"confidence": "80.00%",
"message": "人脸比对成功 ",
"status": 1
}
错误返回示例:
xxxxxxxxxx
{
"orderNo": "idc202006231637542474228",
"confidence": "60.2%",
"message": "相似度太低",
"status": 103013
}
5.1.7驾驶证OCR-API
名称 | 内容 |
接口说明 | 根据上传驾驶证正面、反页照片获取驾驶证具体信息。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/image/drivingLicenceOcr 测试环境: https://demo-open.itruscloud.com/apigate/authapi/image/drivingLicenceOcr |
请求方法 | POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
base64File | String | 必选 | 图片的base64格式字符串 (图片限制大小1M以内) |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权,1:是 , 0:否 |
返回值:
名称 | 类型 | 描述 |
status | int | 1:成功 其他失败:详见“错误码”的描述 |
message | String | 接口执行结果信息 |
info_Positive | Object | 扫描驾驶证正页信息【JSON】见下 |
info_negative | Object | 扫描驾驶证反页信息【JSON】见下 |
orderNo | String | 业务流水号 |
具体返回信息格式
名称 | 类型 | 说明 |
info_Positive | string | 正页识别信息 |
idcard | string | 驾驶证号 |
name | string | 姓名 |
sex | string | 性别 |
nationality | string | 国籍 |
address | string | 住址 |
birthday | string | 生日 |
firstGetDocDate | string | 初次领证日期 |
type | string | 准驾车型 |
begin_date | string | 有效起始日期 |
end_date | string | 有效截止日期 |
info_negative | string | 副页识别信息 |
file_number | string | 档案编号 |
record | string | 记录 |
barcode | string | 条形码编号 |
xxxxxxxxxx
{
"info_negative": {
"file_number": "", //
"record": "",
"idcard": "",
"name": "",
"barcode": ""
},
"orderNo": "idc202101041825339297404",
"info_Positive": {
"birthday": "1992-06-03",
"end_date": "2021-07-26",
"address": "广东省河源市源城区红星路69号",
"nationality": "中国",
"firstGetDocDate": "2015-07-26",
"sex": "男",
"begin_date": "2015-07-26",
"idcard": "4115031992xxxxxxxx",
"name": "xxx",
"type": "C1"
},
"message": "驾驶证扫描成功",
"status": 1
}
正常调用示例:
xxxxxxxxxx
public class OcrTest {
private static final String URL = "http://open.itruscloud.com/apigate";
private static final String APP_ID = "488**********41";
private static final String SECRET_KEY = "e1fa6e*******************20214f9";
/**
* 驾驶证OCR
*
* @throws Exception 异常
*/
public static void drivingLicence() throws Exception {
String appId = APP_ID;
//产品编码
String serviceCode = "ocr0001";
//图片base64
String base64File = Img2Base64Util.getImgStr("G:\\images\\微信图片_20201225172324.jpg");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("base64File", base64File);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/image/drivingLicenceOcr", params, headers);
System.out.println(response);
}
//必须按照以下顺序依次获取map键所对应的值
private static String getPersonSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode") + params.get("base64File");
System.out.println(ss);
return ss;
}
}
5.1.8驾驶证三要素
名称 | 内容 |
认证说明 | 提交姓名、身份证号、驾驶证档案号,进行驾驶证核验,成功后返回扣分情况。 |
接口说明 | 本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/drivingLicenceVerify 测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/drivingLicenceVerify |
请求方法 | POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
name | String | 必选 | 姓名 |
idCard | String | 必选 | 身份证号 |
recordId | String | 必选 | 驾驶证档案号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
code | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
score | String | 驾驶证扣分情况 |
正常调用示例:
xxxxxxxxxx
// 驾驶证三要素认证
public static void drivingLicenceVerify() {
String appId = APP_ID;
//产品编码
String serviceCode = "idc0007";
//姓名
String name = "xxx";
//身份证号
String idCard = "411503xxxxxxxxxxxx";
//手机号
String recordId = "4416xxxx9305";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idCard", idCard);
params.put("recordId", recordId);
try {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getDrivingSign(params), SECRET_KEY)));
System.out.println(new Base64().encodeToString(HMACSHA1.getHmacSHA1(getPersonSign(params), SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/person/drivingLicenceVerify", params, headers);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
//必须按照以下顺序依次获取map键所对应的值
private static String getDrivingSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode") + params.get("name") + params.get("idCard")
+ params.get("recordId");
System.out.println(ss);
return ss;
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"驾驶证三要素核验成功",
"score":"0"
"orderNumber":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message": "提交的参数不完整或格式不正确"
}
5.1.9 H5眨眼活体验证接口
提示:未完成认证或认证结果已过期的可能原因
1.验证次数过多超限后被风控,风控后的订单为无效,查询结果为未完成认证或认证结果已过期 2.用户中途退出刷脸,没有完成人脸验证的流程,没有比对,查询结果为未完成认证或认证结果已过期 3.操作超时,请退出重试 ,验证时间须在5分钟内完成,失效后无法进入刷脸流程,查询结果为未完成认证或认证结果已过期 4.视频格式或大小不合法 文件或视频不合法,无法进行比对,查询结果为未完成认证或认证结果已过期 5.上传的视频非实时录制,被时间戳校验拦截,查询结果为未完成认证或认证结果已过期 6.查询超过3天的订单返回未完成认证或认证结果已过期 7.app调用H5眨眼需要参考下面做下兼容配置:https://cloud.tencent.com/document/product/1007/61076
1. 如有IP白名单设置,需要放开地址:kyc.qcloud.com、miniprogram-kyc.tencentcloudapi.com、www.itruscloud.com、www.webank.com
名称 | 内容 |
接口说明 | 获取启用H5眨眼视频录制链接(返回的链接有效期为5分钟) |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/h5/blink 测试环境: https://demo-open.itruscloud.com/apigate/authapi/h5/blink |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
name | String | 必选 | 姓名 |
idnumber | String | 必选 | 身份证号 |
blinkUrl | String | 必选 | H5 人脸核身完成后回调的第三方 URL,需要第三方提供完整 URL 且做 URL Encode 完整 URL Encode 示例:原 URL 为https://cloud.tencent.comEncode 后为https%3a%2f%2fcloud.tencent.com |
fromType | String | 必选 | browser:表示在浏览器启动刷脸 App:表示在 App 里启动刷脸 |
successLocation | String | 可选 | 认证成功跳转页面 |
failLocation | String | 可选 | 认证失败跳转页面 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ;1:是,将留存照片 ; 0:否 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
loginUrl | String | 认证链接 |
orderNo | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
//H5眨眼活体校验
public static void h5BlinkAuth() throws Exception {
String appId = APP_ID;
String serviceCode = "idc2009";
String name = "兴";
String idnumber = "131024198801150912";
String orderNo = "";
String blinkUrl = "http://localhost:8084/authweb/public/blink/callBack";
String fromType = "browser";
String successLocation = "http://www.baidu.com";
String failLocation = "http://www.baidu.com";
Map<String, Object> params = new HashMap<>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("idnumber", idnumber);
params.put("orderNo", orderNo);
params.put("blinkUrl", URLEncoder.encode(blinkUrl,"UTF-8"));
params.put("fromType", fromType);
params.put("successLocation", successLocation);
params.put("failLocation", failLocation);
Map<String,String> headers=new HashMap<>(4);
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(getH5BlinkSign(params), SECRET_KEY)));
String response=HttpUtil.doPost(URL+"/h5/blink", params, headers);
System.out.println(response);
}
//H5眨眼认证秘钥计算规则
private static String getH5BlinkSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode")
+ params.get("name") + params.get("idnumber")
+ params.get("blinkUrl") + params.get("fromType")
+ params.get("successLocation") + params.get("failLocation");
System.out.println(ss);
return ss;
}
正常返回示例:
xxxxxxxxxx
{
"orderNo": "idc202103261045253536353",
"loginUrl": "https://ida.webank.com/api/web/login?&orderNo=idc202103261045253536353&sign=3374d804464c62ca2bbb6448347c6ec327b046f0&from=null&webankAppId=TIDAm7wi&userId=tianwei0002&version=1.0.0&nonce=1c5aff0104b74b5c83a458955e38c217&h5faceId=d34c080a3296d7a462a42b71c8042d1b&url=http%3A%2F%2F192.168.101.35%3A8080",
"message": "获取启用H5认证链接成功",
"status": 1
}
错误返回示例:
xxxxxxxxxx
{
"message": "姓名或身份证不合法",
"status": 100002
}
5.1.10 回调用户接口说明
名称 | 内容 |
接口说明 | 用户眨眼认证完成之后将结果通知到用户 |
请求地址 | 用户在5.1.9参数中传入的blinkUrl |
请求方法 | POST |
应答格式 | JSON |
请求头 | Content-Signature:用户可以使用该参数对请求数据进行验签,保证数据不被篡改。值为“HMAC-SHA1 ”+ HmacSHA1算法签名值的base64,签名数据为整个body,使用的密钥为appId对应的secretKey。 |
请求参数:
名称 | 类型 | 描述 |
status | Long | 1:成功 其他:失败,详见“错误码”的描述 |
message | String | 结果信息 |
confidence | Float | 眨眼活体检测分数 |
orderNo | String | 业务流水号 |
返回值:
名称 | 类型 | 描述 |
code | Long | 1:成功 ;其他失败(成功不再回调,失败重新回调3次,每次间隔一秒) |
message | String | 接口执行结果信息 |
正常调用示例:
xxxxxxxxxx
//H5眨眼活体校验
public static void h5BlinkAuth() throws Exception {
HashMap<String, Object> param = new HashMap<>();
param.put("status", 1);
param.put("message", "认证成功");
param.put("confidence", 90f);
param.put("orderNo", "idc202103261045253536353");
String response= HttpUtil.doPostJson(blinkUrl, JSON.toJSONString(param));
System.out.println(response);
}
正常返回示例:
xxxxxxxxxx
{
"message": "认证成功",
"code": 1
}
5.1.11 汽车违章信息查询
名称 | 内容 |
接口说明 | 根据用户输入车辆信息,查询违章信息,返回结果 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/traffic [测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/traffic] |
请求方法 | POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
carNumber | String | 必选 | 车牌号 |
carType | String | 必选 | 号牌种类(01:大型汽车;02:小型汽车;51:新能源大车;52:新能源小车) |
carCode | String | 必选 | 车架号(完整17位) |
carEngine | String | 必选 | 发动机号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 ;其他失败 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
trafficInfo | Object | 违章信息(status字段返回1时有此字段信息) |
times | String | 违章条数 |
fineTotal | String | 违章罚款合计 |
integralTotal | String | 违章积分合计 |
info | List | 违章详细信息 |
status | String | 违章记录状态(1:未处理-未缴费;2:已处理-未缴费;3:已处理-已缴费(只有部分情况返回,由于无法统计,以实际返回为准)) |
time | String | 违章时间 |
location | String | 违章地址 |
fines | String | 违章罚款金额,单位:元 |
penaltyPoint | String | 违章扣分 |
reason | String | 违章原因 |
city | String | 违章所在城市名称 |
number | String | 违章代码 |
正常调用示例:
xxxxxxxxxx
// 汽车违章信息查询
public static void trafic() {
Map<String, Object> params = new HashMap<String, Object>(8);
String serviceCode = "idc0010";
params.put("appId", APP_ID);
params.put("serviceCode", serviceCode);
params.put("carNumber", "冀RG**22");
params.put("carType", "02");
params.put("carCode", "LFV3A23C*****9997");
params.put("carEngine", "C4**50");
try {
Map<String, String> headers = new HashMap<>(4);
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getTrafficSign(params), SECRET_KEY)));
String response = HttpUtil.doPost(URL + "/person/traffic", params, headers);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
//必须按照以下顺序依次获取map键所对应的值
private static String getTrafficSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode")
+ params.get("carNumber") + params.get("carType")
+ params.get("carCode")+ params.get("carEngine");
return ss;
}
正常返回示例:
xxxxxxxxxx
{
"orderNumber":"idc202106011753394399490",
"status":1,
"trafficInfo":{
"fineTotal":"200",
"times":"1",
"info":[
{
"penaltyPoint":"3",
"number":"12356",
"reason":"机动车违反禁止标线指示的",
"city":"江苏南京",
"fines":"100",
"location":"幸福路111",
"time":"2019-01-01 00:00:00",
"status":"0"
}
],
"integralTotal":"3"
}
}
5.1.12 商汤数字签名验证接口
名称 | 内容 |
接口说明 | 验证用户在服务端接收到的来自移动端(活体SDK)的图片和数字签名的完整性 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/person/dataSignatureVerification [测试环境: https://demo-open.itruscloud.com/apigate/authapi/person/dataSignatureVerification] |
请求方法 | POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
dataDigest | String | 必选 | 图片或protobuf的SHA256的Base64 |
signature | String | 必选 | 图片或protobuf对应的数字签名 |
trustSource | String | 必选 | 商汤信任源,目前使用OCR |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 ;其他失败 |
message | String | 接口执行结果信息 |
passed | String | 验证是否通过:true通过,false不通过 |
requestId | String | 请求id |
timestamp | String | 请求时间戳 |
正常调用示例:
xxxxxxxxxx
{
"requestId":"e1b14e08395fb78cc896dbe362d4a34c",
"passed":true,
"message":"验证通过",
"status":200,
"timestamp":"1628049216783"
}
正常返回示例:
xxxxxxxxxx
{
"requestId":"576f235fc333b6b0eff28755a5e850f1",
"passed":false,
"message":"验证不通过",
"status":400,
"timestamp":"1628056931402"
}
##
5.2企业实名认证
企业实名失败特殊事项说明:
一、同一企业24h内打款次数超过2次(为防止触发银行的反洗钱机制,防止用户往同一账户打款次数过多);
二、预演环境企业实名认证相关接口中,如果涉及到法人信息认证的情况时,法人姓名带有"测试"字样时,会导致实名认证失败。
名称 | 内容 |
接口说明 | 企业实名身份认证,根据认证方式分配一个服务编码(serviceCode),支持多种认证方式组合(企业基础信息核验、法定代表人身份证简项、代理人身份证简项),确定参数必填字段,详见不同认证方式传参要求。 |
请求地址 | 生产环境:https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境:https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码 |
legalName | String | 可选 | 法定代表人姓名 |
legalId | String | 可选 | 法定代表人身份证号 |
legalUrl | String | 可选 | 法定代表人人像照片网络地址 |
legalImg | String | 可选 | 法定代表人人像照片base64编码串 |
agentName | String | 必选 | 代理人姓名 |
agentId | String | 必选 | 代理人身份证号 |
agentUrl | String | 可选 | 代理人人像照片网络地址 |
agentImg | String | 可选 | 代理人人像照片base64编码串 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ;1:是,将留存图片 ; 0:否 |
备注: | 1.当legalUrl与legalImg同时存在时,优先使用legalImg 2.当agentUrl与agentImg同时存在时,优先使用agentImg 企业工商信息: 1.当type为ET_PE和ET_SE时,idCode必填,orgCode非必填; 2.当type为ET_OU,工商不支持
企业登记信息: 1.当type为ET_PE和ET_SE时,idCode必填,orgCod非必填; 2.当type为ET_OU时,idCode和orgCod二选一 必填,填写组织机构代码/社会统一信用代码 |
返回值:
名称 | 类型 | 描述 | ||
status | Long | 1:成功,其他:失败 | ||
message | String | 接口执行结果信息 | ||
orderNumber | String | 业务流水号 | ||
enterpriseInfo | Map | Name | String | 公司名称 |
No | String | 注册号 | ||
BelongOrg | String | 登记机关 | ||
OperName | String | 法定代表人 | ||
StartDate | String | 成立日期 | ||
EndDate | String | 注销/吊销日期(正常企业返回,异常企业返回) | ||
Status | Long | 登记状态(存续、在业、注销等) | ||
CreditCode | String | 统一社会信用代码 | ||
RegistCapi | String | 注册资本 | ||
EconKind | String | 类型 | ||
Address | String | 住所 | ||
Scope | String | 经营范围 | ||
TermStart | Long | 营业期限自 | ||
TermEnd | String | 营业期限至 | ||
CheckDate | Long | 核准日期 | ||
enterpriseInfo1 | Map | Name | String | 组织机构名称 |
Code | String | 组织机构代码 | ||
CreditCode | String | 统一信用代码 | ||
LegalPerson | String | 组织机构法人 | ||
Address | String | 组织机构地址 | ||
StartAvaDate | Long | 颁发日期 | ||
EndEvaDate | Long | 失效日期 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 企业实名认证综合接口
public static void licenseAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = null;
String legalName = "赵**";
String legalId = "3307211*******56916";
String legalUrl = null;
String legalImg = null;
String agentName = "王**";
String agentId = " 1407234*******09732 ";
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
params.put("legalName", legalName);
params.put("legalId", legalId);
params.put("agentName", agentName);
params.put("agentId", agentId);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
//营业执照+法定代表人+代理人组合认证方式
{
"enterpriseInfo": {
"OperName": "徐海柱",
"TeamEnd": "长期",
"No": "440105000057604",
"Name": "广东方向盘牛品牌策划设计有限公司",
"Status": "在营(开业)",
"EndDate": null,
"CreditCode": "91440101661810975F",
"StartDate": 1177344000000,
"Address": "广州市海珠区广州大道南51号201室(仅限办公用途)",
"RegistCapi": "(万人民币元)1001.000000",
"BelongOrg": "广州市海珠区工商行政管理局",
"EconKind": "有限责任公司(自然人投资或控股)",
"CheckDate": 1473782400000,
"TermStart": 1177344000000,
"Scope": ""
},
"message": "企业基本信息比对成功。企业法人四要素比对成功。二要素比对成功。",
"status": "1",
"orderNumber": "yycsidb201811281458037749629"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message":"提交参数信息不完整或参数格式不正确",
}
5.2.1.1 企业工商信息核验
名称 | 内容 |
认证说明 | 提交营业执照信息,与工商注册信息注册信息进行比对,确定企业是否真实存在,并核验营业状态以及营业期限。 |
接口说明 | 统一调用企业实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
备注: | 1.当type为ET_PE和ET_SE时,idCode必填,orgCode非必填; 2.当type为ET_OU,工商不支持 |
返回值:
名称 | 类型 | 描述 | ||
status | Long | 1:成功,其他:失败 | ||
message | String | 接口执行结果信息 | ||
orderNumber | String | 业务流水号 | ||
enterpriseInfo | Map | Name | String | 公司名称 |
No | String | 注册号 | ||
BelongOrg | String | 登记机关 | ||
OperName | String | 法定代表人 | ||
StartDate | String | 成立日期 | ||
EndDate | String | 注销/吊销日期 | ||
Status | Long | 登记状态(存续、在业、注销等) | ||
CreditCode | String | 统一社会信用代码 | ||
RegistCapi | String | 注册资本 | ||
EconKind | String | 类型 | ||
Address | String | 住所 | ||
Scope | String | 经营范围 | ||
TermStart | Long | 营业期限自 | ||
TermEnd | String | 营业期限至 | ||
CheckDate | Long | 核准日期 |
正常调用示例:
xxxxxxxxxx
public static void licenseAuth() throws Exception {
String appId = APP_ID;
//产品编码
String serviceCode = "idb0003";
//企业类型
String type = "ET_PE";
//企业名称
String name = "北京天威诚信电子商务服务有限公司";
//企业社会统一信用代码
String idCode = "911101088020176153";
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getEnterpriseSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String body = JSON.toJSONString(params);
String response = HttpUtil.doPostJson(URL + "/enterprise/authIden", body, headers);
System.out.println(response);
}
private static String getEnterpriseSign(Map<String, Object> params) {
String ss = (String) params.get("appId") + params.get("serviceCode") + params.get("type") + params.get("name")
+ params.get("idCode") + params.get("orgCode") + params.get("legalName") + params.get("legalId") + params.get("legalUrl")
+ params.get("legalImg") + params.get("agentName") + params.get("agentId") + params.get("agentUrl") + params.get("agentImg");
System.out.println(ss);
return ss;
}
正确返回示例:
xxxxxxxxxx
{
"status": 1,
"message": "企业基本信息比对成功。",
"enterpriseInfo": {
"Status": "在营(开业)",
"RegistCapi": "(万美元)4520.000000",
"No": "110000410144104",
"BelongOrg": "北京市工商行政管理局海淀分局",
"CreditCode": "911101088020176153",
"OperName": "张王李赵",
"EconKind": "有限责任公司(外国法人独资)",
"Address": "北京市某区某路某大厦666号",
"Name": "赵县安林小卖部。",
"TermStart": 948124800000,
"StartDate": 948124800000,
"TeamEnd": "1610812800000",
"Scope": "开发、生产计算机软件;提供相关技术咨询、技术服务、技术培训;承接计算机网络系统工程;销售自产产品、医疗器械II类;货物进出口、技术进出口、代理进出口;设计、制作、代理、发布广告;软件开发;销售第三类医疗器械。(销售第三类医疗器械以及依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动。)",
"CheckDate": 1549814400000
},
"orderNo":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message":"提交参数信息不完整或参数格式不正确",
}
5.2.1.1 企业登记信息核验
名称 | 内容 |
认证说明 | 提交营业执照/组织机构代码信息,与企业登记信息/组织机构代码注册信息进行比对,确定企业是否真实存在,并核验营业状态以及营业期限。 |
接口说明 | 统一调用企业实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码/社会统一信用代码/注册号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
备注 | 1、当type为ET_PE和ET_SE时,idCode必填,orgCod非必填; 2、当type为ET_OU时,idCode和orgCod二选一 必填,填写组织机构代码/社会统一信用代码 |
返回值:
名称 | 类型 | 描述 | ||
status | Long | 1:成功,其他:失败 | ||
message | String | 接口执行结果信息 | ||
orderNumber | String | 业务流水号 | ||
enterpriseInfo | Map | Name | String | 公司名称 |
No | String | 注册号 | ||
BelongOrg | String | 登记机关 | ||
OperName | String | 法定代表人 | ||
StartDate | String | 成立日期 | ||
EndDate | String | 注销/吊销日期 | ||
Status | Long | 登记状态(存续、在业、注销等) | ||
CreditCode | String | 统一社会信用代码 | ||
RegistCapi | String | 注册资本 | ||
EconKind | String | 类型 | ||
Address | String | 住所 | ||
Scope | String | 经营范围 | ||
TermStart | Long | 营业期限自 | ||
TermEnd | String | 营业期限至 | ||
CheckDate | Long | 核准日期 | ||
enterpriseInfo1 | Map | Name | String | 组织机构名称 |
Code | String | 组织机构代码 | ||
CreditCode | String | 统一信用代码 | ||
LegalPerson | String | 组织机构法人 | ||
Address | String | 组织机构地址 | ||
StartAvaDate | Long | 颁发日期 | ||
EndAvaDate | Long | 失效日期 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 企业实名认证综合接口——营业执照认证方式
public static void licenseAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = null;
String legalName = null;
String legalId = null;
String legalUrl = null;
String legalImg = null;
String agentName = null;
String agentId = null;
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
Map<String, String> headers = new HashMap<>();
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
// 企业实名认证综合接口——营业执照+组织机构代码认证方式
public static void organizationAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = "******";
String legalName = null;
String legalId = null;
String legalUrl = null;
String legalImg = null;
String agentName = null;
String agentId = null;
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
params.put("orgCode", orgCode);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status": 1,
"message": "企业基本信息比对成功。",
"enterpriseInfo": {
"Status": "在营(开业)",
"RegistCapi": "(万美元)4520.000000",
"No": "110000410144104",
"BelongOrg": "北京市工商行政管理局海淀分局",
"OperName": "张王李赵",
"EconKind": "有限责任公司(外国法人独资)",
"Address": "北京市某区某路某大厦666号",
"Name": "赵县安林小卖部。",
"TermStart": 948124800000,
"StartDate": 948124800000,
"TeamEnd": 1610812800000,
"Scope": "开发、生产计算机软件;提供相关技术咨询、技术服务、技术培训;承接计算机网络系统工程;销售自产产品、医疗器械II类;货物进出口、技术进出口、代理进出口;设计、制作、代理、发布广告;软件开发;销售第三类医疗器械。(销售第三类医疗器械以及依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动。)",
"CheckDate": 1549814400000
},
"orderNo":"idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message":"提交参数信息不完整或参数格式不正确",
}
5.2.1.2 法定代表人身份证简项
名称 | 内容 |
认证说明 | 提交企业名称、企业信用代码(或营业执照注册号)或组织机构代码号、法定代表人的姓名、身份证号,核验企业的法定代表人身份真实性。 |
接口说明 | 统一调用企业实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码 |
legalName | String | 必选 | 法定代表人姓名 |
legalId | String | 必选 | 法定代表人身份证号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
备注 | 1、当type为ET_PE和ET_SE时,idCode必填,orgCod非必填; 2、当type为ET_OU时,idCode和orgCod二选一 必填,填写组织机构代码/社会统一信用代码 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功,其他:失败 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 企业实名认证综合接口——法定代表人身份证简项认证方式
public static void legalPersonAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = null;
String legalName = "张三";
String legalId = "2******";
String legalUrl = null;
String legalImg = null;
String agentName = null;
String agentId = null;
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
params.put("legalName", legalName);
params.put("legalId", legalId);
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"法人校验成功",
"orderNumber":"idc2020011317505097877**"
}
错误返回示例:
xxxxxxxxxx
{
"status": 100002,
"message": "提交的参数不完整或格式不正确"
}
5.2.1.3 代理人身份证简项
名称 | 内容 |
认证说明 | 提交代理人姓名、身份证号,与公安身份证信息比对,要配合企业基础信息核验使用。 |
接口说明 | 统一调用企业实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码 |
agentName | String | 必选 | 代理人姓名 |
agentId | String | 必选 | 代理人身份证号 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功,其他:失败 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
{
"enterpriseInfo": {
"OperName": "张勇",
"TeamEnd": 2230646400000,
"No": "330100400015575",
"Name": "北京网联信通科技有限公司",
"Status": "存续",
"EndDate": null,
"CreditCode": "91330100716105852F",
"StartDate": 936806400000,
"Address": "杭州市滨江区网商路699号",
"RegistCapi": "59690万美元",
"BelongOrg": "杭州市高新区(滨江)市场监督管理局",
"EconKind": "有限责任公司(台港澳法人独资)",
"CheckDate": 1497542400000,
"TermStart": 936806400000,
"Scope": "开发、销售计算机网络应用软件;设计、制作、加工计算机网络产品并提供相关技术服务和咨询服务;服务:自有物业租赁,翻译,成年人的非证书劳动职业技能培训,成年人的非文化教育培训(涉及许可证的除外)。"
},
"message": "企业验证成功,二要素比对成功",
"status": "1",
"orderNumber": "YYCSidb201810291516419468349"
}
正确返回示例:
xxxxxxxxxx
{
"status":1,
"message":"代理人校验成功",
"orderNumber":"idc2020011317505097877**"
}
错误返回示例:
xxxxxxxxxx
{
"status":100002,
"message":"提交的参数不完整或格式不正确"
}
5.2.1.4 企业三要素核验
名称 | 内容 |
认证说明 | 提交营业执照/组织机构代码信息+法人姓名,与工商注册信息/组织机构代码注册信息进行对比,确定企业是否真实存在,并核验营业状态以及营业期限和法人姓名是否一致。 |
接口说明 | 统一调用企业实名认证综合接口,本认证方式传参要求如下 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/authIden 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/authIden |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
type | String | 必选 | 企业类型:企业(ET_PE)、个体工商户(ET_SE)、政府机构/事业单位(ET_OU) |
name | String | 必选 | 企业名称 |
idCode | String | 可选 | 统一社会信用代码或营业执照注册号 |
orgCode | String | 可选 | 组织机构代码 |
legalName | String | 必选 | 法人姓名 |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
备注: | 1、当type为ET_PE和ET_SE时,idCode必填,orgCod非必填; 2、当type为ET_OU时,idCode和orgCod二选一 必填,填写组织机构代码/社会统一信用代码 |
返回值:
名称 | 类型 | 描述 | ||
status | Long | 1:成功,其他:失败 | ||
message | String | 接口执行结果信息 | ||
orderNumber | String | 业务流水号 | ||
enterpriseInfo | Map | Name | String | 公司名称 |
No | String | 注册号 | ||
BelongOrg | String | 登记机关 | ||
OperName | String | 法定代表人 | ||
StartDate | String | 成立日期 | ||
EndDate | String | 注销/吊销日期 | ||
Status | Long | 登记状态(存续、在业、注销等) | ||
CreditCode | String | 统一社会信用代码 | ||
RegistCapi | String | 注册资本 | ||
EconKind | String | 类型 | ||
Address | String | 住所 | ||
Scope | String | 经营范围 | ||
TermStart | Long | 营业期限自 | ||
TermEnd | String | 营业期限至 | ||
CheckDate | Long | 核准日期 | ||
enterpriseInfo1 | Map | Name | String | 组织机构名称 |
Code | String | 组织机构代码或统一信用代码 | ||
LegalPerson | String | 组织机构法人 | ||
Address | String | 组织机构地址 | ||
StartAvaDate | Long | 颁发日期 | ||
EndAvaDate | Long | 失效日期 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 企业实名认证综合接口——营业执照认证方式
public static void licenseAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = null;
String legalName = null;
String legalId = null;
String legalUrl = null;
String legalImg = null;
String agentName = null;
String agentId = null;
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
Map<String, String> headers = new HashMap<>();
//注意:以下计算签名Content-Signature时,请按签名字段顺序,并且每个字段不可缺少,本认证方式不要求的字段,请定义为null
//注意:"HMAC-SHA1 "字符串中最后一位是一个空格
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
// 企业实名认证综合接口——营业执照+组织机构代码认证方式
public static void organizationAuth() throws Exception {
String SECRET_KEY = "158e******";
String appId = "4c17******";
String serviceCode = "idc****";
String type = "ET_PE";
String name = "******有限公司";
String idCode = "9133******";
String orgCode = "******";
String legalName = null;
String legalId = null;
String legalUrl = null;
String legalImg = null;
String agentName = null;
String agentId = null;
String agentUrl = null;
String agentImg = null;
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("name", name);
params.put("type", type);
params.put("idCode", idCode);
params.put("orgCode", orgCode);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + Base64.getEncoder().encodeToString(HMACSHA1.getHmacSHA1(appId + serviceCode + type + name + idCode + orgCode + legalName + legalId + legalUrl + legalImg + agentName + agentId + agentUrl + agentImg, SECRET_KEY)));
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/authIden", params, headers);
System.out.println(response);
}
}
正确返回示例:
xxxxxxxxxx
{
"status": 1,
"message": "企业基本信息比对成功。",
"enterpriseInfo": {
"Status": "在营(开业)",
"RegistCapi": "(万美元)4520.000000",
"No": "110000410144104",
"BelongOrg": "北京市工商行政管理局海淀分局",
"OperName": "张王李赵",
"EconKind": "有限责任公司(外国法人独资)",
"Address": "北京市某区某路某大厦666号",
"Name": "赵县安林小卖部。",
"TermStart": 948124800000,
"StartDate": 948124800000,
"TeamEnd": 1610812800000,
"Scope": "开发、生产计算机软件;提供相关技术咨询、技术服务、技术培训;承接计算机网络系统工程;销售自产产品、医疗器械II类;货物进出口、技术进出口、代理进出口;设计、制作、代理、发布广告;软件开发;销售第三类医疗器械。(销售第三类医疗器械以及依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动。)",
"CheckDate": 1549814400000
},
"orderNo": "idc2020011414265759110**"
}
错误返回示例:
xxxxxxxxxx
{
"status": 100002,
"message": "企业类型为ET_OU时,idCode和orgCode二选一,不能同时输入"
}
##
5.2.2营业执照OCR-API
名称 | 内容 |
接口说明 | 根据上传的营业执照照片获取具体信息。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/image/businessLicense 测试环境: https://demo-open.itruscloud.com/apigate/authapi/image/businessLicense |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 产品编码 |
base64File | String | 必选 | 图片的base64格式字符串 (图片限制大小3M以内) |
crmOrderNo | String | 可选 | crm订单号(传入crm订单号后不再从网关中获取crm订单号及天威云订单号) |
saveFlag | String | 可选 | 是否获取用户认证意愿授权 ,1:是 , 0:否 |
返回值:
名称 | 类型 | 描述 |
status | int | 1:成功 2:营业执照OCR验证失败,其他:详见“错误码”的描述 |
message | String | 接口执行结果信息 |
info | String | 获具体信息(JSON格式字符串)见下 |
orderNo | String | 业务流水号 |
info具体返回信息格式
xxxxxxxxxx
{
"regi": "资金",
"date": "成立日期",
"comp": "颁发机关",
"pers": "负责人/法定代表人",
"funding": "经费来源",
"code": "统一社会信用代码",
"num": "登记号",
"type": "类型",
"form": "组成形式",
"organizer": "主管单位",
"scope": "业务范围",
"name": "名称",
"time": "有效期",
"addr": "住所",
"date_issue": "发证日期"
}
正常调用示例:
xxxxxxxxxx
public class OcrTest {
private static final String URL = "http://open.itruscloud.com/apigate";
private static final String APP_ID = "488**********41";
private static final String SECRET_KEY = "e1fa6e*******************20214f9";
//企业营业执照ocr验证
public static void BusinessLicense() throws Exception {
String appId = APP_ID;
String serviceCode = "idb1001";
String base64File = Img2Base64Util.getImgStr("D:\\img\\yyzz.png");
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("appId", appId);
params.put("serviceCode", serviceCode);
params.put("base64File", base64File);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(getEnterpriseSign(params), SECRET_KEY)));
System.out.println(headers.get("Content-Signature"));
String response = HttpUtil.doPost(URL + "/authapi/image/businessLicense", params, headers);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"orderNo": "idc201907171024346088878",
"message": "营业执照OCR验证成功",
"status": 1,
"info": "{"regi":"6580万元","date":"2000年09月26日","comp":"","pers":"陈韶光","funding":"","code":"911101088020176135","num":"","type":"有限责任公司(自然人投资或控股)","form":"","organizer":"","scope":"因特网信息服务业务:销售商用密码产品:货物进出口、技术进住经营活动:不得从事本市产业政策禁止和限制类项日的经营活动.)","name":"北京天威诚信电子商务服务有限公司","time":"2000年09月26日至2020年09月25日","addr":"北京市海淀区上地八街7号院4号楼401A室","date_issue":""}"
}
5.2.3 企业对公银行账户打款(银联)
5.2.3.1打款申请接口
名称 | 内容 |
接口说明 | 1、根据企业名称、企业银行账号、开户总行名称、联行号登进行打款验证 2、限制每个应用同一企业名称/银行账号24小时内只能申请两次(避免触发反洗钱规则) 3、提交企业对公银行账户打款申请,向企业银行账户中打入随机小金额。打款受理需要一段时间,返回打款申请中,即为提交成功。需配合企业对公银行账户打款查询接口,查询打款状态;配合企业对公银行账户打款金额验证接口,进行随机金额验证。 4、注意:前端用户页面建议不允许用户手动输入银行名称,建议只能下拉框选择(下拉框支持模糊搜索),下来框列表内容参见5.2.3.5接口 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/bankAccount/payment/verificationIdenNewPay 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/bankAccount/payment/verificationIdenNewPay |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
serviceCode | String | 必选 | 服务编码 |
keyName | String | 必选 | 企业名称 |
accountNo | String | 必选 | 银行账号 |
accountBank | String | 必选 | 银行名称,注意:不需要精确到支行,只需要完整的总行名称即可。建议前端下拉选择银行,不允许用户手动输入,支持的列表参见5.2.3.5 |
subBank | String | 可选 | 银行联行号,建议校验位数(12位),不允许空格、特殊字符等,示例402873100333,该参数传入后优先级最高 |
payCallbackUrl | String | 可选 | 打款回调地址(如有请参照5.2.3.4处进行回调对接) |
返回值:
名称 | 类型 | 描述 |
status | Long | 300002:付款申请中 其他:失败,详见“错误码”的描述 2:失败,原因:银行名称为空且根据银行编码查询银行名称未查询到 3:失败,原因:银行编码为空且根据银行名称查询银行编码未查询到 |
message | String | 接口执行结果信息 |
orderNumber | String | 业务流水号 |
正常调用示例:
xxxxxxxxxx
{
"status": 300002,
"message": "打款申请中",
"orderNumber": "idb2020011317505097877**"
}
错误调用示例:
xxxxxxxxxx
{
"orderNumber": "idb202006231708004987341",
"message": "失败,原因:银行编码为空且根据银行名称查询银行编码未查询到",
"status": 2
}
5.2.3.2打款查询接口
名称 | 内容 |
接口说明 | 调用本接口查询打款状态,打款受理需要一段时间,返回打款申请受理成功,2小时左右到账(根据不同银行情况,转账时间可能需要30分钟-2个工作日)。如特殊情况(企业名称和银行账户不匹配等),企业开户银行跨行清算时校验退票,接口状态返回打款失败,需重新提交打款申请。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/payment/queryIdenNewPay 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/payment/queryIdenNewPay |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
orderNumber | String | 必选 | 业务流水号 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:付款申请受理成功,请以银行对账为准 300002:付款申请中 其他:失败,详见“错误码”的描述描述 |
message | String | 接口执行结果信息 |
正常调用示例:
xxxxxxxxxx
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class Test {
// 企业对公银行账户打款查询
public static void queryIden() throws Exception {
String orderNumber = "CXQYidb******";
Map<String, Object> params = new HashMap<String, Object>();
params.put("orderNumber", orderNumber);
String response = HttpUtil.doPost("http://******:**/apigate/authapi" + "/enterprise/payment/queryIdenNewPay", params);
System.out.println(response);
}
}
正常返回示例:
xxxxxxxxxx
{
"message":"打款金额验证成功",
"status":1
}
错误返回示例:
xxxxxxxxxx
{
"status":300003,
"message":"无对应有效打款信息,请重新打款"
}
5.2.3.3打款验证接口
名称 | 内容 |
接口说明 | 验证随机金额的正确性,用以核验银行账户的所属支配权。银行打款金额验证最多允许验证三次,三次验证均失败后,需重新提交银行账号信息进行打款及金额验证。金额的验证有效期是5天。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/payment/verifyIdenNewPay 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/payment/verifyIdenNewPay |
请求方法 | GET/POST |
应答格式 | JSON |
请求参数:
名称 | 类型 | 约束 | 描述 |
appId | String | 必选 | 应用标识 |
orderNumber | String | 必选 | 业务流水号 |
paymentAmount | String | 必选 | 到款金额 |
返回值:
名称 | 类型 | 描述 |
status | Long | 1:成功 300002:付款申请中 其他:失败,详见“错误码”的描述 |
message | String | 接口执行结果信息 |
正常调用示例:
xxxxxxxxxx
{
"message":"打款金额验证成功",
"status":1
}
错误返回示例:
xxxxxxxxxx
{
"status": 300003,
"message": "无对应有效打款信息,请重新打款"
}
5.2.3.4打款回调接口
名称 | 内容 |
接口说明 | 1、在打款申请接口中,配置了回调接口地址,需要按照以下方式参数进行接口参数接收,按照返回格式进行结果返回 |
请求方法 | GET/POST |
应答格式 | Map |
回调请求参数:
字段 | 类型 | 释义 | |
serialnumber | String | 必填 | 流水号 |
status | Integer | 必填 | 打款状态1.打款中 2.打款失败 3.打款成功 |
payTime | Date | 必填 | 付款到账时间 |
payFailMessage | String | 必填 | 打款失败原因 |
例如:
xxxxxxxxxx
@RequestMapping("/testCallBack")
public @ResponseBody Map<Object, Object> testCallBack(
@RequestParam(value = "serialnumber", required = true) String serialnumber,
@RequestParam(value = "status", required = true) String status,
@RequestParam(value = "payFailMessage", required = true) String payFailMessage,
@RequestParam(value = "payTime", required = true) String payTime) {
System.out.println("测试回调的serialnumber = " + serialnumber);
HashMap<Object, Object> map = new HashMap<>(8);
map.put("code", 0);
map.put("message", "已收到回调")
return map;
}
收到回调返回:
1,使用json传输code=0,表示回调成功,其他失败
名称 | 描述 |
code | 0,表示回调成功,其他失败 |
5.2.3.5 获取企业打款支持的银行列表接口
名称 | 内容 |
接口说明 | 获取企业打款(idb0041)支持的银行列表接口。 |
请求地址 | [生产环境:] https://admin.itruscloud.com/webgate/authweb/mini/ent/getBankList [测试环境:] https://demo-admin.itruscloud.com/webgate/authweb/mini/ent/getBankList |
请求方法 | POST |
请求参数:无
返回值:
字段 | 类型 | 是否必须 | 描述 |
code | Integer | 0-成功, 其他:失败 | |
data | Object | ||
- id | Long | 是 | 序列号 |
- providerType | String | 否 | 信用源 |
- bankCode | String | 否 | 银行简码 |
- bankName | String | 是 | 银行名称 |
- serviceCode | String | 否 | 产品编码 |
- version | Integer | 否 | 版本号 |
- deleted | Integer | 否 | 0-未删除,1-删除 |
msg | String | 结果信息 | |
xxxxxxxxxx
响应示例:
{
"code": 0,
"msg": "操作成功",
"data": [
{
"id": 6,
"providerType": "",
"bankCode": "",
"bankName": "中国邮政储蓄银行",
"serviceCode": "",
"deleted": 0,
"version": 0
},
{
"id": 7,
"providerType": "",
"bankCode": "",
"bankName": "中国工商银行",
"serviceCode": "",
"deleted": 0,
"version": 0
}
],
"status": 1
}
5.2.3.6 企业查询接口
名称 | 内容 |
接口说明 | 根据企业名称模糊查询对应企业列表信息,最多只返回20条数据。 |
请求地址 | 生产环境: https://open.itruscloud.com/apigate/authapi/enterprise/queryEntList 测试环境: https://demo-open.itruscloud.com/apigate/authapi/enterprise/queryEntList |
请求方法 | POST |
请求参数:
字段 | 类型 | 是否必须 | 描述 |
companyName | String | 是 | 企业名称 |
appId | String | 是 | 应用标识 |
serviceCode | String | 是 | 产品编码 |
返回结果:
字段 | 类型 | 描述 |
orderNumber | String | 流水号 |
status | Long | 1:成功,其他:失败 |
message | String | 接口执行结果信息 |
entInfos | List | 企业列表 |
|- no | String | 注册号 |
|- address | String | 注册地址 |
|- creditCode | String | 统一社会信用代码 |
|- keyNo | String | KeyNo |
|- name | String | 企业名称 |
|- operName | String | 法定代表人姓名 |
|- startDate | String | 成立日期 |
|- status | String | 状态 |
Java调用示例:
xxxxxxxxxx
public static void queryEntList() throws Exception {
String appId = "e4791a68f74a4a";// APP_ID;
String secretKey = "119159bddbaf4032b66c0a6ec1ae3355"; //SECRET_KEY;
String serviceCode = "idb0042"; // 产品编码
Map<String, Object> params = new HashMap<String, Object>(4);
params.put("companyName", "百度");
params.put("appId", appId);
params.put("serviceCode",serviceCode);
Map<String, String> headers = new HashMap<>();
headers.put("appId", appId);
headers.put("serviceCode", serviceCode);
headers.put("Content-Signature", "HMAC-SHA1 " + new Base64().encodeToString(HMACSHA1.getHmacSHA1(JSON.toJSONString(params), secretKey+serviceCode)));
String response = HttpUtil.doPostJson("http://192.168.100.201:22417/apigate/authapi/enterprise/queryEntList", JSON.toJSONString(params), headers);
System.out.println(response);
}
正确返回示例:
xxxxxxxxxx
{
"orderNumber": "idb202306161629102302955",
"entInfos": [
{
"no": "110000410144104",
"address": "北京市海淀区上地十街10号百度大厦三层",
"creditCode": "91110108717743469K",
"keyNo": "3f603703d59a04cbe427e5825099a565",
"name": "百度在线网络技术(北京)有限公司",
"operName": "崔珊珊",
"startDate": "2000-01-18",
"status": "存续"
},
{
"no": "310115400176517",
"address": "中国(上海)自由贸易试验区纳贤路701号1#楼3层",
"creditCode": "91310000775785552L",
"keyNo": "644f2f8965a750c40892b30fdd909b19",
"name": "百度(中国)有限公司",
"operName": "沈抖",
"startDate": "2005-06-06",
"status": "存续"
}
],
"message": "查询成功。",
"status": 1
}
异常返回示例:
xxxxxxxxxx
{"status":400,"message":"系统异常,请联系管理员","requestId":"GT3gNrYtwgGx1FdQ1m7"}
5.3错误码
错误分类 | 错误码 | 描述 |
系统错误 | 100000 | 无可用信任源 |
100001 | 信任源异常错误,请联系管理员 | |
100002 | 提交的参数信息不完整 企业类型为ET_OU时,idCode和orgCode二选一,不能同时输入 未查询到银行名称列表 银行名称不存在 企业名称不能为空 开户支行网点不能为空 银行账号不能为空 银行编码和银行名称必须二选一 订单描述不能超过8个字 | |
100003 | 系统异常错误 | |
100004 | 没有此服务权限 | |
100005 | 服务密钥错误 | |
100006 | Hmac验证错误 | |
100007 | 服务计费失败 | |
100008 | 接口调用异常 | |
100009 | 缺少服务配置 | |
100010 | 应用标识不存在 | |
100011 | 应用状态已关闭 | |
100012 | 此服务还未开始 | |
100013 | 服务已关闭 应用未授权,请登陆控制台,在我的应用下添加应用授权 | |
100015 | 您的服务已过期,请重新购买服务 | |
100016 | 数量不足,请重新购买服务 | |
100017 | 您当前服务不可用,如有问题请联系客服 | |
100018 | 重复太多次没有得到处理 | |
100019 | 访问超时,请重试 | |
100020 | appid或signature不能为空 | |
100021 | 计费规则加载失败 | |
100022 | 此接口未找到 | |
100023 | 此服务未发布 | |
100024 | 查无此结果 | |
120001 | 主中心接口调用异常 | |
120002 | 从中心参数错误,cloudId,signature | |
120003 | 从中心签名验证失败 | |
个人 | 101001 | 姓名不正确 |
101002 | 身份证号不正确 | |
101003 | 库中无此身份证号码 | |
101004 | 姓名和身份证号码不匹配 | |
102001 | 银行卡号不正确 | |
102002 | 手机号不正确 | |
102003 | 银行卡信息匹配不一致 | |
102004 | 卡状态错误(没收卡,挂失,被窃无效卡号,未初始化等) | |
102005 | 访问银联接口异常 | |
102006 | 银联预留身份证不存在 | |
102007 | 卡验证异常(发卡方不允许操作、受限卡、验证请求频繁等异常情况) | |
103001 | 公安数据源服务出错 | |
103002 | 参数非UTF-8编码 | |
103003 | 网络地址图片获取超时 | |
103004 | 网络地址图片获取失败 | |
103005 | 图片不存在 | |
103006 | 图片体积不能超过2M | |
103007 | 姓名和身份证号匹配,公安照片不存在 | |
103008 | 上传的图片未检测出人脸 | |
103009 | 公安库中的图片未检测出人脸 | |
103010 | 文件不是图片文件或已经损坏导致无法正确识别 | |
103011 | 图片格式不符合要求 | |
103012 | 人脸特征提取失败 | |
103013 | 相似度比对未通过 | |
104010 | 手机号三要素匹配不一致 | |
105010 | 无此驾照信息 | |
105011 | 查询失败 | |
105012 | 身份证核验失败 | |
105013 | 无法验证!【中心中无此 身份证记录,军人转业,户口迁 移等】 | |
105014 | 驾驶证号与档案编号不一致 | |
105015 | 姓名与驾驶证号不一致 | |
106010 | 银行卡五要素不匹配 | |
106011 | 确定是电子账户,但无法判定是二类还是三类账户 | |
106012 | 要素信息验证不一致 | |
106013 | 非电子账户 | |
106014 | 银行卡五要素参数错误 | |
107010 | 车辆已注销 | |
107011 | 城市未开通 | |
107012 | 不支持该车型 | |
107013 | 车辆信息填写不匹配 | |
108001 | 认证失败,请稍后重试 | |
108002 | 认证失败,发卡行不支持 | |
108003 | 认证失败,该卡号当日连续多次认证不通过被限制校验,次日恢复 | |
108004 | 认证失败,银行卡状态异常,详情请咨询您的发卡行 | |
108005 | 认证失败,未开通无卡支付 | |
108006 | 参数错误:银行卡号格式不正确 | |
108007 | 同一要素请求过于频繁 | |
108008 | 车同一银行卡请求过于频繁 | |
108009 | 参数错误:订单号格式不正确 | |
108010 | 认证信息不匹配,与银行预留信息不一致 | |
108011 | 银行卡四要素(境外)参数错误 | |
108012 | 认证失败,卡号不存在 | |
108013 | 认证失败,数据源异常 | |
108014 | 参数错误:姓名格式不正确 | |
108015 | 参数错误:身份证格式不正确 | |
108016 | 参数错误:银行卡号格式不正确 | |
108017 | 参数错误:手机号格式不正确 | |
企业 | 201001 | 营业执照:号码没查找到数据 |
201002 | 营业执照:名称不匹配 | |
201003 | 营业执照:注册号不匹配(企业未三证合一) | |
201004 | 营业执照:统一信用代码不匹配 | |
201005 | 企业营业执照:已三证合一,请提交统一信用代码重新提交认证 | |
201006 | 营业执照:号码不匹配(三证合一状态无法判断) | |
201007 | 营业执照:不在经营有效期内 | |
201008 | 营业执照:企业状态异常 | |
201100 | 企业组织机构代码/工商登记号/统一信用代码不能为空 | |
201101 | 企业组织机构代码/工商登记号/统一信用代码不正确 | |
202001 | 组织机构代码:号码没查找到数据 | |
202002 | 组织机构代码:名称不匹配 | |
202003 | 组织机构代码:号码不匹配 | |
202004 | 组织机构代码:企业已三证合一,仍提交了组织机构代码 | |
202005 | 组织机构代码:不在经营有效期内 | |
202006 | 组织机构代码:企业状态异常 | |
202007 | 组织机构代码:开放时间周一至周五8点至17点 | |
202008 | 企业类型错误 | |
203001 | 法人姓名不正确 | |
203002 | 法人身份证号不正确 | |
203003 | 库中无此法人身份证号码 | |
203004 | 法人姓名和身份证号码不匹配 | |
203005 | 企业法人姓名不匹配 | |
203006 | 企业基本信息未认证,请先认证企业基本信息 | |
203007 | 验证要素格式有误 | |
203008 | 不支持验证 | |
203009 | 验证不一致 | |
203010 | 无效证件号 | |
203011 | 未查得该企业信息 | |
101001 | 代理人姓名不正确。 法人姓名不正确 | |
101002 | 代理人身份证号不正确 法人身份证号不正确 | |
101003 | 库中无此代理人身份证号码 | |
101004 | 代理人姓名和身份证号码不匹配 | |
101009 | 企业名称与企业标识、法人姓名一致,法人身份证不一致 | |
101010 | 企业名称与企业标识、法人身份证一致,法人姓名不一致 | |
101011 | 企业名称与企业标识一致,法人姓名、法人身份证不一致 | |
101012 | 企业标识与法人姓名、法人身份证一致,企业名称不一致 | |
101013 | 企业标识与法人姓名一致,企业名称、法人身份证不一致 | |
101014 | 企业标识一致,企业名称、法人姓名、法人身份证不一致 | |
101015 | 企业名称、企业标识、法人姓名、法人身份证均不一致 | |
108018 | 认证失败 | |
108019 | 未查到工商信息,请核对企业类型或上送的信息是否正确 | |
205007 | 不支持组织机构代码方式 | |
300001 | 打款失败 | |
300002 | 付款申请中 | |
300003 | 无对应有效打款信息,请重新打款 | |
300004 | 打款金额验证失败 | |
300005 | 银行名称不在支持的列表中 | |
300006 | 此次认证已完成,不能重复验证金额 | |
300007 | 您已经三次金额验证失败,请重新打款 | |
300008 | 您的打款申请提交次数过多 | |
80010150 | 转账中,请查看银行账户 | |
80010151 | 转账未成功,请联系开户行核实账户信息 | |
80010162 | 付款银行名称有误 | |
80010163 | 收款账户不支持此业务 | |
80010164 | 收款方账户状态异常或已注销 | |
80010165 | 银行查无此账号 | |
80010166 | 收款账户名称和账户号码不一致 | |
80010181 | 账户名称与银行记录不符 | |
80010037 | 银行交易超时,请重试 | |
90010162 | 转账未成功,请稍后重试 | |
OCR | 1200 | 输入参数无效 |
1002 | 调用频率超过限制 | |
2003 | 图片尺寸不符合要求 | |
2004 | 图片体积不符合要求 | |
2005 | 图片类型不符合要求 | |
2006 | 图片损坏 | |
4001 | 身份证服务检测失败 | |
4002 | 银行卡服务检测失败 | |
5003 | 营业执照服务检测失败 | |
2 | 身份证OCR验证失败 营业执照OCR验证失败 银行卡OCR验证失败 | |
H5静默 | 1002 | 调用频率超过限制 |
2008 | 无效的视频文件 | |
3003 | 姓名与身份证号不匹配 | |
3004 | 身份证号无效 | |
3005 | 第三方底图不存在 | |
4007 | 静默活体检测失败 | |
4000 | 提取特征失败,没有检测到图片中的人脸 |