查询类接口¶
301 交易状态查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为301 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
交易查询类型 | trans_type | 定长2位String | 必须 | 快捷支付:01, 取现:02, 转账:03 ,退款:04 ,消费分期代扣绑卡:05 ,企业开户:06 ,快捷绑卡:07 ,取现绑卡:08 ,代扣支付:09 ,网银支付:10 ,扫码支付:11 ,代发:12 ,快捷支付页面版/APP版:13 ,反扫:14 ,非消费分期代扣绑卡:15 ,APP支付:16 ,H5收银台支付:17 ,刷脸支付:28 ,快捷小额免密支付:29 |
商户私有域 | mer_priv | 变长120 位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为301 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
返回码 | resp_code | 定长3位String | 必须 | 000:成功 099:系统异常 213:未查询到内容 |
返回内容 | resp_desc | 变长String | 可选 | |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
交易查询类型 | trans_type | 定长2位String | 必须 | 快捷支付:01, 取现:02, 转账:03 ,退款:04 ,消费分期代扣绑卡:05 ,企业开户:06 ,快捷绑卡:07 ,取现绑卡:08 ,代扣支付:09 ,网银支付:10 ,扫码支付:11 ,代发:12 ,快捷支付页面版/APP版:13 ,反扫:14 ,非消费分期代扣绑卡:15 ,APP支付:16 ,H5收银台支付:17 ,刷脸支付:28 |
汇付交易状态 | trans_stat | 变长8位的String | 可选 | 02000000:初始 02000001:已受理 02000002:成功 02000003:失败 02000004:未知 02000005:处理中 02000006:部分成功 02000007:二次验证中 02000008:交易关闭 02000009:冻结中 企业开户时 02000100:初始 02000101:待审核 02000102:审核中 02000103:待资料修改 02000104:审核通过 02000105:审核不通过 |
银行返回描述 | bg_bank_message | 变长200位String | 可选 | |
交易金额 | trans_amt | 变长14位的String | 可选 | 泛指交易金额,金额格式必须是###.00,比如2.00,2.01 |
手续费金额 | fee_amt | 变长14位的String | 可选 | 泛指交易金额,金额格式必须是###.00,比如2.00,2.01 |
原交易流水号 | platform_seq_id | 定长18位String | 必须 | 原交易返回的“本平台交易唯一标识号” |
外部订单流水号 | out_trans_id | 变长64位String | 可选 | 指支付宝、微信、银联流水号 |
分账账户串 | div_detail | 变长String | 可选 | |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
付款方银行编号 | pyer_bank_no | 定长String | 可选 | |
付款方银行账号 | pyer_acct_id | 定长String | 可选 | |
付款方银行账户名 | pyer_acct_nm | 定长String | 可选 |
分账账户串(div_detail)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 定长16位的String | 必须 | |
分账账户号 | divAcctId | 变长9位String | 必须 | |
分账金额 | divAmt | 变长14位String | 必须 | 分账金额,保留两位小数 |
冻结标记 | divFreezeFg | 定长2位String | 必须 | 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "301",
"mer_cust_id": "6666000000026086",
"order_id": "2180000489",
"order_date": "20171031",
"trans_type": "16",
"mer_priv": "",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "301";
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": "301",
"resp_code": "301000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "301",
"resp_code": "301099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
301000 | 交易成功 |
301098 | 系统超时 |
301099 | 系统异常 |
301100 | 请求参数非法 |
301101 | 商户无此接口权限 |
301102 | 验证签名失败 |
301103 | 商户状态异常 |
301107 | 消息类型与签名内容不一致 |
301108 | 商户客户号与签名内容不一致 |
301109 | 版本号与签名内容不一致 |
301110 | 商户号不存在 |
301213 | 未查询到内容 |
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 | 查询出现异常 |
303 余额查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为303 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 查询商户本身时,同商户客户号 |
账户号 | acct_id | 变长9位String | 必须 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为303 |
返回码 | resp_code | 定长3位String | 必须 | 000:成功 099:系统异常 |
返回内容 | resp_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 查询商户本身时,同商户客户号 |
账户号 | acct_id | 变长9位String | 必须 | |
可用余额 | balance | 变长String | 必须 | |
账户余额 | acct_balance | 变长String | 必须 | |
冻结余额 | freeze_balance | 变长String | 必须 | |
账户状态 | acct_stat | 定长1位 | 必须 | N:正常 C:关闭 F:冻结 D:销户 |
返回码¶
代码示例¶
java
String valueObj = "{"version":"10","cmd_id":"303","mer_cust_id":"6666000000026086","user_cust_id":"6666000000040420","acct_id":"122148"}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "303";
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": "303",
"resp_code": "303000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "303",
"resp_code": "303099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
305 裸扣交易状态查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为305 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
商户批次号 | mer_batch_id | 变长10位String | 非必须 | 格式为十位数字,从0000000001开始 查询批量代扣时,字段必输 |
交易日期 | trans_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307, |
商户私有域 | mer_priv | 变长120 位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为305 |
返回码 | resp_code | 定长3位String | 必须 | 000:成功 099:系统异常 213:订单信息不存在 |
返回内容 | resp_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
商户批次号 | mer_batch_id | 变长10位String | 可选 | 格式为十位数字,从0000000001开始 查询批量代扣时,字段必输 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户姓名 | user_name | 变长50位String | 必须 | 用户的真实姓名 |
身份证号 | cert_id | 变长18位String | 必须 | 用户的身份证号 |
金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
银行卡号 | card_no | 变长32位String | 必须 | 8位以下报错 |
手机号 | user_mobile | 定长11位String | 可选 | 用户的手机号 |
入账日期 | acct_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
代扣业务类型 | trans_type | 变长4位String | 必须 | 花呗:MYHB;借呗:MYJB;网商银行:MYWS;基金购买:MYJJ; (一个批次只能是一种类型) |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "305",
"mer_cust_id": "6666000000217291",
"order_id": "044030",
"mer_batch_id": "20102156",
"trans_date": "20170921",
"mer_priv": "",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "305";
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": "305",
"resp_code": "305000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "305",
"resp_code": "305099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
306 快捷绑卡查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为306 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为306 |
返回码 | resp_code | 定长3位String | 必须 | 000:成功 099:系统异常 |
返回内容 | resp_desc | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
查询返回卡记录条数 | counts | 变长String | 必须 | 格式数字 |
卡列表 | card_list | 变长String | 必须 | 绑定的银行卡列表 |
卡列表(card_list)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
绑卡ID | bindCardId | 变长20位String | 必须 | 汇付快捷绑卡的ID |
快捷卡卡号 | cardNo | 定长3位String | 必须 | 银行卡掩码 |
银行编号 | bankId | 变长8位String | 必须 | 银行代号 |
借贷标识 | dcFlag | 定长8位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 |
状态标志 | status | 定长8位String | 必须 | 00–正常 01–异常 |
返回码¶
代码示例¶
java
String valueObj = "{"version":"10","cmd_id":"306","mer_cust_id":"6666000000002619","user_cust_id":"6666000000005942"}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "306";
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": "306",
"resp_code": "306000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "306",
"resp_code": "306099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
311 重新绑卡查询¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为311 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
绑定银行卡ID | bind_card_id | 变长20位String | 可选 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为311 |
应答返回码 | resp_code | 定长6位String | 必须 | 311000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
绑定银行卡信息 | bind_card_info | 变长String | 必须 | 数据格式: [{‘bindCardId’:‘0001’,’bindStat’:‘0’},{‘bindCardId’:‘0002’,’bindStat’:‘1’}] |
绑定银行卡信息(bind_card_info)
bind_card_info | ||||
绑定银行卡ID | bindCardId | 变长20位String | 必须 | bind_card_info参数下的二级参数 |
绑定银行卡状态 | bindStat | 定长1位String | 必须 | bind_card_info参数下的二级参数 1-已绑卡 0-未绑卡 |
返回码¶
代码示例¶
java
String valueObj = "{"version":"10","cmd_id":"311","mer_cust_id":"6666000000026086","user_cust_id":"6666000000026190"}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "311";
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": "311",
"resp_code": "311000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "311",
"resp_code": "311099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
313 代发回执单生成¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为313 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
原订单日期 | order_date | 定长8位String | 可选 | 格式为YYYYMMDD,例如:20160307; |
原订单号 | order_id | 变长20位String | 可选 | 由商户生成,必须保证唯一, 20位内的字母或数字组合; (订单日期+订单号与平台流水号必选其一) |
平台流水号 | platform_seq_id | 定长18位String | 可选 | 组成规则:8位本平台日期+ 10位系统流水号 (订单日期+订单号与平台流水号必选其一) |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户回执单生成结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为313 |
应答返回码 | resp_code | 定长6位String | 必须 | 313001—处理中 , 其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
原订单日期 | order_date | 定长8位String | 可选 | 格式为YYYYMMDD,例如:20160307 |
原订单号 | order_id | 变长20位String | 可选 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
原平台交易唯一标识号 | platform_seq_id | 定长18位String | 可选 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
收款人姓名 | cust_name | 变长20位String | 必须 | 必须与银行户名相同 |
银行账号 | bank_card_no | 变长30位String | 必须 | 代发到的银行账户 |
代发用途 | purpose | 变长20位String | 必须 |
商户后台应答返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 313 |
应答返回码 | resp_code | 定长6位String | 必须 | 313000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
原订单日期 | order_date | 定长8位String | 可选 | 格式为YYYYMMDD,例如:20160307 |
原订单号 | order_id | 变长20位String | 可选 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
原平台交易唯一标识号 | platform_seq_id | 定长18位String | 可选 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
回执单下载地址 | receipt_url | 变长256位的String | 必须 | 生成的电子签章回执单的下载地址 |
收款人姓名 | cust_name | 变长20位String | 必须 | 必须与银行户名相同 |
银行账号 | bank_card_no | 变长30位String | 必须 | 代发到的银行账户 |
代发用途 | purpose | 变长20位String | 必须 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "313",
"mer_cust_id": "6666000000028641",
"order_date": "20180509",
"order_id": "",
"platform_seq_id": "201805090000010264",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "313";
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": "313",
"resp_code": "313000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "313",
"resp_code": "313099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
313000 | 交易成功 |
313003 | 交易失败 |
313099 | 系统异常 |
313100 | 请求参数非法 |
313101 | 商户无此接口权限 |
313102 | 验证签名失败 |
313103 | 商户状态异常 |
313104 | 用户状态异常 |
313107 | 消息类型与签名内容不一致 |
313108 | 商户客户号与签名内容不一致 |
313109 | 版本号与签名内容不一致 |
313110 | 商户号不存在 |
313310 | 产品信息校验失败 |
313201 | 该商户未开通代发回执单权限 |
313202 | 未查询到该笔交易 |
320 批量代发回执单生成¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为320 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
原订单日期 | order_date | 定长8位String | 可选 | 格式为YYYYMMDD,例如:20160307;(二选一) |
原订单号 | order_id | 变长28位String | 可选 | 商户代发交易时的订单号,订单日期+订单号,最多1000笔订单号;(二选一)[“201603070000024301”,”201703070000024302”,”201603070000024303”,……….] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户回执单生成结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为320 |
应答返回码 | resp_code | 定长6位String | 必须 | 320002—请求已受理 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
无效订单 | error_order_id | 变长String | 可选 | 仅传订单号查询时返回,订单号无效或不存在,无法生成回执单 [“201603070000024301”,” 201703070000024302”,” 201603070000024303”,……….] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户后台应答返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 320 |
应答返回码 | resp_code | 定长6位String | 必须 | 320000–调用成功 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
回执单下载地址 | receipt_url | 变长256位的String | 可选 | 生成的电子签章回执单的下载地址 |
无效订单 | error_order_id | 变长String | 可选 | 仅传订单号查询时返回,订单号无效或不存在,无法生成回执单[“201603070000024301”,”201703070000024302”,”201603070000024303”,……….] |
回执单文件为PDF文档,每页三个回执单
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "320",
"mer_cust_id": "6666000000028641",
"order_date": "20180509",
"order_id": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "320";
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": "320",
"resp_code": "320000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "320",
"resp_code": "320099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
320000 | 交易成功 |
320003 | 交易失败 |
320099 | 系统异常 |
320100 | 请求参数非法 |
320101 | 商户无此接口权限 |
320102 | 验证签名失败 |
320103 | 商户状态异常 |
320104 | 用户状态异常 |
320107 | 消息类型与签名内容不一致 |
320108 | 商户客户号与签名内容不一致 |
320109 | 版本号与签名内容不一致 |
320110 | 商户号不存在 |
320310 | 产品信息校验失败 |
320201 | 该商户未开通代发回执单权限 |
320202 | 未查询到该笔交易 |
320203 | 请求参数格式错误 |
320204 | 未查询到代发交易 |
320205 | 超过查询最大订单数 |
320206 | 查询条件订单日期和订单号二者选其一 |
315 查询签约号接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为315 |
商户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
银行卡号 | card_no | 变长20位的String | 必须 | |
手机号 | card_mobile | 定长11位String | 必须 | |
身份证号 | cert_id | 变长18位的String | 可选 | |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为315 |
应答返回码 | resp_code | 定长6位的String | 必须 | 315000:交易成功, 315302:查无协议号,须重新签约 315003:交易失败(透传fpc的message) 315099:系统异常 |
应答描述 | resp_desc | 变长String | 必须 | |
商户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "306",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"card_no": "",
"card_mobile": "15822298989",
"cert_id": "330183199308303977",
"mer_priv ": "",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "306";
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": "306",
"resp_code": "306000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "306",
"resp_code": "306099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
315000 | 交易成功 |
315099 | 系统异常 |
315100 | 请求参数非法 |
315104 | 用户状态异常 |
315110 | 商户号不存在 |
315103 | 商户状态异常 |
315101 | 商户无此接口权限 |
315102 | 验证签名失败 |
315107 | 消息类型与签名内容不一致 |
315108 | 商户客户号与签名内容不一致 |
315109 | 版本号与签名内容不一致 |
315302 | 查无协议号,须重新签约 |
315003 | 交易失败 |
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 | 交易失败 |
123 商户文件下载接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为 10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 123 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
对账文件日期 | file_date | 定长2位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
文件大类 | boa_file_type | 变长2位的String | 必须 | 对账单文件:01 收益文件:02 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 123 |
应答返回码 | resp_code | 定长6位String | 必须 | 123000–调用成功,其他见附件四:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
文件下载地址 | file_url | List<FileUrlBo> | 必须 | 返回文件信息列表 |
FileUrlBo定义
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
文件类型 | fileType | 变长的String | 可选 | 04010300:日报资金对账,04010301:月报资金对账,04010302:支付交易对账,04010303:退款交易对账,04010304:取现交易对账,04010306:代发交易对账,04010311:生利宝收益文件,04010312:跨商户转账 04010315:充值交易对账,04010316:余额支付交易对账,04010317:组合支付交易对账,04010318:转账交易对账 |
文件地址 | fileUrl | 变长的String | 可选 | 文件查看下载地址 |
文件序号 | fileSeq | 变长的String | 可选 | 同类型的序号从 1 开始 |
文件后缀 | fileSuff | 变长的String | 可选 | 文件的后缀名 |
文件名称 | fileName | 变长的String | 可选 | 文件的名称 |
代码示例¶
java
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huifu.saturn.cfca.CFCASignature;
import com.huifu.saturn.cfca.SignResult;
import com.huifu.saturn.cfca.VerifyResult;
import org.apache.commons.codec.binary.Base64;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
public class Demo123 {
public static void main(String[] args) {
String valueObj="{\"version\": \"10\",\"cmd_id\": \"123\",\"mer_cust_id\": \"6666000000002619\",\"file_date\": \"20180101\",\"boa_file_type\": \"01\"}";
// 地址可以询问对方运营
String testUrl = "http://mertest.chinapnr.com/npay/fileMerchantRequest";
// 文件可以询问对方运营
String cerFile = "D:/app/etc/product/CFCA_ACS_TEST_OCA31.cer";
// 加签用pfx文件,配置商户的Pfx文件名
String pfxFile = "D:/app/etc/product/888888-NEW.pfx";
// 加签用密码,配置商户的pwd
String pfxFilePwd = "123456";
// 进行base64转换
String base64RequestParams = Base64.encodeBase64String(valueObj.getBytes(Charset.forName("utf-8")));
// 加签,配置商户的CFCA路径
SignResult signResult = CFCASignature.signature(pfxFile, pfxFilePwd, base64RequestParams,
"utf-8");
if (!"000".equals(signResult.getCode())) {
System.out.println("加签错误");
return;
}
String checkValue = signResult.getSign();
String cmdId = "123";
//自助联调系统默认商户号为:6666000000002619,开发时更换成自己的商户号
String merCustId = "6666000000002619";
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;
HttpRequest httpRequest = HttpRequest.post(testUrl).charset(charset);
HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
// 响应解密 验签失败
JSONObject jsonObject = JSON.parseObject(body);
String sign = jsonObject.getString("check_value");
VerifyResult verifyResult = CFCASignature.verifyMerSign("100001", sign, charset,cerFile);
if (!"000".equals(verifyResult.getCode()))
{
System.out.println("验签失败");
return;
}
String content = new String(verifyResult.getContent(), Charset.forName(charset));
String decrptyContent = new String(Base64.decodeBase64(content), Charset.forName(charset));
System.out.println(decrptyContent);
try{
//如果返回的有附件,则下载第一个附件进行下载测试
JSONObject jo = JSON.parseObject(decrptyContent);
JSONObject jo2 = jo.getJSONArray("file_url").getJSONObject(0);
//获取第一个附件,根据附件url和附件名称下载附件到桌面
downLoadFromUrl(jo2.getString("fileUrl"), jo2.getString("fileName"),"C:/Users/hao.sun/Desktop/");
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* 从网络Url中下载文件
* @param urlStr
* @param fileName
* @param savePath
* @throws IOException
*/
public static void downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组
byte[] getData = readInputStream(inputStream);
//文件保存位置
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
File file = new File(saveDir+File.separator+fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(getData);
if(fos!=null){
fos.close();
}
if(inputStream!=null){
inputStream.close();
}
System.out.println("info:"+url+" download success");
}
/**
* 从输入流中获取字节数组
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
}
返回码¶
返回码 | 返回描述 |
---|---|
123000 | 交易成功 |
123003 | 交易失败 |
123099 | 系统异常 |
123100 | 请求参数非法 |
123101 | 商户无此接口权限 |
123102 | 验证签名失败 |
123103 | 商户状态异常 |
123107 | 消息类型与签名内容不一致 |
123108 | 商户客户号与签名内容不一致 |
123109 | 版本号与签名内容不一致 |
123110 | 商户号不存在 |
123321 | 未查到对账文件或收益文件 |
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 | 绑卡信息不存在,请重新绑卡 |
线下充值入账通知¶
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
商户客户号 | mer_cust_id | 变长16位String | 必须 | |
子账户号 | acct_id | 变长9位String | 必须 | |
转账金额 | trans_amt | 变长14String | 必须 | |
用户转账日期 | trf_date | 变长位String | 必须 | |
转账流水号 | trf_seq | 变长128位的String | 必须 | |
交易摘要 | trf_note | 变长256位的String | 可选 | |
入账日期 | acct_date | 定长8位String | 必须 | |
入账流水号 | sys_seq_id | 变长10位Strig | 必须 | |
交易状态 | trans_stat | 固定1位 | 必须 | 成功S,失败F |
错误描述 | error_desc | 变长256位String | 可选 |
321 批量生成电子回执单¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为321 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
交易日期 | trans_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307;交易日期和订单日期传一致,如果查询不到数据,可能交易日期和订单日期出现跨天的情况,需调整交易日期再请求 |
原订单号 | order_id | 变长String | 可选 | 商户代发交易时的订单号,订单日期+订单号,最多1000笔订单号; [“201601”,”2016010”,”201603070000024301”,”201603070000024302”,……….] |
查询类型 | query_type | 定长1位 | 必须 | 支付:1 ,转账:0 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户回执单生成结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为321 |
应答返回码 | resp_code | 定长6位String | 必须 | 321002—请求已受理 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
无效订单 | error_order_id | 变长String | 可选 | 仅传订单号查询时返回,订单号无效或不存在,无法生成回执单 [“201601”,”2016010”] |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 321 |
应答返回码 | resp_code | 定长6位String | 必须 | 321000–调用成功 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
回执单下载地址 | receipt_url | 变长256位String | 可选 | 生成的电子签章回执单的下载地址 |
无效订单 | error_order_id | 变长String | 可选 | 仅传订单号查询时返回,订单号无效或不存在,无法生成回执单 [“201603070000024301”,……….] |
回执单文件为PDF文档,每页三个回执单,每个文件最大2000个电子凭证
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "321",
"mer_cust_id": "6666000000026086",
"order_date": "20160109",
"order_id": ["201601","2016010"],
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "321";
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": "321",
"resp_code": "321002",
"resp_desc": "请求已受理",
"mer_cust_id" : "6666000000026086",
"error_order_id": ["201601","2016010"],
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
}
失败响应:
200
{
"cmd_id": "321",
"resp_code": "321307",
"resp_desc": "无有效订单号",
"mer_cust_id" : "6666000000026086",
"error_order_id": ["201601","2016010"],
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
}
返回码¶
返回码 | 返回描述 |
---|---|
321000 | 交易成功 |
321002 | 请求已受理 |
321096 | 系统繁忙 |
321099 | 系统异常 |
321100 | 请求参数非法 |
321110 | 商户号不存在 |
321214 | 查询出现异常 |
321300 | 该商户未开通回执单权限 |
321301 | 超过查询最大订单数 |
321302 | 已有请求处理中 |
321303 | 无该查询类型 |
321304 | 生成记录失败 |
321305 | 未查询到交易数据 |
321306 | 生成回执单PDF文件失败 |
321307 | 无有效订单号 |
331 服务费查询接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为331 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 变长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为331 |
应答返回码 | resp_code | 定长6位String | 必须 | 331000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
交易金额 | trans_amt | 变长14位String | 必须 | |
服务费 | gua_service_amt | 变长14位String | 可选 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "331",
"mer_cust_id": "6666000000002619",
"card_no": "4367288208658152"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "331";
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": "331",
"resp_code": "331000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"gua_service_amt": "0.97",
"trans_amt": "11.00",
.......
}
失败响应:
200
{
"cmd_id": "331",
"resp_code": "331003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"trans_amt": "11.00",
.......
}
返回码¶
返回码 | 返回描述 |
331000 | 交易成功 |
331003 | 交易失败 |
331098 | 系统超时 |
331099 | 系统异常 |
331100 | 请求参数非法 |
331101 | 商户无此接口权限 |
331102 | 验证签名失败 |
331103 | 商户状态异常 |
331107 | 消息类型与签名内容不一致 |
331108 | 商户客户号与签名内容不一致 |
331109 | 版本号与签名内容不一致 |
331110 | 商户号不存在 |
331214 | 查询出现异常 |