import com.chinaums.open.api.OpenApiCache;
import com.chinaums.open.api.OpenApiContext;
import com.chinaums.open.api.constants.ConfigBean;
import com.chinaums.open.api.internal.util.http.HttpTransport;
import java.util.UUID;
public class OpenApiSdkTest {
public static void main(String[] args) throws Exception{
String url = "/v1/datacenter/smartverification/encrypted/bankcard/verify";
//开发者ID
String appId = "平台分配";
//开发者秘钥
String appKey = "平台分配";
//实例化客户端
ConfigBean configBean = new ConfigBean();
OpenApiContext context = new OpenApiContext();
String request = "{\"data\":\"\"}";
context.setStartTime(System.currentTimeMillis());
context.setRequestId(UUID.randomUUID().toString().replace("-", ""));
context.setOpenServUrl(url.split("/v")[0].concat("/"));
context.setApiServiceUrl(url);
context.setVersion(url.split("/")[3]);
context.setAppId(appId);
context.setAppKey(appKey);
context.setConfigBean(configBean);
context.setServiceCode(url.split("/v")[1].substring(1));
OpenApiCache.getCurrentToken(context);
System.out.println(HttpTransport.getInstance().doPost(context, request));
}
}
<?php
require_once "../utils/Log.php";
require_once "../utils/Tools.php";
require_once "../DefaultOpenApiClient.php";
class DataRequest
{
public $url = "";
public $serviceCode = "";
public $apiVersion ="";
public $needToken = true;
public $needDataTag = false;
public $data;
function __construct($data, $url)
{
$this->data = $data;
$apiVersion = preg_split("/[/]+/s",$url)[2];
$this->apiVersion = $apiVersion;
$serviceCode = strstr($url,$apiVersion);
$this->url = strstr($url,"/".$apiVersion,true);
$this->serviceCode = preg_replace("/^" . preg_quote($apiVersion, "/") . "/", "", $serviceCode);
}
}
class DataDemo{
public function main(){
$appid = "平台分配";
$appkey = "平台分配";
$url = "/v1/datacenter/smartverification/encrypted/bankcard/verify";
$data = json_encode(array("data"=>""));
$reqiest = new DataRequest($data,$url);
$client = new DefaultOpenApiClient();
$content = $client->execute($reqiest,$appid,$appkey);
$obj = json_decode($content);
print_r($obj->errCode);
print_r($obj->errInfo);
}
}
$p = new DataDemo();
$p->main();
?>
# -*- coding: utf-8 -*-
from webapi.DefaultOpenApiClient import DefaultOpenApiClient
url = "/v1/datacenter/smartverification/encrypted/bankcard/verify"
class DataRequest(object):
def __init__(self, data: dict) -> dict:
self.data = data
self.serviceCode = url[len(url.split("/v")[0])+len(url.split("/")[3])+1: len(url)]
self.apiVersion = url.split("/")[3]
self.needToken = True
self.needDataTag = True
appId="平台分配"
appKey="平台分配"
client = DefaultOpenApiClient(appId, appKey)
cls = DataRequest({\"data\":\"\"})
response = client.execute(cls)
print(str(response.get("data")))
print(response.get("errCode"))
print(response.get("errInfo"))
print(response.get("resultCode"))
print(response.get("resultInfo"))
银行卡实名验证
URL
- 生产环境:
POST
https://api-mop.chinaums.com/v1/datacenter/smartverification/encrypted/bankcard/verify
描述:验证银行卡卡号、姓名、身份证号、手机号是否一致,支持借记卡和贷记卡。支持的验证类型包括: 卡号+身份证号 卡号+手机号码 卡号+姓名 卡号+身份证号+手机号码 卡号+身份证号+姓名 卡号+手机号码+姓名 卡号+手机号码+姓名+身份证号
ContentType:HTTP(S) + JSON
请求头
名称 | 必填 | 描述 | 示例值 |
---|---|---|---|
Authorization | 是 | 认证内容 | |
Content-Type | 是 | application/json;charset=utf-8-Type |
请求参数
名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
data | stringObject | 是 | 对下面转换的Json字符串({"cardNo":"",...,"protocolNo":""})用SM2公钥进行加密,然后对加密后的报文用base64编码。 注意:后面的参数在入参中并不是和data平级,而是加密后存放在data中 | ||
cardNo | string | 是 | 30 | 卡号 | |
personalMandate | string | 是 | 1 | 是否取得个人授权,字段取值0或1。 1:是 0:否 | |
sceneId | string | 是 | 2 | 正确上送实名验证业务场景,取值范围如下: 1:汽车销售 2:汽车租赁 3:房产中介 4:车贷 5:房贷 6:消费贷 7:现金贷 8:其他银行贷款 9:P2P 10:保理 11:信托 12:政务服务 13:车险 14:财产险 15:养老险 16:健康险 17:寿险 18:银行理财 19:互联网理财 20:基金理财 21:证券开户 22:融资租赁 23:物业 24:线上开户 | |
certType | string | 否 | 2 | 证件类型:证件号和证件类型必须两个同时输入或者两个都不输。 | |
certNo | string | 否 | 32 | 证件号码。证件号必须与证件类型相一致 证件号和证件类型必须两个同时输入或者两个都不输。 证件号、证件姓名、卡关联手机号三个要素至少填一项。 | |
name | string | 否 | 64 | 证件姓名。UTF-8编码,不超过64位 证件号、证件姓名、卡关联手机号三个要素至少填一项 | |
appName | string | 是 | - | 用户申请开户时发起交易所用的应用程序(或渠道)名称,该域由发起应用类型、具体应用名称两部分组成,格式为“发起应用类型”(ans2)+“具体应用名称”(ans..38(LLVAR))。其中: 1、发起应用“类型”为2字节,取值及含义如下: 00:缺省渠道 01:手机APP 02:网上银行软件版 03:网上银行网页版 04:小程序 05:公众号 2、“具体应用名称”为发起应用程序或渠道对用户外展示的名称,最长38字节。 例如:用户在某某商业银行的APP(APP名称为“某某银行直销银行”)中申请开户,并发起验证请求时,该域填写为“01某某银行直销银行” | |
ipType | string | 是 | - | ip版本号。04:IPV4 06:IPV6 | |
sourceIp | string | 是 | - | 采集持卡人支付时IP地址,兼容IPV4和IPV6 IPV4 sample:... (格式要求:点分十进制 例如:173.016.035.002) IPV6 sample:::::::: (格式要求:冒号分十六进制 例如:AD80:0000:0000:0000:ABAA:0000:00C2:0002) | |
lbs | string | 否 | 32 | 经纬度,格式为纬度/经度,+表示北纬、东经,-表示南纬、西经,纬度取值[-90,90],经度取值[-180,180]。举例:+37.12/-121.23或者+37/-121 | |
deviceId | string | 否 | 40 | 设备标识 | |
fullDeviceNumber | string | 否 | 20 | 设备SIM卡号码 | |
simCardCount | string | 否 | 2 | 设备SIM卡数量。0:未插SIM卡 1:1张SIM卡 2:2张SIM卡 3:其他 | |
deviceType | string | 否 | 1 | 设备类型。1:手机 2:平板 3:手表 4:PC 5:其他 | |
deviceName | string | 否 | 64 | 设备型号名称。可以采集到的设备型号,如iPhone,Sagit(小米6),MT-TL00(华为Mate7)等 | |
macAddr | string | 否 | 17 | 交易报文中采集持卡人支付时使用设备的MAC地址 MAC sample:00-23-5A-15-99-42 格式要求:每2位之间用-连接 | |
phoneNo | string | 否 | 11 | 卡预留手机号。证件号、证件姓名、卡预留手机号三个要素至少填一项 | |
protocolVersion | string | 是 | 2 | 用户授权协议版本号 | |
protocolNo | string | 是 | 2 | 用户授权协议流水号 | |
userNo | string | 否 | 20 | 用户号 |
响应示例
{
"errCode":"20000000 – 成功",
"errInfo":"",
"data":""
}
响应参数
名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
errCode | string | 是 | - | 错误代码 | 20000000 – 成功 |
errInfo | string | 是 | - | 错误说明 | |
data | stringObject | 是 | 对返回加密报文用base64解码后,用SM2对应的私钥解密。客户端获取的返回报文中报文体data域解密使用业务人员为客户分配的SM2私钥进行解密。 注意:后面的参数在出参中并不是和data平级,而是需要从data中解密出来的 | ||
sysJourId | string | 是 | - | 当日唯一流水号 | |
dcType | string | 是 | - | 银行卡的借贷标志 0:借记卡 1:贷记卡 | |
respCode | string | 是 | - | 应答码 | |
respMsg | string | 是 | - | 应答码描述 | |
detailRespCode | string | 是 | - | 细分应答码 | |
detailRespMsg | string | 是 | - | 细分应答码解释 |
错误码
错误码 | 错误描述 | 解决方案 |
---|---|---|
00 | 验证一致 | 应答码 |
01 | 验证不一致 | 应答码 |
02 | 不支持验证 | 应答码 |
03 | 验证要素格式有误 | 应答码 |
04 | 系统异常 | 应答码 |
0000 | 验证一致 | 细分应答码 |
1302 | 发卡行响应超时,请稍后重试 | 细分应答码 |
1399 | 发卡行系统异常,请稍后重试 | 细分应答码 |
2208 | 渠道方系统异常,请稍后重试 | 细分应答码 |
2329 | 系统异常,请稍后重试 | 细分应答码 |
2325 | 发卡行返回该卡不支持验证,建议持卡人与发卡行联系 | 细分应答码 |
5106 | 该卡今日验证次数过多,请明日重试 | 细分应答码 |
2316 | 发卡行返回该卡状态不正常,建议持卡人与发卡行联系 | 细分应答码 |
2319 | 验证不一致 | 细分应答码 |
5000 | 未知商户,不予通过 | 细分应答码 |
5101 | 该卡交易过于频繁,请稍后重试 | 细分应答码 |
5102 | 该证件号交易过于频繁,请稍后重试 | 细分应答码 |
5103 | 该卡今日验证失败次数过多,请明日重试 | 细分应答码 |
5104 | 该证件号今日验证失败次数过多,请明日重试 | 细分应答码 |
5105 | 短期内有同卡重复交易,请稍后重试 | 细分应答码 |
5107 | 请取得个人授权 | 细分应答码 |
5108 | 当日验证次数已达最大值,请明日再试 | 细分应答码 |
5109 | 请正确上送实名验证业务场景 | 细分应答码 |
5110 | 风险要素缺失,请正确填写 | 细分应答码 |
2314 | 发卡行无此卡号 | 细分应答码 |
2320 | 发卡行返回该卡密码错次数超限,建议持卡人与发卡行联系 | 细分应答码 |
2344 | 发卡行返回该卡未预留手机号,建议持卡人与发卡行联系 | 细分应答码 |
2321 | 不支持发现卡验证交易 | 细分应答码 |
2334 | 发卡行返回该卡验证次数已超限,请明日再试 | 细分应答码 |
2346 | 建行卡不支持卡号+手机号两要素组合验证 | 细分应答码 |
2347 | 发卡行不支持该三要素组合验证 | 细分应答码 |
4001 | 无效卡 | 细分应答码 |
4002 | 无效证件类型 | 细分应答码 |
4003 | 无效证件号 | 细分应答码 |
4004 | 无效手机号 | 细分应答码 |
4005 | 无效姓名 | 细分应答码 |
4006 | 多种要素格式错误 | 细分应答码 |
4007 | 风险要素信息格式错误 | 细分应答码 |