查询类¶
订单查询 Q01¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q01 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 用户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | |
订单日期 | order_date | 定长8位String | 必须 | |
交易查询类型 | trans_type | 定长2位String | 必须 | 01:快捷、网银、扫码; 02:余额支付、采购确认、订单撤销; 03:提现; 04:退货; 05:延时分账。 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q01 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 用户的唯一标识 |
应答返回码 | return_code | 定长5位String | 必须 | |
应答返回描述 | return _desc | 变长String | 必须 | |
错误码 | error_code | 定长6位String | 可选 | |
错误描述 | error_desc | 变长String | 可选 | |
订单号 | order_id | 变长20位String | 必须 | |
订单日期 | order_date | 定长8位String | 必须 | |
交易查询类型 | trans_type | 定长2位String | 必须 | |
交易状态 | trans_stat | 定长1位的String | 必须 | I-初始; P-处理中; S-成功; F-失败。 |
交易金额 | trans_amt | 变长14位的String | 可选 | 泛指交易金额,金额格式必须是###.00,比如2.00,2.01 |
商户私有域 | mer_priv | 变长120位的String | 可选 |
代码示例¶
JAVA
请求示例
// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "Q01");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000122180");
map.put("order_id", "201810203914566320");
map.put("order_date", "20181020");
map.put("trans_type", "03");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", " Q01"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
// 使用HttpClient发送请求
CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
StringBuffer resultString = new StringBuffer();
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
resultString.append(line);
}
// 返回结果解签
String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
// 处理异常
}
成功响应示例
200
{
"cmd_id": "Q01",
"mer_cust_id": "6666000000118348",
"mer_priv": "",
"order_date": "20181020",
"order_id": "201810203914566320",
"return_code": "90000",
"return_desc": "交易成功",
"trans_amt": "2.00",
"trans_stat": "S",
"trans_type": "03",
"user_cust_id": "6666000000122180"
}
失败响应示例
200
{
"cmd_id": "Q01",
"mer_cust_id": "6666000000118348",
"mer_priv": "",
"order_date": "20181020",
"order_id": "201810203914566321",
"return_code": "10099",
"return_desc": "交易处理失败",
"error_code": "100121",
"error_desc": "原交易不存在",
"trans_amt": "",
"trans_stat": "",
"trans_type": "03",
"user_cust_id": ""
}
余额查询 Q02¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q02 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 查询商户本身时,同商户客户号 |
账户号 | acct_id | 变长9位String | 可选 | 查询商户本身时,必输 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q02 |
应答返回码 | return_code | 定长5位String | 必须 | |
应答返回描述 | return _desc | 变长String | 必须 | |
错误码 | error_code | 定长6位String | 可选 | |
错误描述 | error_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 查询商户本身时,同商户客户号 |
账户号 | acct_id | 变长9位String | 可选 | |
账户余额 | acct_balance | 变长String | 必须 | 账户余额=可用余额+冻结余额 |
账户可用余额 | usable_balance | 变长String | 必须 | |
账户冻结余额 | freeze_balance | 变长String | 必须 | |
账户状态 | acct_stat | 定长1位 | 必须 | N:正常; C:关闭; F:冻结; D:销户。 |
账户等级 | acct_level | 定长2位String | 可选 | 01:一类帐户; 02:二类帐户; 03:三类帐户。 |
账户已用限额 | acct_used_limit | 变长String | 可选 |
代码示例¶
JAVA
请求示例
// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "Q02");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000122180");
map.put("acct_id", "");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", " Q02"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
// 使用HttpClient发送请求
CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
StringBuffer resultString = new StringBuffer();
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
resultString.append(line);
}
// 返回结果解签
String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
// 处理异常
}
成功响应示例
200
{
"acct_balance": "115.06",
"acct_id": "",
"acct_level": "01",
"acct_stat": "N",
"acct_used_limit": "0.00",
"cmd_id": "Q02",
"freeze_balance": "2.05",
"mer_cust_id": "6666000000118348",
"return_code": "90000",
"return_desc": "交易成功",
"usable_balance": "113.01",
"user_cust_id": "6666000000122180"
}
失败响应示例
200
{
"acct_balance": "",
"acct_id": "",
"acct_level": "",
"acct_stat": "",
"acct_used_limit": "",
"cmd_id": "Q02",
"freeze_balance": "",
"mer_cust_id": "6666000000118348",
"return_code": "10099",
"return_desc": "交易处理失败",
"error_code": "100100",
"error_desc": "acct_id请求参数非法",
"usable_balance": "",
"user_cust_id": "6666000000118348"
}
商户对账文件下载申请 Q05¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q05 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | |
对账日期 | order_date | 定长8位String | 必须 | 对账文件日期 |
交易类型 | trans_type | 定长2位String | 必须 | 01:交易对账文件 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q05 |
应答返回码 | return_code | 定长5位String | 必须 | |
应答返回描述 | return _desc | 变长String | 必须 | |
错误码 | error_code | 定长6位String | 可选 | |
错误描述 | error_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | |
日期 | date | 定长8位String | 必须 | 对账文件日期 |
交易类型 | trans_type | 定长2位String | 必须 | 01:交易对账文件 |
文件名 | file_name | 变长64位String | 必须 | 对账文件名 |
文件url | file_url | 变长512位String | 必须 | 对账文件下载url |
代码示例¶
JAVA
请求示例
// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "Q05");
map.put("mer_cust_id", "6666000000118348");
map.put("order_date", "20181018");
map.put("trans_type", "01");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "Q05"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
// 使用HttpClient发送请求
CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
StringBuffer resultString = new StringBuffer();
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
resultString.append(line);
}
// 返回结果解签
String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
// 处理异常
}
成功响应示例
200
{
"return_code": "90000",
"return_desc": "交易成功",
"order_date":"20181018",
"cmd_id":"T01",
"mer_cust_id":"6666000000118348",
"file_url":"……",
"file_name":"test.txt",
"trans_type":"01"
}
失败响应示例
200
{
"return_code": "10099",
"return_desc": "交易处理失败",
"error_code": "100100",
"error_desc": "请求参数非法",
"order_date":"20181018",
"cmd_id":"T01",
"mer_cust_id":"6666000000118348",
"file_url":"",
"file_name":"",
"trans_type":"01"
}
商户文件上传 Q06¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本 | version | 固定2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q06 |
商户客户号 | mer_cust_id | 定长16位string | 必须 | 由汇付生成,商户的唯一性标识 |
附件编号 | attach_no | 定长20位 string | 必须 | 商户必须保证唯一 |
业务类型 | trans_type | 变长2位 string | 必须 | 05-个体工商户 |
附件类型 | attach_type | 变长2位 string | 必须 | 00-营业执照注册号; 01-组织结构代码证; 02-税务登记证号; 03-法人证件; 04-开户银行许可证; 05-统一社会信用代码; 08-开户电子协议; 09-法人证件反面; 10-经营照片; 11-经营照片(地址照片); 12-经营照片(门面照片); 13-结算卡正面; 14-结算卡反面; 99-其他。 |
文件描述 | attach_desc | 定长80位 string | 可选 | |
文件 | attach_file | File | 必须 | 文件名称为 UTF-8 字符集 ,URLEncode 编码后的字符串。 |
上传类型 | file_upload_type | 定长2位string | 可选 | 01:新增(文件名称不能重复) |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q06 |
应答返回码 | return_code | 定长5位String | 必须 | |
应答返回描述 | return _desc | 变长String | 必须 | |
错误码 | error_code | 定长6位String | 可选 | |
错误描述 | error_desc | 变长String | 可选 |
代码示例¶
JAVA
请求示例
// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "Q06");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("attach_no", "100000000001");
map.put("trans_type", "05");
map.put("attach_type", "09");
map.put("attach_desc", "说明");
map.put("file_upload_type", "01");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U05"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
// 使用HttpClient发送请求
CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
StringBuffer resultString = new StringBuffer();
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
resultString.append(line);
}
// 返回结果解签
String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
// 处理异常
}
成功响应示例
200
{
"cmd_id": "Q06",
"mer_cust_id": "6666000000118348",
"return_code": "90000",
"return_desc": "交易成功",
"error_code": "",
"error_desc": ""
}
失败响应示例
200
{
"cmd_id": "Q06",
"mer_cust_id": "6666000000118348",
"return_code": "10099",
"return_desc": "交易处理失败",
"error_code": "100100",
"error_desc": "请求参数非法"
}
用户入驻查询 Q15¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本 | version | 固定2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q15 |
商户客户号 | mer_cust_id | 定长16位string | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
支付通道 | pay_way | 定长1位 string | 必须 | 1:支付宝;2:微信 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 Q15 |
错误码 | error_code | 定长6位String | 可选 | |
错误描述 | error_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16 位String | 必须 | 由汇付生成,用户的唯一性标识 |
状态码 | resp_code | 变长8位String | 必须 | Q15000–交易成功,其他见状态码表 |
状态描述 | resp_desc | 变长128位String | 必须 | |
返回码 | return_code | 定长5位String | 必须 | |
返回描述 | return_desc | 变长String | 必须 | |
用户签约状态 | user_stat | 定长1位String | 必须 | 1可用;2关闭 |
入驻信息集合 | user_settled_info_list | List | 必须 |
入驻信息集合user_settled_info_list说明:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
支付通道 | payWay | 定长1位String | 可选 | 1支付宝,2微信 |
二级商户号 | subMerId | 变长20位String | 可选 | 入驻的二级商户号 |
用户名称 | subMerName | 变长60位String | 可选 | |
用户简称 | shortName | 变长10位String | 可选 |
代码示例¶
JAVA
请求示例
// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "Q15");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000195772");
map.put("pay_way", "1");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "Q15"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
// 使用HttpClient发送请求
CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
StringBuffer resultString = new StringBuffer();
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
resultString.append(line);
}
// 返回结果解签
String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
// 处理异常
}
成功响应示例
200
{
"cmd_id": "Q15",
"mer_cust_id": "6666000000118348",
"return_code": "90000",
"return_desc": "交易成功",
"error_code": "",
"error_desc": "",
"resp_code": "Q15000",
"resp_desc": "交易成功",
"user_cust_id": "6666000000195772",
"user_settled_info_list": [{"bankMerCode":"2088100653058015","payWay":"1","shortName":"jeff111","subMerId":"AD0004005","subMerName":"企业开户105"}],
"user_stat": "1"
}
失败响应示例
200
{
"cmd_id": "Q15",
"mer_cust_id": "6666000000118348",
"user_cust_id": "6666000000195710",
"return_code": "10099",
"return_desc": "交易处理失败",
"error_code": "100108",
"error_desc": "用户在商户下不存在",
"resp_code": "Q15108",
"resp_desc": "用户在商户下不存在"
}
302 卡 bin 查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为302 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
银行卡号 | card_no | 变长32位String | 必须 | 8位以下报错 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为302 |
应答返回码 | resp_code | 定长6位String | 必须 | 302000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
银行卡号 | card_no | 变长30位String | 必须 | 银行卡号 |
卡bin | card_bin | 变长10位String | 必须 | 2-10位数字 |
发卡行 | bank_name | 变长30位String | 必须 | 发卡银行名称 |
卡类型 | card_type | 定长1位String | 必须 | 卡类型 (’C’– 贷记卡、’D’– 借记卡、’S’– 准贷记卡、’P’– 预付费卡) |
银行编号 | bank_no | 定长8位String | 必须 | 8位数字 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "302",
"mer_cust_id": "6666000000002619",
"card_no": "4367288208658152"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "302";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
{
"cmd_id": "302",
"resp_code": "302000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "302",
"resp_code": "302099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
302000 | 交易成功 |
302098 | 系统超时 |
302099 | 系统异常 |
302100 | 请求参数非法 |
302101 | 商户无此接口权限 |
302102 | 验证签名失败 |
302103 | 商户状态异常 |
302107 | 消息类型与签名内容不一致 |
302108 | 商户客户号与签名内容不一致 |
302109 | 版本号与签名内容不一致 |
302110 | 商户号不存在 |
302214 | 查询出现异常 |
316 银行限额列表查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为316 |
商户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
支付类型 | trans_type | 定长2位String | 必须 | 01:快捷,02:代扣 |
卡类型 | card_type | 变长2位的String | 必须 | 01:借记卡 02:贷记卡 03:准贷记卡 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为316 |
应答返回码 | resp_code | 定长6位的String | 必须 | 316000:交易成功, 316213:未查询到内容 316003:交易失败 316099:系统异常 |
应答描述 | resp_desc | 变长String | 必须 | |
商户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
支付类型 | trans_type | 定长2位String | 必须 | 参考数字字典 |
卡类型 | card_type | 定长2位String | 必须 | 参考数字字典 |
银行代码数组 | bank_code_list | List<String> | 可选 | 支持的银行列表 |
限额信息列表 | bank_limit_list | List<BankLimitDTO> | 可选 | 支持的银行限额列表 |
银行代码数组(bank_code_list)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
银行代码 | bankNo | 变长的String | 必须 | 参考附件银行代号 |
限额信息列表(bank_limit_list)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
银行代码 | bankNo | 变长的String | 必须 | 参考附件银行代号 |
日限额 | dayLimit | Double | 必须 | N/A |
单笔最低限额 | onceLimitLow | Double | 必须 | N/A |
单笔最高限额 | onceLimitHigh | Double | 必须 | N/A |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "316",
"mer_cust_id": "6666000000002619",
"trans_type": "01",
"card\_type": "01",
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "316";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
{
"cmd_id": "316",
"resp_code": "306000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
.......
}
失败响应:
200
{
"cmd_id": "316",
"resp_code": "306099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
.......
}
返回码¶
返回码 | 返回描述 |
---|---|
316000 | 交易成功 |
316099 | 系统异常 |
316100 | 请求参数非法 |
316104 | 用户状态异常 |
316110 | 商户号不存在 |
316103 | 商户状态异常 |
316101 | 商户无此接口权限 |
316102 | 验证签名失败 |
316107 | 消息类型与签名内容不一致 |
316108 | 商户客户号与签名内容不一致 |
316109 | 版本号与签名内容不一致 |
316213 | 未查询到内容 |
316003 | 交易失败 |
317 用户基本信息查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为317 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 以下四个,有且只有一个必填 |
营业执照注册号 | business_code | 变长30位的String | 可选 | 企业的营业执照注册号 |
统一社会信用代码 | social_credit_code | 变长18位的String | 可选 | 企业的统一社会信用代码 |
身份证号 | cert_id | 变长18位的String | 可选 | 个人用户,个体户 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为317 |
应答返回码 | resp_code | 定长6位String | 必须 | 317000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | |
用户名称 | user_name | 变长50位String | 必须 | 商户传商户名称, 个人个体用户传个人个体用户名称, 企业传企业名称 |
用户角色 | role_type | 定长2位String | 必须 | (“00”, “个人用户”), (“01”, “企业用户”), (“02” ,”商户”), (“03” ,”个体户”) |
手机号 | contact_mobile | 定长11位String | 必须 | 商户传商户联系人手机号, 个人个体用户传个人个体用户手机号, 企业传企业联系人手机号 |
营业执照号 | business_code | 变长30位String | 可选 | 商户传商户营业执照号, 个人个体用户不传, 企业传企业营业执照号 |
组织机构代码 | institution_code | 变长30位String | 可选 | 商户传商户组织机构代码, 个人个体用户不传, 企业传企业组织机构代码 |
统一社会信用代码 | social_credit_code | 变长30位 String | 可选 | 商户传商户统一社会信用代码, 个人个体用户不传, 企业传企业统一社会信用代码 |
证件类型 | cert_type | 定长2位 | 必须 | (“00”“身份证”), (“01”, “护照”), (“02”,”军官证”), (“03”,”士兵证”), (“04”,”回乡证”,) (“05”, “警官证”), (“06”,”台胞证”), (“07”,”其他”); |
证件号 | cert_id | 变长18位 String | 必须 | 商户传商户法人证件号, 个人个体用户传个人个体证件号, 企业传企业法人证件号 |
税务登记证号 | tax_code | 变长30位 String | 可选 | 商户传商户税务登记号, 个人个体用户不传, 企业传企业税务登记号 |
用户子账户 | acct_id_list | String(Json) | 可选 | 内容详看下方列表 |
用户状态标志 | stat_flag | 定长1位String | 必须 | 0关闭;1正常 |
用户子账户(acct_id_list )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
子账户ID | acctId | 变长9位String | 必须 | |
子账户名称 | acctName | 变长64位String | 必须 | |
账户业务类型 | acctBusinessType | 定长2位String | 必须 | 00:基本支付账户;01:基本非支付账户;02:验证手续费专户 |
子账户状态标志 | statFlag | 定长1位String | 必须 | 0关闭;1正常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "317",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026086",
"business_code": "",
"social_credit_code": "",
"cert_id": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "317";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
{
"cmd_id": "317",
"resp_code": "317000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
.......
}
失败响应:
200
{
"cmd_id": "317",
"resp_code": "317099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
.......
}
返回码¶
返回码 | 返回描述 |
---|---|
317000 | 交易成功 |
317003 | 交易失败 |
317099 | 系统异常 |
317100 | 请求参数非法 |
317101 | 商户无此接口权限 |
317102 | 验证签名失败 |
317103 | 商户状态异常 |
317107 | 消息类型与签名内容不一致 |
317108 | 商户客户号与签名内容不一致 |
317109 | 版本号与签名内容不一致 |
317110 | 商户号不存在 |
317111 | 用户客户号不存在 |
317801 | 解密失败 |
317802 | 查询无结果集 |
317803 | 加密失败 |
318 用户绑卡信息查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为318 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
绑卡Id | bind_card_id | 变长20位String | 可选 | 兼容快捷/取现绑卡ID,对两个ID都会做查询 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为318 |
应答返回码 | resp_code | 定长6位String | 必须 | 318000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
卡列表 | card_list | String(Json) | 必须 | 绑定的银行卡列表 |
卡列表(card_list)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
绑卡 ID | bindCardId | 变长20位String | 可选 | 汇付快捷绑卡的 ID |
卡类型 | cardType | 定长1位ring | 可选 | (C:对私 B:对公) |
手机号 | cardMobile | 定长11位String | 可选 | 代扣可无手机号 |
用户卡号 | cardNo | 定长32位String | 可选 | |
快捷卡标志 | qpFlag | 定长2位String | 可选 | 00否;01是; |
取现卡标志 | cashFlag | 定长2位String | 可选 | 00否;01是; |
代扣卡标志 | awFlag | 定长2位String | 可选 | 00否;01是; |
借贷标识 | dcFlag | 定长1位String | 可选 | 0–借记,储蓄卡 1–贷记,信用卡 |
绑卡 ID | cashBindCardId | 变长20位String | 可选 | 汇付取现绑卡的ID |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "318",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026086",
"bind_card_id ": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "318";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
{
"cmd_id": "318",
"resp_code": "318000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
.......
}
失败响应:
200
{
"cmd_id": "318",
"resp_code": "318099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
.......
}
返回码¶
返回码 | 返回描述 |
---|---|
318000 | 交易成功 |
318003 | 交易失败 |
318099 | 系统异常 |
318100 | 请求参数非法 |
318101 | 商户无此接口权限 |
318102 | 验证签名失败 |
318103 | 商户状态异常 |
318104 | 用户状态异常 |
318107 | 消息类型与签名内容不一致 |
318108 | 商户客户号与签名内容不一致 |
318109 | 版本号与签名内容不一致 |
318110 | 商户号不存在 |
318324 | 绑卡信息不存在,请重新绑卡 |
电子凭证下载 Q16¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | Q16 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单日期 | order_date | 定长8位String | 必须 | 保证订单号和订单日期唯一,格式为YYYYMMDD |
订单号 | order_id | 变长20位String | 必须 | 保证订单号和订单日期唯一 |
交易订单日期 | trans_order_date | 定长8位String | 必须 | 格式为YYYYMMDD |
交易订单号 | trans_order_id | 变长20位String | 可选 | 交易订单号为空时,交易订单日期必为当日之前某日。 |
交易阶段 | guarantee_stage | 定长1位String | 可选 | 交易订单号为担保订单或延时订单时必填,A:担保入账;B:担保出账;C:担保完成 |
异步通知地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。 |
扩展域 | extension | 变长512位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
商户私有域 | mer_priv | 变长120位String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | Q16 |
文件下载url | file_url | 变长512位String | 可选 | 文件下载URL |
返回码 | resp_code | 定长6位String | 必须 | Q16000–交易成功 Q16002-请求已受理 |
返回描述 | resp_desc | 变长String | 必须 | |
返回码 | return_code | 定长5位String | 必须 | 参见 返回码 |
返回描述 | return_desc | 变长String | 必须 | |
错误码 | error_code | 定长6位String | 可选 | 参见 错误码 |
错误描述 | error_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单日期 | order_date | 定长8位String | 必须 | 保证订单号和订单日期唯一,格式为YYYYMMDD |
订单号 | order_id | 变长20位String | 必须 | 保证订单号和订单日期唯一 |
交易订单日期 | trans_order_date | 定长8位String | 必须 | 格式为YYYYMMDD |
交易订单号 | trans_order_id | 变长20位String | 可选 | 交易订单号为空时,交易订单日期必为当日之前某日。 |
交易阶段 | guarantee_stage | 定长1位String | 可选 | 交易订单号为担保订单或延时订单时必填,A:担保入账;B:担保出账;C:担保完成 |
异步通知地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。 |
扩展域 | extension | 变长512位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
商户私有域 | mer_priv | 变长120位String | 可选 | 用于扩展请求参数 |
代码示例¶
java
String valueObj = "{
"version":"10",
"cmd_id":"Q16",
"mer_cust_id":"6666000000026086",
"order_date":"20190631",
"order_id":"201906315322400373",
"trans_order_date":"20190604",
"trans_order_id":"201906047576483",
"guarantee_stage":"A",
"bg_ret_url":"http://192.168.0.200:8015/hftest/common/commonResult.jsp",
"mer_priv":"",
"extension":""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "Q16";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
{
"bg_ret_url":"http://192.168.0.200:8015/hftest/common/commonResult.jsp",
"cmd_id":"Q16",
"error_code":"",
"error_desc":"",
"extension":"",
"file_url":"",
"guarantee_stage":"A",
"mer_cust_id":"6666000000026086",
"mer_priv":"",
"order_date":"20190631",
"order_id":"201906315322400373",
"resp_code":"Q16002",
"resp_desc":"请求已受理",
"return_code":"10002",
"return_desc":"交易处理中",
"trans_order_date":"20190604",
"trans_order_id":"201906047576483"
}
失败响应:
200
{
"bg_ret_url":"http://192.168.0.200:8015/hftest/common/commonResult.jsp",
"cmd_id":"Q16",
"error_code":"100001",
"error_desc":"请求订单号重复",
"extension":"",
"file_url":"",
"guarantee_stage":"A",
"mer_cust_id":"6666000000026086",
"mer_priv":"",
"order_date":"20190631",
"order_id":"201906315322400373",
"resp_code":"Q16001",
"resp_desc":"请求订单号重复",
"return_code":"10099",
"return_desc":"交易处理失败",
"trans_order_date":"20190604",
"trans_order_id":"201906047576484"
}