交易类接口¶
快捷支付短信发送接口 112¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为112 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 付款人快捷支付时的快捷绑卡的ID (快捷支付时的返回参数) |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户短信发送结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
分账账户串(div_detail)内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长3位String | 必须 | 每一种消息类型代表一种交易,此处为一阶段短信发送112 |
应答返回码 | resp_code | 定长6位String | 必须 | 201000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_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 | 必须 | 通过后台异步通知商户开户结果 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
112000 | 交易成功 |
112002 | 请求已受理 |
112003 | 交易失败 |
112098 | 系统超时 |
112099 | 系统异常 |
112100 | 请求参数非法 |
112101 | 商户无此接口权限 |
112102 | 验证签名失败 |
112103 | 商户状态异常 |
112104 | 用户状态异常 |
112107 | 消息类型与签名内容不一致 |
112108 | 商户客户号与签名内容不一致 |
112109 | 版本号与签名内容不一致 |
112110 | 商户号不存在 |
112302 | 不支持此支付类型 |
112307 | 该用户未绑定快捷卡 |
112720 | 快捷支付只服务于个人或个体用户 |
112721 | 分账串内容不能超过五个 |
112722 | 分账串部分字段为空 |
112723 | 分账串金额格式错误 |
112724 | 分账串累计金额不等于订单金额 |
112725 | 分账信息用户状态异常 |
112726 | 分账信息账户状态异常 |
112727 | 分账信息异常 |
112728 | 分账串账户信息格式错误 |
112729 | 分账串账户异常 |
112739 | 快捷支付短信发送异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "112",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026303",
"order_id": "2011887095",
"order_date": "20180327",
"trans_amt": "6.95",
"bind_card_id": "1000000085",
"div_detail": "[{'divCustId':'6666000000026185','divAcctId':'79704','divAmt':'6.92','divFreezeFg':'01'},{'divCustId':'6666000000026086','divAcctId':'79506','divAmt':'0.03','divFreezeFg':'00'}]",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"ret_url": "",
"mer_priv": "test",
"extension": "test",
"payer_term_type": "01",
"payee_term_no": "payee_term_no",
"payer_term_no": "test_payer_term_no",
"payee_term_type": "02",
"goods_short_name": "goods_short_name"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "112";
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": "112",
"resp_code": "112000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "112",
"resp_code": "112099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付接口 201¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 固定为201 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” 注:请和快捷短信发送接口的订单日期一致 |
订单号 | order_id | 变长20位String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 注:请和快捷短信发送接口的订单号一致 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 付款人快捷支付时的快捷绑卡的ID (快捷支付时的返回参数) |
短信验证码 | sms_code | 定长6位String | 必须 | 联调测试时默认传111111,生产环境请传真实的验证码 |
分账账户串 | div_detail | 变长String | 必须 | 入账客户传,json格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把同步交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 交易结束后,通过此地址异步通知商户支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长3位String | 必须 | 固定为201 |
应答返回码 | resp_code | 定长6位String | 必须 | 201000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 退款时需要用此标识号,组成规则:8位本平台日期+ 10位系统流水号, |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 付款人快捷支付时的快捷绑卡的ID (快捷支付时的返回参数) |
短信验证码 | sms_code | 定长6位String | 可选 | |
分账账户串 | div_detail | 变长String | 可选 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
201000 | 交易成功 |
201002 | 请求已受理 |
201003 | 交易失败 |
201099 | 系统异常 |
201100 | 请求参数非法 |
201101 | 商户无此接口权限 |
201102 | 验证签名失败 |
201103 | 商户状态异常 |
201104 | 用户状态异常 |
201105 | 账户状态异常 |
201107 | 消息类型与签名内容不一致 |
201108 | 商户客户号与签名内容不一致 |
201109 | 版本号与签名内容不一致 |
201110 | 商户号不存在 |
201202 | 交易订单号重复 |
201204 | 商户配置异常 |
201210 | 短信验证码发送过于频繁 |
201300 | 不支持此充值银行 |
201307 | 该用户未绑定快捷卡 |
201314 | 充值手续费账户状态不正常 |
201720 | 快捷支付只服务于个人或个体用户 |
201721 | 分账串内容不能超过五个 |
201722 | 分账串部分字段为空 |
201723 | 分账串金额格式错误 |
201724 | 分账串累计金额不等于订单金额 |
201725 | 分账信息用户状态异常 |
201726 | 分账信息账户状态异常 |
201727 | 分账信息异常 |
201728 | 分账串账户信息格式错误 |
201729 | 分账串账户异常 |
201730 | 快捷支付卡有变更,请重新获取验证码 |
201731 | 快捷支付分账转账失败 |
201732 | 快捷支付分账转账表处理失败 |
201733 | 分账支付明细表处理失败 |
201734 | 该商户客户号网银支付网关号未配置 |
201735 | 商户无目标支付网关权限 |
201736 | 快捷支付交易金额不一致 |
201737 | 支付明细表处理失败 |
201738 | 快捷支付分账串内容不一致 |
201739 | 快捷支付短信发送异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "201",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026303",
"order_id": "2011887094",
"order_date": "20180327",
"trans_amt": "6.95",
"bind_card_id": "1000000085",
"sms_code": "111111",
"div_detail": "[{'divCustId':'6666000000026185','divAcctId':'79704','divAmt':'6.92','divFreezeFg':'01'},{'divCustId':'6666000000026086','divAcctId':'79506','divAmt':'0.03','divFreezeFg':'00'}]",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"ret_url": "",
"mer_priv": "test",
"extension": "test"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "201";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "201",
"resp_code": "201000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "201",
"resp_code": "201099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
页面展示¶
取现接口 202¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处固定为202 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
交易金额 | trans_amt | 变长14位的String | 必须 | 泛指交易金额,金额格式必须是###.00,比如2.00,2.01 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 必须 | 取现绑卡返回的ID |
手续费收取对象 | fee_obj | 定长8位的String | 可选 | 用户商户指定取现手续费的收取对象,优先级别高于商户配置的收取对象 02050200:向商户收取 02050201:向用户收取 空白默认为向商户收取 |
手续费收取子账户 | fee_acct_id | 变长9位的String | 可选 | 向商户收取必填 向用户收取可忽略 |
取现方式 | cash_type | 定长8位的String | 必须 | 02030000:T+0取现;02030010:T+1取现 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户取现结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为202 |
返回码 | resp_code | 变长String | 必须 | 202000–调用成功,其他见返回码 |
结果描述 | resp_desc | 变长String | 必须 | 返回描述 |
商户客户号 | mer_cust_id | 变长16位的String | 必须 | |
用户客户号 | user_cust_id | 变长16位的String | 必须 | |
订单日期 | order_date | 定长8位 | 必须 | |
订单号 | order_id | 变长20位的String | 必须 | |
平台流水id | platform_seq_id | 定长18位String | 必须 | 交易流水号 |
交易金额 | trans_amt | 变长14位的String | 必须 | |
实际到账金额 | real_trans_amt | 变长14位的String | 可选 | 取现成功实际到账金额,各种原因导致取现失败则不传 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 必须 | |
开户银行代号 | bank_id | 变长8位的String | 可选 | 具体见附件:开户银行代号 |
手续费金额 | fee_amt | 变长14位的String | 必须 | |
手续费扣款客户号 | fee_cust_id | 变长16位的String | 必须 | |
手续费扣款子账户号 | fee_acct_id | 变长9位的String | 必须 | |
交易状态 | trans_stat | 变长8位的String | 必须 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户取现结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回码¶
返回码 | 返回描述 |
202000 | 交易成功 |
202002 | 请求已受理 |
202003 | 交易失败 |
202099 | 系统异常 |
202100 | 请求参数非法 |
202101 | 商户无此接口权限 |
202102 | 验证签名失败 |
202103 | 商户状态异常 |
202104 | 用户状态异常 |
202105 | 账户状态异常 |
202107 | 消息类型与签名内容不一致 |
202108 | 商户客户号与签名内容不一致 |
202109 | 版本号与签名内容不一致 |
202110 | 商户号不存在 |
202113 | 过渡账户不能出账 |
202202 | 交易订单号重复 |
202204 | 商户配置异常 |
202300 | 银行卡信息不存在 |
202301 | 银行卡状态异常 |
202302 | 银行卡不是取现卡 |
202304 | 该商户不支持该取现方式 |
202305 | 取现金额小于等于取现费用 |
202310 | 取现用户不能为商户本身 |
202311 | 该商户暂时不允许T0取现 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "202",
"mer_cust_id": "6666000000217291",
"user_cust_id": "6666000000291215",
"order_date": "20180322",
"order_id": "20107063",
"trans_amt": "0.01",
"cash_bind_card_id": "5899770",
"fee_obj": "02050200",
"fee_acct_id": "219871",
"cash_type": "02030010",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_mer_priv",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "202";
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": "202",
"resp_code": "202000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "202",
"resp_code": "202099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
转账接口 203¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 默认为10,可扩展 |
消息类型 | cmd_id | 定长String | 必须 | 固定203 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 汇付生成,唯一 |
订单号 | order_id | 定长20位String | 必须 | 商户系统生成,商户下唯一 |
订单日期 | order_date | 定长8 位String | 必须 | YYYYMMDD |
出账客户号 | out_cust_id | 变长16位的String | 必须 | 汇付生成,用户的唯一性标识 |
出账子账户号 | out_acct_id | 变长9位的String | 必须 | |
入账客户号 | in_cust_id | 变长16位的String | 必须 | 入账客户号,由汇付生成,用户的唯一性标识 |
入账子账户号 | in_acct_id | 变长9位的String | 必须 | |
转账金额 | transfer_amt | 变长14位的String | 必须 | 金额格式必须是###.00 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户转账结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120 位的String | 必须 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
入参扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 固定203 |
应答返回码 | resp_code | 定长6位的String | 必须 | |
应答描述 | resp_desc | 变长String | 必须 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 汇付生成,唯一 |
订单号 | order_id | 定长20位String | 必须 | 商户系统生成,商户下唯一 |
订单日期 | order_date | 定长8 位String | 必须 | YYYYMMDD |
出账客户号 | out_cust_id | 变长16位的String | 必须 | |
出账子账户号 | out_ acct _id | 变长9位的String | 必须 | |
入账客户号 | in_cust_id | 变长16位的String | 必须 | |
入账子账户号 | in_ acct _id | 变长9位的String | 必须 | |
转账金额 | transfer_amt | 变长14位的String | 必须 | 金额格式必须是###.00 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户转账结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返参扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
203000 | 交易成功 |
203099 | 系统异常 |
203100 | 请求参数非法 |
203101 | 商户无此接口权限 |
203102 | 验证签名失败 |
203103 | 商户状态异常 |
203104 | 用户状态异常 |
203107 | 消息类型与签名内容不一致 |
203108 | 商户客户号与签名内容不一致 |
203109 | 版本号与签名内容不一致 |
203110 | 商户号不存在 |
203202 | 交易订单号重复 |
203301 | 转出方用户信息不存在 |
203302 | 转入方用户信息不存在 |
203303 | 转出方用户状态异常 |
203304 | 转入方用户状态异常 |
203307 | 转出方帐户号不存在 |
203308 | 转入方账号不存在 |
203309 | 转出方帐户状态异常 |
203310 | 转入方帐户状态异常 |
203311 | 转账失败 |
203317 | 个人用户账户不能出账 |
203318 | 转出方帐户不能为过渡账户 |
203319 | 转入方帐户不能为过渡账户 |
203320 | 转出方和转入方不能相同 |
203803 | 支付交易受限,限额限次或其他 |
203804 | 商户超限额或限次 |
203805 | 商户未开通该功能权限 |
203806 | 商户交易限制 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "203",
"mer_cust_id": "6666000000026086",
"order_id": "20171913212022",
"order_date": "20170824",
"transfer_type": "02040004",
"out_cust_id": "6666000000026303",
"out_acct_id": "79913",
"in_cust_id": "6666000000026086",
"in_acct_id": "79506",
"transfer_amt": "11.02",
"bg_ret_url": "http://192.168.25.79:8081/zeus-callback/asyncHandle.json",
"mer_priv": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "203";
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": "203",
"resp_code": "203000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "203",
"resp_code": "203099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
网银支付( WEB 版)接口 204¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为204 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
支付网关号 | gate_id | 定长2位的String | 可选 | 如果不填,支付时会先调到汇付银行选择页面,用户选择银行后,再跳转银行页面 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式保留两位小数 |
页面返回URL | ret_url | 变长128位String | 可选 | 前台异步通知商户网银支付结果,前台页面返回 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户网银支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 |
分账账户串 | div_detail | 必须 | 数据格式:[{“div_cust_id “:”6000060000009547”,”div_acct_id”:”MDT000001”,”div_amt”:”1.00”,div_freeze_fg:” 00000100”}] | |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
商品名称 | goods_desc | 变长12位String | 可选 | 默认:通用型产品 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为204 |
应答返回码 | resp_code | 定长6位String | 必须 | 204000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
交易金额 | trans_amt | 变长14位的String | 必须 | 金额格式保留两位小数 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户网银支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位String | 可选 | 前台异步通知商户网银支付结果,前台页面返回 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
分账账户串 | div_detail | String | 必须 |
返回码¶
返回码 | 返回描述 |
204000 | 交易成功 |
204002 | 请求已受理 |
204003 | 交易失败 |
204098 | 系统超时 |
204099 | 系统异常 |
204100 | 请求参数非法 |
204101 | 商户无此接口权限 |
204102 | 验证签名失败 |
204103 | 商户状态异常 |
204104 | 用户状态异常 |
204105 | 账户状态异常 |
204107 | 消息类型与签名内容不一致 |
204108 | 商户客户号与签名内容不一致 |
204109 | 版本号与签名内容不一致 |
204110 | 商户号不存在 |
204111 | 用户客户号不存在 |
204201 | 页面数据被篡改 |
204202 | 交易订单号重复 |
204215 | 请补录身份信息 |
204300 | 不支持此支付银行 |
204303 | 商户支付基础信息未配置 |
204314 | 支付手续费账户状态不正常 |
204721 | 分账串内容不能超过五个 |
204722 | 分账串部分字段为空 |
204723 | 分账串金额格式错误 |
204724 | 分账串累计金额不等于订单金额 |
204725 | 分账信息用户状态异常 |
204726 | 分账信息账户状态异常 |
204727 | 分账信息异常 |
204728 | 分账串账户信息格式错误 |
204729 | 分账串账户异常 |
204733 | 分账支付明细表处理失败 |
204734 | 该商户客户号网银支付网关号未配置 |
204737 | 支付明细表处理失败 |
204803 | 支付交易受限,限额限次或其他 |
204804 | 商户超限额或限次 |
204805 | 商户未开通该功能权限 |
204806 | 商户交易限制 |
204324 | 网银支付用户不能为商户本身 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "204",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"order_id": "20000008404",
"order_date": "20170830",
"gate_id": "09",
"trans_amt": "21.03",
"ret_url": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "et",
"extension": "..n",
"div_detail": "[{\"divCustId\":\"6666000000002619\",\"divAcctId\":\"2744\",\"divAmt\":\"11.03\",\"divFreezeFg\":\"00\"},{\"divCustId\":\"6666000000002962\",\"divAcctId\":\"3133\",\"divAmt\":\"10.00\",\"divFreezeFg\":\"00\"}]"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "204";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "204",
"resp_code": "204000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "204",
"resp_code": "204099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
退款接口 205¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为205 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 可选 | 由汇付生成,用户的唯一性标识 对原交易为网银支付,代扣支付,快捷支付,必须 对原交易为扫码支付,可选 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
退款金额 | trans_amt | 变长14位的String | 必须 | 退款金额,金额格式必须是###.00,比如2.00,2.01 |
原交易平台流水id | orginal_platform_seq_id | 定长18位String | 必须 | 原交易流水号 |
快捷支付页面版标识 | quickpay_page_flag | 定长1位String | 可选 | 默认为否 否:0 是:1 原交易为快捷支付WEB版或快捷支付APP版时,设为是 |
分账账户串 | div_detail | 变长String | 必须 | 出账账户串,json格式:[{“divCustId”:”60010001”,” divAcctId”:”000001”,”divAmt”:”1.00”}] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户退款结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
返回码¶
返回码 | 返回描述 |
205000 | 交易成功 |
205002 | 请求已受理 |
205003 | 交易失败 |
205098 | 系统超时 |
205099 | 系统异常 |
205100 | 请求参数非法 |
205101 | 商户无此接口权限 |
205102 | 验证签名失败 |
205103 | 商户状态异常 |
205104 | 用户状态异常 |
205105 | 账户状态异常 |
205107 | 消息类型与签名内容不一致 |
205108 | 商户客户号与签名内容不一致 |
205109 | 版本号与签名内容不一致 |
205110 | 商户号不存在 |
205111 | 用户客户号不存在 |
205112 | 账号不存在 |
205113 | 过渡账户不能出账 |
205202 | 交易订单号重复 |
205300 | 原支付交易不存在 |
205301 | 该订单状态不可退款 |
205302 | 订单已退款 |
205303 | 用户客户号与支付交易不一致 |
205305 | 可退金额不足 |
205306 | 调用PA批量转账接口失败 |
205721 | 分账串内容不能超过五个 |
205722 | 分账串部分字段为空 |
205723 | 分账串金额格式错误 |
205724 | 分账串累计金额不等于订单金额 |
205727 | 分账信息异常 |
205728 | 分账串账户信息格式错误 |
205729 | 分账串账户异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "205",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"order_date": "20170830",
"order_id": "2000501",
"quickpay_page_flag": "1",
"trans_amt": "0.03",
"orginal_platform_seq_id": "201708300000004663",
"div_detail": "[{\"divCustId\":\"6666000000002962\",\"divAcctId\":\"3133\",\"divAmt\":\"0.01\",\"divFreezeFg\":\"00\"},{\"divCustId\":\"6666000000002619\",\"divAcctId\":\"2744\",\"divAmt\":\"0.02\",\"divFreezeFg\":\"00\"}]",
"bg_ret_url": "http://192.168.25.79:8081/zeus-callback/asyncHandle.json",
"mer_priv": "1",
"extension": "1"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "205";
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;
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": "205",
"resp_code": "205000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000002619",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "205",
"resp_code": "205099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000002619",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
代扣支付接口 207¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为207 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 代扣绑卡返回的银行卡ID |
代扣签约流水 | sign_seq_id | 变长18位String | 必须 | |
入账客户号 | in_cust_id | 变长18位String | 必须 | 入账客户号不能是客户本人 |
入账账户号 | in_acct_id | 变长9位的String | 必须 | 业务类型为支付时必传,且入账客户号不能是客户本人 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代扣支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
交易发生地 | transaction_addr | 变长128位String | 必须 | |
资金用途 | purpose | 变长128位String | 必须 | |
对手方交易IP | user_ip_addr | 变长20位的String | 必须 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为207 |
应答返回码 | resp_code | 定长6位String | 必须 | 201000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
绑定银行卡ID | bind_card_id | 变长20位String | 可选 | 快捷/代扣支付时,必传 |
代扣签约流水号 | sign_seq_id | 变长18位String | 必须 | |
入账客户号 | in_cust_id | 定长16位String | 可选 | 支付必传 |
入账账户号 | inAcctId | 变长9位String | 必须 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代扣支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
207000 | 交易成功 |
207002 | 请求已受理 |
207003 | 交易失败 |
207098 | 系统超时 |
207099 | 系统异常 |
207100 | 请求参数非法 |
207101 | 商户无此接口权限 |
207102 | 验证签名失败 |
207103 | 商户状态异常 |
207104 | 用户状态异常 |
207107 | 消息类型与签名内容不一致 |
207108 | 商户客户号与签名内容不一致 |
207109 | 版本号与签名内容不一致 |
207110 | 商户号不存在 |
207202 | 交易订单号重复 |
207204 | 商户配置异常 |
207215 | 请补录身份信息 |
207303 | 商户支付基础信息未配置 |
207305 | 入账客户信息不正确 |
207309 | 该用户代扣协议不存在或状态异常 |
207311 | 只有个人用户和个体户能代扣支付 |
207314 | 支付手续费账户状态不正常 |
207319 | 该用户支付卡未绑定或状态异常 |
207320 | 该用户代扣协议绑卡与本次支付卡信息不一致 |
207321 | 支付手续费未配置 |
207803 | 支付交易受限,限额限次或其他 |
207804 | 商户超限额或限次 |
207805 | 商户未开通该功能权限 |
207806 | 商户交易限制 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "207",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000034048",
"order_date": "20180529",
"order_id": "2016090945",
"trans_amt": "1.69",
"bind_card_id": "1000000356",
"sign_seq_id": "201805290000000407",
"in_cust_id": "6666000000002619",
"in_acct_id": "2744",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_mer",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "207";
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": "207",
"resp_code": "207000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "207",
"resp_code": "207099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
订单解冻接口 212¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为212 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
原交易平台流水id | orginal_platform_seq_id | 定长18位String | 必须 | 原支付交易流水号 |
解冻分账账户串 | div_detail | 变长String | 必须 | [{“div_cust_id”:”60010001”,”div_acct_id”:”000001”}] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为212 |
返回码 | resp_code | 变长String | 必须 | 212000–调用成功,其他见返回码 |
结果描述 | resp_desc | 变长String | 必须 | 返回描述 |
商户客户号 | mer_cust_id | 变长16位的String | 必须 | |
用户客户号 | user_cust_id | 变长16位的String | 必须 | |
订单日期 | order_date | 定长8位String | 必须 | |
订单号 | order_id | 变长20位的String | 必须 | |
平台流水id | platform_seq_id | 定长18位String | 必须 | 交易流水号 |
成功件数 | success_cnt | 变长2位的String | 必须 | |
成功金额 | success_amt | 变长14位的String | 必须 | |
失败件数 | fail_cnt | 变长2位的String | 必须 | |
失败金额 | fail_amt | 变长14位的String | 必须 | |
失败账户串 | fail_div_detail | 变长String | 必须 | [{“divCustId”:”60010001”,”divAcctId”:”000001”}] |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回码¶
返回码 | 返回描述 |
212000 | 交易成功 |
212098 | 系统超时 |
212099 | 系统异常 |
212100 | 请求参数非法 |
212101 | 商户无此接口权限 |
212102 | 验证签名失败 |
212103 | 商户状态异常 |
212104 | 用户状态异常 |
212105 | 账户状态异常 |
212107 | 消息类型与签名内容不一致 |
212108 | 商户客户号与签名内容不一致 |
212109 | 版本号与签名内容不一致 |
212110 | 商户号不存在 |
212111 | 用户客户号不存在 |
212112 | 账号不存在 |
212202 | 交易订单号重复 |
212301 | 原支付交易不存在 |
212302 | 该订单状态不可解冻 |
212303 | 分账账户串数据异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "212",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"order_date": "20170830",
"order_id": "324002007",
"orginal_platform_seq_id": "201708300000004667",
"div_detail": "[{'divCustId':'6666000000002962','divAcctId':'3133','divAmt':'0.20','divFreezeFg':'01'},{'divCustId':'6666000000002619','divAcctId':'2744','divAmt':'1.00','divFreezeFg':'01'}]",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "mer001",
"extension": "extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "212";
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": "212",
"resp_code": "212000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "212",
"resp_code": "212099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付( WEB 版)接口 206¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为206 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 可选 | (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项; 分账串定义可参照下表; 注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 分账串为空的场合必填 |
入账账户号 | in_acct_id | 变长9位String | 可选 | 分账串为空的场合必填 |
设备号 | device_info | 变长32位String | 可选 | |
IP地址 | ip_addr | 变长20位String | 可选 | |
经纬度 | location_val | 变长20位String | 可选 | |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 固定为206 |
返回码 | resp_code | 变长String | 必须 | 206000–调用成功,其他见返回码 |
结果描述 | resp_desc | 变长String | 必须 | 返回描述 |
商户客户号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 变长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
子账户号 | acct_id | 变长16位String | 必须 | 由汇付生成,用户的默认子账户号 |
订单日期 | order_date | 定长8位String | 必须 | |
订单号 | order_id | 变长20位的String | 必须 | |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
开户银行代号 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 |
银行卡号 | card_no | 变长32位String | 必须 | 返回银行卡号掩码 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 本次快捷绑卡的ID |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 |
分账账户串 | div_detail | 变长String | 可选 | |
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 否:00 是:01 |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回码¶
返回码 | 返回描述 |
206000 | 交易成功 |
206002 | 请求已受理 |
206099 | 系统异常 |
206201 | 页面数据被篡改 |
206202 | 交易订单号重复 |
206203 | 账户可用余额不足 |
206204 | 商户配置异常 |
206205 | 短信验证码验证失败 |
206206 | 短信验证码发送手机号与验证手机号不一致 |
206208 | 短信验证码已失效请重新获取 |
206211 | 短信验证码发送失败 |
206214 | 查询出现异常 |
206215 | 请补录身份信息 |
206216 | 短信验证码发送过于频繁或单日发送次数超限 |
206301 | 只有个人用户和个体户能快捷支付 |
206302 | 商户支付基础信息未配置 |
206303 | 支付手续费账户状态不正常 |
206304 | 支付手续费未配置 |
206306 | 身份证实名验证错误 |
206307 | 银行卡信息与上次绑卡信息不一致,请解绑后再提交绑卡 |
206308 | 个人用户信息校验失败 |
206309 | 开户手续费收取失败 |
206311 | 无任何银行信息 |
206314 | 验证码发送失败 |
206315 | 验证码发送成功 |
206317 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
206319 | 验证码发送中 |
206320 | 银行卡解绑失败 |
206321 | 操作超时,请重试 |
206322 | 省份地区信息非法 |
206324 | 银行卡信息验证失败 |
206325 | 银行卡号与银行、卡类型信息不匹配 |
206721 | 分账串内容不能超过五个 |
206722 | 分账串部分字段为空 |
206723 | 分账串金额格式错误 |
206724 | 分账串累计金额不等于订单金额 |
206725 | 分账信息用户状态异常 |
206726 | 分账信息账户状态异常 |
206727 | 分账信息异常 |
206728 | 分账串账户信息格式错误 |
206729 | 分账串账户异常 |
206732 | 分账串客户号信息格式错误 |
206739 | 快捷支付短信发送异常 |
206741 | 分账串内容重复 |
206742 | 快捷支付成功,分账失败 |
206743 | 请获取验证码 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "206",
"mer_cust_id": "6666000000217291",
"user_cust_id": "6666000000291215",
"order_id": "2010001407",
"order_date": "20180201",
"trans_amt": "0.02",
"bg_ret_url": "http://mertest.chinapnr.com/asharp",
"mer_priv": "test_mer_priv",
"ret_url": "",
"extension": "",
"div_detail": "[{'divCustId':'6666000000307920','divAcctId':'310545','divAmt':'0.01','divFreezeFg':'01'},{'divCustId':'6666000000348234','divAcctId':'350858','divAmt':'0.01','divFreezeFg':'00'}]"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "206";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "206",
"resp_code": "206000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "206",
"resp_code": "206099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付( APP 版)接口 208¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为208 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 可选 | (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项; 分账串定义可参照下表; 注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 分账串为空的场合必填 |
入账账户号 | in_acct_id | 变长9位String | 可选 | 分账串为空的场合必填 |
设备号 | device_info | 变长32位String | 可选 | |
IP地址 | ip_addr | 变长20位String | 可选 | |
经纬度 | location_val | 变长20位String | 可选 | |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
设备信息 | dev_info_json | 变长2000位的String | 可选 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 固定为208 |
返回码 | resp_code | 变长String | 必须 | 208000–调用成功,其他见返回码 |
结果描述 | resp_desc | 变长String | 必须 | 返回描述 |
商户客户号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 变长16位的String | 必须 | 由汇付生成,用户的唯一性标识 |
子账户号 | acct_id | 变长16位String | 必须 | 由汇付生成,用户的默认子账户号 |
订单日期 | order_date | 定长8位String | 必须 | |
订单号 | order_id | 变长20位的String | 必须 | |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
开户银行代号 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 |
银行卡号 | card_no | 变长32位String | 必须 | 返回银行卡号掩码 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 本次快捷绑卡的ID |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 可选 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户解冻结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
返回码¶
返回码 | 返回描述 |
208000 | 支付成功 |
208001 | 支付请求受理中 |
208099 | 系统异常 |
208201 | 页面数据被篡改 |
208202 | 交易订单号重复 |
208203 | 账户可用余额不足 |
208204 | 商户配置异常 |
208205 | 短信验证码验证失败 |
208206 | 短信验证码发送手机号与验证手机号不一致 |
208208 | 短信验证码已失效请重新获取 |
208211 | 短信验证码发送失败 |
208214 | 查询出现异常 |
208215 | 请补录身份信息 |
208216 | 短信验证码发送过于频繁或单日发送次数超限 |
208301 | 只有个人用户和个体户能快捷支付 |
208302 | 商户支付基础信息未配置 |
208303 | 支付手续费账户状态不正常 |
208304 | 支付手续费未配置 |
208306 | 身份证实名验证错误 |
208307 | 银行卡信息与上次绑卡信息不一致,请解绑后再提交绑卡 |
208308 | 个人用户信息校验失败 |
208309 | 开户手续费收取失败 |
208310 | 该笔交易已结束 |
208311 | 无任何银行信息 |
208314 | 验证码发送失败 |
208315 | 验证码发送成功 |
208317 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
208319 | 验证码发送中 |
208320 | 银行卡解绑失败 |
208321 | 操作超时,请重试 |
208322 | 省份地区信息非法 |
208324 | 银行卡信息验证失败 |
208325 | 银行卡号与银行、卡类型信息不匹配 |
208721 | 分账串内容不能超过五个 |
208722 | 分账串部分字段为空 |
208723 | 分账串金额格式错误 |
208724 | 分账串累计金额不等于订单金额 |
208725 | 分账信息用户状态异常 |
208726 | 分账信息账户状态异常 |
208727 | 分账信息异常 |
208728 | 分账串账户信息格式错误 |
208729 | 分账串账户异常 |
208732 | 分账串客户号信息格式错误 |
208739 | 快捷支付短信发送异常 |
208741 | 分账串内容重复 |
208742 | 快捷支付成功,分账失败 |
208743 | 请获取验证码 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "208",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026190",
"order_id": "20620000087",
"order_date": "20170828",
"trans_amt": "6.92",
"div_detail": "[{'divCustId':'6666000000026185','divAcctId':'79704','divAmt':'6.92','divFreezeFg':'00'}]",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"ret_url": "",
"mer_priv": "test",
"extension": "test"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "208";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "208",
"resp_code": "208000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "208",
"resp_code": "208099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
扫码支付接口 209¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 209 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
商品描述 | goods_desc | 变长127位String | 必须 | |
二维码支付类型 | pay_type | 定长2位String | 必须 | 04 : 微信 05 : 支付宝 |
请求类型 | request_type | 定长2位String | 必须 | 00 : PC端(汇付页面显示二维码) 01 : 移动端(汇付页面显示二维码) 02:返回商户ret_url,由商户自己根据qrcode_url生成二维码 如果需要直接返回二维码地址,请对接APP支付接口(218) |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
操作员 | oper_user_Id | 变长32位String | 可选 | |
商品类型 | goods_type | 变长32位String | 可选 | |
订单超时时间 | order_expire_time | 变长12位String | 可选 | 单位秒 |
设备号 | device_info | 变长32位String | 可选 | |
商户前台应答地址 | ret_url | 变长128位的String | 可选 | 请求类型为后端时,必须输入 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 209 |
应答返回码 | resp_code | 定长6位String | 必须 | 209000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
银行返回码 | bg_bank_code | 变长32位String | 可选 | |
银行返回描述 | bg_bank_message | 变长200位String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商品描述 | goods_desc | 变长1024位String | 必须 | |
二维码支付类型 | pay_type | 定长2位String | 必须 | 04 : 微信 05 : 支付宝 |
请求类型 | request_type | 定长2位String | 必须 | 00 : PC端(汇付页面显示二维码) 01 : 移动端(汇付页面显示二维码) 02:返回商户ret_url,由商户自己根据qrcode_url生成二维码 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
二维码链接 | qrcode_url | 变长128位String | 可选 | |
操作员 | oper_user_id | 变长32位String | 可选 | |
商品类型 | goods_type | 变长32位String | 可选 | |
订单超时时间 | order_expire_time | 固定14位String | 可选 | 格式为YYYYMMDDHHmmss |
设备号 | device_info | 变长32位String | 可选 | |
外部订单流水号 | out_trans_id | 变长64位String | 可选 | 外部订单流水号,指支付宝、微信、银联流水号 |
商户前台应答地址 | ret_url | 变长128位的String | 可选 | 请求类型为后端时,必须输入 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
209000 | 交易成功 |
209002 | 请求已受理 |
209003 | 交易失败 |
209004 | 交易关闭 |
209098 | 系统超时 |
209099 | 系统异常 |
209100 | 请求参数非法 |
209101 | 商户无此接口权限 |
209102 | 验证签名失败 |
209103 | 商户状态异常 |
209104 | 用户状态异常 |
209107 | 消息类型与签名内容不一致 |
209108 | 商户客户号与签名内容不一致 |
209109 | 版本号与签名内容不一致 |
209110 | 商户号不存在 |
209104 | 用户状态异常 |
209105 | 账户状态异常 |
209727 | 分账信息异常 |
209721 | 分账串内容不能超过五个 |
209722 | 分账串部分字段为空 |
209723 | 分账串金额格式错误 |
209728 | 分账串账户信息格式错误 |
209729 | 分账串账户异常 |
209726 | 分账信息账户状态异常 |
209725 | 分账信息用户状态异常 |
209741 | 分账串内容重复 |
209732 | 分账串客户号信息格式错误 |
209724 | 分账串累计金额不等于订单金额 |
209202 | 交易订单号重复 |
209744 | 商户不支持扫码支付 |
209204 | 商户配置异常 |
209303 | 商户支付基础信息未配置 |
209321 | 支付手续费未配置 |
209323 | 支付手续费只能向商户收取 |
209314 | 支付手续费账户状态不正常 |
209215 | 请补录身份信息 |
209804 | 商户超限额或限次 |
209805 | 商户未开通该功能权限 |
209806 | 商户交易限制 |
209341 | 订单已关闭 |
209342 | 已支付成功 |
209343 | 已支付失败 |
209344 | 订单信息不匹配 |
209345 | 未获取二维码链接 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "209",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026190",
"order_id": "209017108",
"order_date": "20170829",
"trans_amt": "0.03",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "*1erwer.868@",
"ret_url": "",
"extension": "u",
"div_detail": "[{'divCustId':'6666000000026185','divAcctId':'79704','divAmt':'0.02','divFreezeFg':'01'},{'divCustId':'6666000000026086','divAcctId':'79506','divAmt':'0.01','divFreezeFg':'00'}]",
"device_info": "测试测qq",
"goods_desc": "分账串,有冻结",
"goods_type": "试测试试qq",
"oper_user_id": "试试qq",
"order_expire_time": "9900",
"pay_type": "04",
"request_type": "01"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "209";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "209",
"resp_code": "209000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "209",
"resp_code": "209099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
页面展示¶
代发接口 213¶
功能说明¶
商户调用该接口可以进行代发交易
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为213 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为“yyyyMMdd” |
出账客户号 | pay_cust_id | 定长16位的String | 必须 | |
出账账户号 | pay_acct_id | 变长9位 | 必须 | |
订单号 | order_id | 变长20位的String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
交易金额 | trans_amt | 变长14位String | 必须 | (金额格式必须是###.00)比如2.00,2.01 |
收款账户类型 | acct_type | 定长1位String | 必须 | 银行对公账户(1),银行对私账户(2) |
银行账号 | bank_card_no | 变长30位String | 必须 | 代发到的银行账户 |
银行编号 | bank_id | 变长8位 | Y(acct_type=1)/N | 对公必填,对私选填 |
银行名称 | bank_name | 变长50位String | Y(acct_type=1)/N | 对公必填,对私选填 |
开户行省份 | bank_prov | 定长4位String | 可选 | 填写编号(商户有省份值请填入) ; 与地区值同时传或都不传 |
开户行地区 | bank_area | 定长4位String | 可选 | 填写编号(商户有地区值请填入); 与省份值同时传或都不传 |
支行名称 | bank_subbranch | 变长50位String | 可选 | |
联行号 | unite_bank_code | 变长20位String | 可选 | |
代发用途 | purpose | 变长20位String | 必须 | |
收款人姓名 | cust_name | 变长20位String | 必须 | 必须与银行户名相同 |
收款人手机号 | mobile | 变长11位String | 可选 | |
证件类型 | cert_type | 变长2位String | Y(acct_type=2)/N | 00身份证 01护照 02军官证 03士兵证 04回乡证 06警官证 08台胞证 05户口本 13其他 (收款账户为对私必传,对公为可选) |
证件号 | cert_id | 变长20位String | Y(acct_type=2)/N | (收款账户为对私必传,对公为可选) |
代发方式 | trans_mode | 变长2位String | 可选 | 代发的到账时间。 00 : T0 ; 01 : T1 (不传默认走T0), |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为213 |
应答返回码 | resp_code | 定长6位String | 必须 | 213001—处理中 , 其他见返回码 |
应答返回描述 | 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位系统流水号 |
手续费 | fee_amt | 变长14位String | 必须 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代发结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
213000 | 交易成功 |
213001 | 请求处理中 |
213003 | 交易失败 |
213098 | 系统超时 |
213099 | 系统异常 |
213100 | 请求参数非法 |
213101 | 商户无此接口权限 |
213102 | 验证签名失败 |
213103 | 商户状态异常 |
213107 | 消息类型与签名内容不一致 |
213108 | 商户客户号与签名内容不一致 |
213109 | 版本号与签名内容不一致 |
213110 | 商户号不存在 |
213112 | 出账账号不存在 |
213113 | 过渡账户不能出账 |
213303 | 银行卡信息与银行信息不匹配 |
213304 | 银行卡类型错误 |
213320 | 交易订单号重复 |
213326 | 商户客户号与出账客户号不一致 |
213331 | 代发手续费账户未配置 |
213321 | 代发手续费未配置 |
213328 | 卡号或证件号或电话号码解密失败 |
213322 | 代发失败 |
213329 | 交易收款人已列入反洗钱黑名单,交易已被禁止 |
213333 | 您尚未开通T0/T1代发功能,请联系汇付业务人员 |
213334 | 账户余额或手续费余额不足,请先进行充值 |
代码示例¶
java
String valueObj = "{
"cmd_id": "213",
"version": "10",
"mer_cust_id": "6666000000026086",
"order_date": "20171228",
"order_id": "200111127",
"pay_cust_id": "6666000000026086",
"pay_acct_id": "79506",
"trans_amt": "1.36",
"acct_type": "1",
"bank_card_no": "62533820171228",
"bank_name": "",
"bank_prov": "",
"bank_area": "",
"bank_subbranch": "",
"bank_id": "",
"purpose": "啊啊啊啊啊",
"cust_name": "飞飞飞",
"mobile": "16666666666",
"cert_type": "00",
"cert_id": "220523198005162957",
"trans_mode": "01",
"ret_url": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_mer_priv",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "213";
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": "213",
"resp_code": "213000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "213",
"resp_code": "213099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
反扫消费接口 215¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 215 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
扫码支付类型 | pay_type | 定长2位String | 可选 | 07 : 微信 08 : 支付宝 09 : 银联 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户。详见下表 分账账户串 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
商品描述 | goods_desc | 变长127位String | 必须 | |
商品类型 | goods_type | 定长4位String | 可选 | MCC,银联支付时必须 |
扫码信息 | auth_code | 变成128位String | 必须 | 扫码设备读出的条形码或者二维码信息 支付宝:28开头,18位长度 微信:10、11、12、13、14、15开头,18位长度 银联:62开头,19位长度 |
操作员 | oper_user_Id | 变长32位String | 可选 | |
扫码设备号 | device_info | 变长32位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 215 |
应答返回码 | resp_code | 定长6位String | 必须 | 215000—交易成功 215002—请求受理中 其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
银行返回码 | bg_bank_code | 变长32位String | 可选 | |
银行返回描述 | bg_bank_message | 变长200位String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
扫码支付类型 | pay_type | 定长2位String | 可选 | 07 : 微信 08 : 支付宝 09 : 银联 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户。详见下表 分账账户串 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
商品描述 | goods_desc | 变长127位String | 必须 | |
商品类型 | goods_type | 定长4位String | 可选 | MCC,银联支付时必须 |
扫码信息 | auth_code | 变成128位String | 必须 | 扫码设备读出的条形码或者二维码信息 |
操作员 | oper_user_id | 变长32位String | 可选 | |
设备号 | device_info | 变长32位String | 可选 | |
外部订单流水号 | out_trans_id | 变长64位String | 可选 | 外部订单流水号,指支付宝、微信、银联流水号 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
215000 | 交易成功 |
215002 | 请求已受理 |
215003 | 交易失败 |
215004 | 交易关闭 |
215099 | 系统异常 |
215100 | 请求参数非法 |
215101 | 商户无此接口权限 |
215102 | 验证签名失败 |
215103 | 商户状态异常 |
215104 | 用户状态异常 |
215107 | 消息类型与签名内容不一致 |
215108 | 商户客户号与签名内容不一致 |
215109 | 版本号与签名内容不一致 |
215110 | 商户号不存在 |
215104 | 用户状态异常 |
215105 | 账户状态异常 |
215111 | 用户客户号不存在 |
215104 | 用户状态异常 |
215112 | 账号不存在 |
215727 | 分账信息异常 |
215721 | 分账串内容不能超过五个 |
215722 | 分账串部分字段为空 |
215723 | 分账串金额格式错误 |
215728 | 分账串账户信息格式错误 |
215729 | 分账串账户异常 |
215726 | 分账信息账户状态异常 |
215725 | 分账信息用户状态异常 |
215741 | 分账串内容重复 |
215732 | 分账串客户号信息格式错误 |
215724 | 分账串累计金额不等于订单金额 |
215326 | 商户不支持反扫支付 |
215329 | 商品类型不能为空 |
215202 | 交易订单号重复 |
215204 | 商户配置异常 |
215303 | 商户支付基础信息未配置 |
215321 | 支付手续费未配置 |
215323 | 支付手续费只能向商户收取 |
215314 | 支付手续费账户状态不正常 |
215215 | 请补录身份信息 |
215804 | 商户超限额或限次 |
215805 | 商户未开通该功能权限 |
215806 | 商户交易限制 |
215745 | 反扫支付成功,分账失败 |
215336 | 微信扫码信息不正确 |
215337 | 支付宝扫码信息不正确 |
215338 | 银联扫码信息不正确 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "215",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"order_id": "28157171990214",
"order_date": "20170824",
"pay_type": "07",
"trans_amt": "0.02",
"div_detail": "[{'divCustId':'6666000000002962','divAcctId':'3133','divAmt':'0.01','divFreezeFg':'01'},{'divCustId':'6666000000002619','divAcctId':'2744','divAmt':'0.01','divFreezeFg':'00'}]",
"goods_desc": "t",
"auth_code": "130131142378809767",
"goods_type": "5812",
"oper_user_id": "test_oper_user_id",
"device_info": "test_device_info",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "tess"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "215";
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": "215",
"resp_code": "215000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "215",
"resp_code": "215099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
反扫撤销接口 223¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为223 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
原支付流水号 | orginal_platform_seq_id | 变长18位String | 必须 | 原交易返回的平台流水号 |
备注 | remark | 变长255位的String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为223 |
返回码 | resp_code | 定长3位String | 必须 | 223000:成功 223002: 请求已受理 223099:系统异常 |
返回内容 | 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位系统流水号 |
备注 | remark | 变长255位的String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
223000 | 交易成功 |
223002 | 请求已受理 |
223003 | 交易失败 |
223098 | 系统超时 |
223099 | 系统异常 |
223100 | 请求参数非法 |
223101 | 商户无此接口权限 |
223102 | 验证签名失败 |
223103 | 商户状态异常 |
223104 | 用户状态异常 |
223107 | 消息类型与签名内容不一致 |
223108 | 商户客户号与签名内容不一致 |
223109 | 版本号与签名内容不一致 |
223202 | 交易订单号重复 |
223204 | 商户配置异常 |
223300 | 原支付交易不存在 |
223301 | 该订单状态不可退款 |
223302 | 订单已退款 |
223306 | 调用PA批量转账接口失败 |
223308 | 非反扫交易不支持撤销 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "223",
"mer_cust_id": "6666000000217291",
"order_date": "20171212",
"order_id": "fansao012",
"orginal_platform_seq_id": "201712120001065124",
"remark": "反扫撤销",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "商户私有域测试",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "223";
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": "223",
"resp_code": "223000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "223",
"resp_code": "223099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付统合版短信发送 216¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 固定为216 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 可选 | 入账客户号和入账账户号为空的时候必填; 分账串格式定义可参照下表; 注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 分账串为空的场合必填 |
入账账户号 | in_acct_id | 变长9位String | 可选 | 分账串为空的场合必填 |
银行卡号 | card_no | 变长32位String | 必须 | 本次快捷绑卡待绑定的银行卡号 |
银行预留手机号 | card_ mobile | 变长11位String | 必须 | 本次快捷绑卡待绑定的银行卡,在银行开户时的预留手机号 |
银行卡开户省份 | card_prov | 定长4位String | 可输 | 本次快捷绑卡待绑定的银行卡开户省份 |
银行卡开户地区 | card_area | 定长4位String | 可输 | 本次快捷绑卡待绑定的银行卡开户地区 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
付款方交易终端类型 | payer_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
付款方交易终端编码 | payer_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
收款方交易终端类型 | payee_term_type | 定长2位String | 可选 | 01-电脑 02-手机 03-平板设备 04-可穿戴设备 05-数字电视 06-条码支付受理终端 99-其他 |
收款方交易终端编码 | payee_term_no | 变长32位的String | 可选 | 请参考《网络支付报文结构及要素技术规范(V1.0)》(银办发[2016] 222号) |
商品简称 | goods_short_name | 变长40位的String | 可选 | 不能包含特殊字符:<>&’”|%#\^- |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长3位String | 必须 | 固定为216 |
应答返回码 | resp_code | 定长6位String | 必须 | 216000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
216000 | 交易成功 |
216003 | 交易失败 |
216002 | 请求已受理 |
216317 | 验证码发送失败 |
216318 | 验证码发送成功 |
216098 | 系统超时 |
216099 | 系统异常 |
216100 | 请求参数非法 |
216101 | 商户无此接口权限 |
216102 | 验证签名失败 |
216103 | 商户状态异常 |
216104 | 用户状态异常 |
216107 | 消息类型与签名内容不一致 |
216108 | 商户客户号与签名内容不一致 |
216109 | 版本号与签名内容不一致 |
216202 | 交易订单号重复 |
216210 | 短信验证码发送过于频繁 |
216301 | 省份地区信息非法 |
216302 | 只有个人用户和个体户能快捷支付 |
216303 | 入账客户号、入账账户号与分账串信息必须输入一项 |
216304 | 入账客户号、入账账户号与分账串信息不可同时输入 |
216308 | 商户支付基础信息未配置 |
216309 | 支付手续费账户状态不正常 |
216310 | 支付手续费未配置 |
216323 | 支付手续费只能向商户收取 |
216727 | 分账信息异常 |
216721 | 分账串内容不能超过五个 |
216722 | 分账串部分字段为空 |
216723 | 分账串金额格式错误 |
216728 | 分账串账户信息格式错误 |
216729 | 分账串账户异常 |
216726 | 分账信息账户状态异常 |
216725 | 分账信息用户状态异常 |
216741 | 分账串内容重复 |
216732 | 分账串客户号信息格式错误 |
216724 | 分账串累计金额不等于订单金额 |
216739 | 快捷支付短信发送异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "216",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000026303",
"order_date": "20180327",
"order_id": "2160099077",
"trans_amt": "11.06",
"div_detail": "[{'divCustId':'6666000000026188','divAcctId':'79710','divAmt':'5.03','divFreezeFg':'00'},{'divCustId':'6666000000026190','divAcctId':'79714','divAmt':'6.03','divFreezeFg':'01'}]",
"in_cust_id": "",
"in_acct_id": "",
"card_no": "4213491201706095",
"card_mobile": "12222222222",
"card_prov": "0031",
"card_area": "3100",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "",
"extension": "",
"payer_term_type": "",
"payer_term_no": "",
"payee_term_type": "",
"payee_term_no": "",
"goods_short_name": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "216";
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": "216",
"resp_code": "216000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "216",
"resp_code": "216099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付统合版支付 217¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 固定为217 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 ※同快捷支付统合版一阶段的订单日期 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 ※同快捷支付统合版一阶段的订单号 |
短信验证码 | sms_code | 定长6位String | 必须 | |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
请求类型 | request_type | 定长2位String | 必须 | 00 : PC端 01 : 移动端 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长3位String | 必须 | 固定为217 |
应答返回码 | resp_code | 定长6位String | 必须 | 217000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
短信验证码 | sms_code | 定长6位String | 必须 | |
入账客户号 | in_cust_id | 定长16位String | 可选 | |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
开户银行代号 | bank_id | 变长8位String | 可选 | 具体见附件:开户银行代号 |
银行卡号 | card_no | 变长32位String | 可选 | 返回银行卡号掩码 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 本次快捷绑卡的ID |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 可选 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
217000 | 交易成功 |
217002 | 请求已受理 |
217003 | 交易失败 |
217098 | 系统超时 |
217099 | 系统异常 |
217100 | 请求参数非法 |
217101 | 商户无此接口权限 |
217102 | 验证签名失败 |
217103 | 商户状态异常 |
217104 | 用户状态异常 |
217107 | 消息类型与签名内容不一致 |
217108 | 商户客户号与签名内容不一致 |
217109 | 版本号与签名内容不一致 |
217201 | 页面数据被篡改 |
217202 | 交易订单号重复 |
217204 | 商户配置异常 |
217302 | 只有个人用户和个体户能快捷支付 |
217308 | 商户支付基础信息未配置 |
217309 | 支付手续费账户状态不正常 |
217310 | 支付手续费未配置 |
217312 | 操作超时,请重试 |
217313 | 请获取验证码 |
217315 | 银行卡号与银行、卡类型信息不匹配 |
217320 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
217323 | 支付手续费只能向商户收取 |
217743 | 请获取验证码 |
217744 | 信息更新异常 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "217",
"mer_cust_id": "6666000000217291",
"user_cust_id": "6666000000291215",
"order_date": "20170831",
"order_id": "2160099052",
"sms_code": "111111",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "",
"extension": "",
"ret_url": "",
"request_type": "00"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "217";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "217",
"resp_code": "217000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "217",
"resp_code": "217099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
APP 支付(支付宝、微信、银联各种支付) 218¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | Version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 218 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 付款人汇付客户号 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
支付类型 | pay_type | 定长2位String | 必须 | 04:微信正扫; 05:支付正扫; 10 : 微信APP支付; 12:支付宝统一下单; 13:微信公众号; 14:apple pay; 18: 银联正扫; 19: 小程序支付 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
入账客户号 | in_cust_id | 定长16位String | 可选 | (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项 |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
分账串 | div_detail | 变长String | 可选 | (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项; 分账串定义可参照下表; 注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号 |
是否原生态 | is_raw | 定长1位String | 可选 | 微信公众号支付时的参数 是否原生态 是:1 否:0 注:为空时,默认1 |
APPID | app_id | 变长32位String | 可选 | 商户在微信申请的APPID; 支付类型为微信APP支付、微信公众号支付、微信小程序支付时不能为空 |
买家用户ID | buyer_id | 变长100位String | 可选 | 支付宝统一下单时必填;微信公众号支付、微信小程序支付时: 联调环境下传空 生产环境下不能为空 |
商品描述 | goods_desc | 变长127位String | 必须 | |
商品类型 | goods_type | 定长4位String | 可选 | |
附加信可选息 | attach_info | 变长128位String | 可选 | 微信公众号支付的参数 |
商品标记 | good_tag | 变长32位String | 可选 | 微信公众号支付的参数 商品标记,优惠标志等 |
订单超时时间 | order_expire_time | 固定14位String | 可选 | 微信公众号支付的参数 格式为YYYYMMDDHHmmss |
设备号 | device_info | 变长32位String | 可选 | |
IP地址 | ip_addr | 变长20位String | 可选 | |
经纬度 | location_val | 变长30位String | 可选 | 参数格式:116.538799,39.983523 |
支付返回地址 | ret_url | 变长128位的String | 可选 | 微信公众号支付时,必须输入 用于微信支付成功后跳转的页面; 支付宝统一下单时,必须输入 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
设备信息 | dev_info_json | 变长2000位的String | 可选 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
应答返回码 | resp_code | 定长6位String | 必须 | 218002–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
银行返回码 | bg_bank_code | 变长32位String | 可选 | |
银行返回描述 | bg_bank_message | 变长200位String | 可选 | |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
支付地址 | pay_url | 变长64位String | 可选 | 支付宝统一下单返回参数 支付宝浏览器下直接用此链接请求支付宝支付(注:目前部分通道不支持返回支付地址) 微信公众号也有可能返回支付地址,在未返回支付信息时,使用支付地址。 |
动态口令 | token_id | 变长64位String | 可选 | 微信公众号参数 根据token_id组装如下url地址,在微信下可直接唤起支付 https://pay.swiftpass.cn/pay/jspay?token_id=9a0610bc519e782e6275e8c7dd94a445&showwxtitle=1 |
支付信息 | pay_info | 变长String | 可选 | 微信公众号支付时,数据格式如下: {“appId”:”wx1f87d44db95cba7a”,”timeStamp”:”1514459875237”,”status”:”0”,”signType”:”MD5”,”package”:”prepay_id=wx20171228191755dff683fea20032942684”,”callback_url”:”https://www.baidu.com”,”nonceStr”:”1514459875237”,”paySign”:”5DEE76A6C0CB7BE924BDB11945D591CA”} 微信APP支付时,数据格式如下: {“sign”:”F21465FEAE87F4C02E639D846B2CFCC2”,”timestamp”:”1504863344”,”noncestr”:”1504863344725”,”partnerid”:”12723495”,”prepayid”:”wx20170908173544b0662982990254372413”,”package”:”Sign=WXPay”,”appid”:”324125”} 是微信sdk唤起APP支付的参数 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 218 |
应答返回码 | resp_code | 定长6位String | 必须 | 218000—交易成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
银行返回码 | bg_bank_code | 变长32位String | 可选 | |
银行返回描述 | bg_bank_message | 变长200位String | 可选 | |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
支付地址 | pay_url | 变长64位String | 可选 | |
动态口令 | token_id | 变长64位String | 可选 | |
支付信息 | pay_info | 变长String | 可选 | |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
支付类型 | pay_type | 定长2位String | 必须 | 04:微信正扫 05:支付宝正扫 10: 微信APP支付 12:支付宝统一下单 13:微信公众号 14:apple pay |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
入账客户号 | in_cust_id | 定长16位String | 可选 | (入账客户号、入账账户号) 和 分账账户串必填一项 |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
分账账户串 | div_detail | 变长String | 可选 | (入账客户号、入账账户号) 和 分账账户串必填一项; |
是否原生态 | is_raw | 定长1位String | 可选 | 微信公众号支付时的参数 是否原生态 是:1 否:0 注:为空时,默认1 |
APPID | app_id | 变长32位String | 可选 | 商户在微信的APPID |
买家用户ID | buyer_id | 变长100位String | 可选 | |
商品描述 | goods_desc | 变长127位String | 必须 | |
商品类型 | goods_type | 定长4位String | 可选 | |
附加信可选息 | attach_info | 变长128位String | 可选 | 微信公众号支付的参数 |
商品标记 | good_tag | 变长32位String | 可选 | 微信公众号支付的参数 商品标记,优惠标志等 |
订单超时时间 | order_expire_time | 变长12位String | 可选 | 微信公众号支付的参数 单位秒 |
设备号 | device_info | 变长32位String | 可选 | |
IP地址 | ip_addr | 变长20位String | 可选 | |
经纬度 | location_val | 变长30位String | 可选 | |
外部订单流水号 | out_trans_id | 变长64位String | 可选 | 外部订单流水号,指支付宝、微信、银联流水号 |
支付返回地址 | ret_url | 变长128位的String | 可选 | 微信公众号支付时,必须输入 用于微信支付成功后跳转的页面 支付宝统一下单时,必须输入 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
微信 APP 支付商户端开发示例¶
ios调起支付主要方法:
java
//注册APPID:
//商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
[WXApi registerApp:\\@"wxd930ea5d5a258f4f"
withDescription:\\@"demo 2.0"];
//唤起微信APP:
PayReq \*request = [[[PayReq alloc] init] autorelease];
request.partnerId = \\@"10000100";
request.prepayId= \\@"1101000000140415649af9fc314aa427";
request.package = \\@"Sign=WXPay";
request.nonceStr= \\@"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= \\@"1397527777";
request.sign= \\@"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];
Android调起支付主要方法:
java
//注册APPID:
//商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信
msgApi.registerApp("wxd930ea5d5a258f4f");
//唤起微信APP:
IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);
注:以上参数值来源于同步返回参数pay_info中
微信公众号开发示例¶
公众号原生态js支付接口(推荐使用)
- 使用示例
需要注意: 所有传入参数都是字符串类型! 使用 JavaScript、 PHP等弱类型语言需要关注一下。示例代码如下:
java
WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId" : "wx2421b1c4370ec43b", //公众号名称, 由商户传入
"timeStamp":" 1395712654", //时间戳, 自 1970 年以来的秒数
"nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串
"package" : "prepay\_id=u802345jgfjsdfgsdg888",
"signType" : "MD5", //微信签名方式:
"paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
},function(res){
if(res.err\_msg == "get\_brand\_wcpay\_request:ok" ) {}
// 使用以上方式判断前端返回,微信团队郑重提示: res.err\_msg将在用户支付成功后返回 ok, 但并不保证它绝对可靠。
});
如有疑惑请参照 微信官网公众号支付
交互模式
请求: 后台请求交互模式 返回结果+通知: 后台请求交互模式+后台通知交互模式
请求参数
字段名 | 变量名 | 必填 | 类型 | 说明 |
---|---|---|---|---|
公众号 id | appId | 是 | String | 对应接口3.3中返回的payInfo信息 |
时间戳 | timeStamp | 是 | String | 对应接口3.3中返回的payInfo信息 |
随机字符串 | nonceStr | 是 | String | |
订单详情扩展字符串 | Package | 是 | String | 对应接口3.3中返回的payInfo信息 |
签名方式 | signType | 是 | String | 对应接口3.3中返回的payInfo信息 |
签名 | paySign | 是 | String | 对应接口3.3中返回的payInfo信息 |
- 返回结果:
返回值 | 说明 |
---|---|
err_msg | get_brand_wcpay_request:ok 支付成功 |
get_brand_wcpay_request:cancel 支付过程中用户取消 | |
get_brand_wcpay_request:fail 支付失败 |
注:JS API 的返回结果 get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel 或者get_brand_wcpay_request:fail 可以统一处理为用户遇到错误或者主动放弃, 不必细化区分。
获取当前微信版本号
由于微信 5.0 版本后才加入微信支付模块,低版本用户调用微信支付功能将无效。 因此,建议商户通过 user agent 来确定用户当前的版本号后再调用支付接口。 以 iPhone 版本为例,可以通过 user agent 可获取如下微信版本示例信息:
"Mozilla/5.0(iphone;CPU iphone OS 5\_1\_1 like Mac OS X)
AppleWebKit/534.46(KHTML,likeGeocko) Mobile/9B206 MicroMessenger/5.0"
公众号非原生支付
接口功能
初始化 JSAPI 请求, 通过生成 token_id 来进行交互验证。 如调用时是用的原生态 js 支付, 此接口可以忽略
交互模式
请求: 后台请求交互模式
返回结果+通知: 后台请求交互模式+后台通知交互模式
显示微信安全支付标题
对于商户具有支付权限且需要调用微信支付的页面,为了让用户增加购买信心,确认交易环境安全, 微信强烈建议商户使用“微信安全支付” 标题。安全支付标题的如下图。

显示支付安全标题, 需将原始链接添加上”showwxpaytitle=1”的尾串。
通过这种方式,商户的页面将出现微信安全支付的标识。 例如,原始 URL 为:htp://weixin.qq.com 显示安全支付标题的 URL 为:htp://weixin.qq.com?showwxpaytitle=1。
当用户在微信里打开 http://weixin.qq.com 不会直接出现微信安全支付的标题,而打开htp://weixin.qq.com?showwxpaytitle=1 后将出现微信安全支付标题。
请求参数
请求 url: https://pay.swiftpass.cn/pay/jspay
请求参数为 http queryString, 即: https://pay.swiftpass.cn/pay/jspay?token_id=xxx
如 https://pay.swiftpass.cn/pay/jspay?token_id=9a0610bc519e782e6275e8c7dd94a445&showwxtitle=1
在服务号中点击这个链接就可调起支付(用户点击页面中的微信支付按钮时实际上就是点击的这个链接,此种方式无需配置支付授权目录,也不用像原生态 jsapi 支付那样获取那些参数后续的操作, 测试时可以将组装好的这个链接放到手机微信端文件传输助手点击调起支付界面)
序号 | 字段 | 说明 | 必填 | 备注 |
---|---|---|---|---|
业务参数 | ||||
1 | token_id | VARCHAR(64) | 是 | 动态口令 |
2 | showwxpaytitle | CHAR(1) | 是 | 取值 1 或 0, 请填写: 1, 用于页面显示微信 安全支付 |
返回码¶
返回码 | 返回描述 |
218000 | 交易成功 |
218002 | 请求已受理 |
218003 | 交易失败 |
218004 | 交易关闭 |
218098 | 系统超时 |
218099 | 系统异常 |
218100 | 请求参数非法 |
218101 | 商户无此接口权限 |
218102 | 验证签名失败 |
218103 | 商户状态异常 |
218104 | 用户状态异常 |
218107 | 消息类型与签名内容不一致 |
218108 | 商户客户号与签名内容不一致 |
218109 | 版本号与签名内容不一致 |
218110 | 商户号不存在 |
218104 | 用户状态异常 |
218331 | 微信APP和支付宝APP支付时,APPID不能为空 |
218332 | 支付宝统一下单时,买家用户ID不能为空 |
218232 | 出账用户状态异常 |
218228 | (入账客户号、入账账户号)与分账串信息必须输入一项 |
218230 | 入账客户号和入账账户号必须同时输入 |
218231 | 入账用户状态异常 |
218229 | (入账客户号、入账账户号)与分账串信息不可同时输入 |
218112 | 账号不存在 |
218114 | 入账账户类型错误 |
218727 | 分账信息异常 |
218721 | 分账串内容不能超过五个 |
218722 | 分账串部分字段为空 |
218723 | 分账串金额格式错误 |
218728 | 分账串账户信息格式错误 |
218729 | 分账串账户异常 |
218726 | 分账信息账户状态异常 |
218725 | 分账信息用户状态异常 |
218741 | 分账串内容重复 |
218732 | 分账串客户号信息格式错误 |
218724 | 分账串累计金额不等于订单金额 |
218330 | 商户没有入驻 |
218202 | 交易订单号重复 |
218204 | 商户配置异常 |
218303 | 商户支付基础信息未配置 |
218321 | 支付手续费未配置 |
218323 | 支付手续费只能向商户收取 |
218314 | 支付手续费账户状态不正常 |
218215 | 请补录身份信息 |
218804 | 商户超限额或限次 |
218805 | 商户未开通该功能权限 |
218806 | 商户交易限制 |
218746 | 支付成功,分账失败 |
218341 | 订单已关闭 |
218342 | 已支付成功 |
218343 | 已支付失败 |
218344 | 订单信息不匹配 |
218345 | 未获取二维码链接 |
218346 | 未获取支付信息 |
代码示例¶
java
String valueObj = "{"version":"10","cmd_id":"218","mer_cust_id":"6666000000217291",
"user_cust_id":"","order_date":"20170921","order_id":"210014670","pay_type":"13",
"trans_amt":"0.02","div_detail":"[
{'divCustId':'6666000000307920','divAcctId':'310545','divAmt':'0.01','divFreezeFg':'00'},
{'divCustId':'6666000000217291','divAcctId':'219871','divAmt':'0.01','divFreezeFg':'00'}]",
"in_cust_id":"","in_acct_id":"","app_id":"000","is_raw":"1","buyer_logon_id":"quxiangzhen@21cn.com",
"buyer_id":"000","goods_desc":"商品描述","goods_type":"5812","attch_info":"attch_info",
"good_tag":"good_tag","device_info":"device_info","ip_addr":"ip_addr","location_val":"location_val",
"order_expire_time":"","ret_url":"https://www.baidu.com/index.php?tn=monline_3_dg",
"bg_ret_url":"http://192.168.0.74:8001/npayCallBack/asyncHandle.json","mer_priv":"","extension":""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "218";
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": "218",
"resp_code": "218000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "218",
"resp_code": "218099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
直接代扣支付接口 221¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为221 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户姓名 | user_name | 变长50位String | 必须 | 用户的真实姓名 |
身份证号 | cert_id | 变长18位String | 必须 | 用户的身份证号 |
手机号 | user_mobile | 定长11位String | 非必须 | 用户的手机号 |
银行卡号 | card_no | 变长32位String | 必须 | 8位以下报错 |
入款账户号 | acct_id | 变长9位String | 必须 | 商户的基本户 |
代扣交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
代扣业务类型 | trans_type | 定长2位String | 必须 | 01:消费分期(花呗) 02:现金贷(借呗) 03:普通基金申购 04:货币基金申购(余额宝) 05:基金定投 06:其他 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代扣支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
交易发生地 | transaction_addr | 变长128位String | 必须 | |
资金用途 | purpose | 变长128位String | 必须 | |
对手方交易IP | user_ip_addr | 变长20位的String | 必须 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为221 |
应答返回码 | resp_code | 定长6位String | 必须 | 221000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代扣支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为221 |
应答返回码 | resp_code | 定长6位String | 必须 | 221000–调用成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
入账日期 | acct_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户姓名 | user_name | 变长50位String | 必须 | 用户的真实姓名 |
身份证号 | cert_id | 变长18位String | 必须 | 用户的身份证号 |
手机号 | user_mobile | 定长11位String | 必须 | 用户的手机号 |
银行卡号 | card_no | 变长32位String | 必须 | 8位以下报错 |
账户号 | acct_id | 变长9位String | 必须 | 商户的基本户 |
代扣交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
代扣业务类型 | trans_type | 定长4位String | 必须 | 花呗(01)、借呗(02)、网商银行(03)、基金购买(04); 一个批次只能是一种类型; |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户代扣支付结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "221",
"mer_cust_id": "6666000000217291",
"order_id": "13399494",
"order_date": "20180510",
"user_name": "张三",
"cert_id": "362202198010190068",
"user_mobile": "13761708192",
"card_no": "6230580000038076969",
"acct_id": "219871",
"trans_amt": "0.01",
"trans_type": "01",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "mer_priv",
"extension": "extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "221";
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": "221",
"resp_code": "221000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "221",
"resp_code": "221099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
H5 收银台 219¶
请求参数¶
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 219、208、218 如果用户在收银台页面选择了快捷支付,则返回的cmdId是208; 如果用户选择了微信支付,则返回的cmdId是218 |
应答返回码 | resp_code | 定长6位String | 必须 | 208002、218002–处理中,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 商户的唯一标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 付款人汇付客户号; 快捷支付时,如果用户未在汇付开过户的话,会自动开户,并返回当前付款人在汇付的客户号 |
动态口令 | token_id | 变长64位String | 可选 | 动态口令, 用于后续接口调用中使用(微信支付时的返回参数) |
支付信息 | pay_info | 变长String | 可选 | json格式字符串,作用于原生态 js 支付时的参数; (微信支付时的返回参数) |
开户银行代号 | bank_id | 变长8位String | 必须 | 付款人快捷支付时的银行卡所属银行代号(快捷支付时的返回参数) |
银行卡号 | card_no | 变长32位String | 必须 | 付款人快捷支付时的银行卡掩码 (快捷支付时的返回参数) |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 付款人快捷支付时的快捷绑卡的ID (快捷支付时的返回参数) |
借贷标记 | dc_flag | 定长1位String | (快捷支付时的返回参数) |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 208、218 如果用户在收银台页面选择了快捷支付,则返回的cmdId是208; 如果用户选择了微信支付,则返回的cmdId是218 |
应答返回码 | resp_code | 定长6位String | 必须 | 208000、218000—交易成功,其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+10位系统流水号 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内的字母或数字组合 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
开户银行代号 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 (快捷支付时的返回参数) |
银行卡号 | card_no | 变长32位String | 必须 | 返回银行卡号掩码 (快捷支付时的返回参数) |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 本次快捷绑卡的ID (快捷支付时的返回参数) |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 (快捷支付时的返回参数) |
是否原生态 | is_raw | 定长1位String | 可选 | (微信支付时的返回参数) |
动态口令 | token_id | 变长64位String | 可选 | (微信支付时的返回参数) |
支付信息 | pay_info | 变长String | 可选 | (微信支付时的返回参数) |
买家用户ID | buyer_id | 变长100位String | 可选 | (微信支付时的返回参数) |
商品描述 | goods_desc | 变长127位String | 必须 | (微信支付时的返回参数) |
商品类型 | goods_type | 定长4位String | 可选 | (微信支付时的返回参数) |
附加信可选息 | attach_info | 变长128位String | 可选 | (微信支付时的返回参数) |
订单超时时间 | order_expire_time | 变长12位String | 可选 | 单位秒 |
入账客户号 | in_cust_id | 定长16位String | 可选 | |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
分账账户串 | div_detail | 变长String | 可选 | |
支付返回地址 | ret_url | 变长128位的String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意:1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | Extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
208000 | 支付成功 |
208001 | 支付请求受理中 |
208099 | 系统异常 |
218000 | 交易成功 |
218002 | 请求已受理 |
218003 | 交易失败 |
218099 | 系统异常 |
219003 | 交易失败 |
219099 | 系统异常 |
219100 | 请求参数非法 |
219101 | 商户无此接口权限 |
219102 | 验证签名失败 |
219110 | 商户号不存在 |
219103 | 商户状态异常 |
219201 | 页面数据被篡改 |
219202 | 交易订单号重复 |
219232 | 出账用户状态异常 |
219228 | (入账客户号、入账账户号)与分账串信息必须输入一项 |
219230 | 入账客户号和入账账户号必须同时输入 |
219231 | 入账用户状态异常 |
219229 | (入账客户号、入账账户号)与分账串信息不可同时输入 |
219112 | 账号不存在 |
219114 | 入账账户类型错误 |
219727 | 分账信息异常 |
219721 | 分账串内容不能超过五个 |
219722 | 分账串部分字段为空 |
219723 | 分账串金额格式错误 |
219728 | 分账串账户信息格式错误 |
219729 | 分账串账户异常 |
219726 | 分账信息账户状态异常 |
219725 | 分账信息用户状态异常 |
219741 | 分账串内容重复 |
219732 | 分账串客户号信息格式错误 |
219724 | 分账串累计金额不等于订单金额 |
219321 | 操作超时,请重试 |
219747 | 商户收银台未配置 |
219335 | 信息被篡改 |
218332 | 买家用户ID不能为空 |
218334 | 支付返回地址不能为空 |
218232 | 出账用户状态异常 |
218228 | (入账客户号、入账账户号)与分账串信息必须输入一项 |
218230 | 入账客户号和入账账户号必须同时输入 |
218231 | 入账用户状态异常 |
218229 | (入账客户号、入账账户号)与分账串信息不可同时输入 |
218112 | 账号不存在 |
218114 | 入账账户类型错误 |
218727 | 分账信息异常 |
218721 | 分账串内容不能超过五个 |
218722 | 分账串部分字段为空 |
218723 | 分账串金额格式错误 |
218728 | 分账串账户信息格式错误 |
218729 | 分账串账户异常 |
218726 | 分账信息账户状态异常 |
218725 | 分账信息用户状态异常 |
218741 | 分账串内容重复 |
218732 | 分账串客户号信息格式错误 |
218724 | 分账串累计金额不等于订单金额 |
218330 | 商户没有入驻 |
218303 | 商户支付基础信息未配置 |
218321 | 支付手续费未配置 |
218323 | 支付手续费只能向商户收取 |
218314 | 支付手续费账户状态不正常 |
218110 | 商户号不存在 |
218201 | 页面数据被篡改 |
218321 | 操作超时,请重试 |
218746 | 支付成功,分账失败 |
208201 | 页面数据被篡改 |
208202 | 交易订单号重复 |
208203 | 账户可用余额不足 |
208204 | 商户配置异常 |
208205 | 短信验证码验证失败 |
208206 | 短信验证码发送手机号与验证手机号不一致 |
208208 | 短信验证码已失效请重新获取 |
208211 | 短信验证码发送失败 |
208214 | 查询出现异常 |
208215 | 请补录身份信息 |
208216 | 短信验证码发送过于频繁或单日发送次数超限 |
208301 | 只有个人用户和个体户能快捷支付 |
208302 | 商户支付基础信息未配置 |
208303 | 支付手续费账户状态不正常 |
208304 | 支付手续费未配置 |
208306 | 身份证实名验证错误 |
208307 | 银行卡信息与上次绑卡信息不一致,请解绑后再提交绑卡 |
208308 | 个人用户信息校验失败 |
208309 | 开户手续费收取失败 |
208310 | 该笔交易已结束 |
208311 | 无任何银行信息 |
208314 | 验证码发送失败 |
208315 | 验证码发送成功 |
208317 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
208319 | 验证码发送中 |
208320 | 银行卡解绑失败 |
208321 | 操作超时,请重试 |
208322 | 省份地区信息非法 |
208324 | 银行卡信息验证失败 |
208325 | 银行卡号与银行、卡类型信息不匹配 |
208721 | 分账串内容不能超过五个 |
208722 | 分账串部分字段为空 |
208723 | 分账串金额格式错误 |
208724 | 分账串累计金额不等于订单金额 |
208725 | 分账信息用户状态异常 |
208726 | 分账信息账户状态异常 |
208727 | 分账信息异常 |
208728 | 分账串账户信息格式错误 |
208729 | 分账串账户异常 |
208732 | 分账串客户号信息格式错误 |
208739 | 快捷支付短信发送异常 |
208741 | 分账串内容重复 |
208742 | 快捷支付成功,分账失败 |
208743 | 请获取验证码 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "219",
"mer_cust_id": "6666000000002619",
"user_cust_id": "6666000000005942",
"order_id": "201710268889",
"order_date": "20171027",
"trans_amt": "0.02",
"in_cust_id": "",
"in_acct_id": "",
"div_detail": "[{'divCustId':'6666000000002619','divAcctId':'2744','divAmt':'0.01','divFreezeFg':'00'},{'divCustId':'6666000000007485','divAcctId':'7791','divAmt':'0.01','divFreezeFg':'00'}]",
"goods_desc": "商品描述",
"goods_type": "5812",
"order_expire_time": "000",
"ret_url": "https://www.baidu.com/",
"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 = "219";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "219",
"resp_code": "219000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "219",
"resp_code": "219099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
页面展示¶

H5 支付 226¶
请求参数¶
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 226 |
应答返回码 | resp_code | 定长6位String | 必须 | 226000—交易成功 226002—请求受理中 其他见返回码 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
扫码支付类型 | pay_type | 定长2位String | 必须 | 16 : 微信H5 17 : 支付宝H5 |
交易金额 | trans_amt | 变长14位String | 必须 | 金额格式是###.00 |
分账账户串 | div_detail | 变长String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户。详见下表 分账账户串 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}] |
商品描述 | goods_desc | 变长127位String | 必须 | |
商品类型 | goods_type | 定长4位String | 可选 | MCC,银联支付时必须 |
支付地址 | pay_url | 变长64位String | 可选 | 用于拉起微信收银台的URL |
操作员 | oper_user_id | 变长32位String | 可选 | |
设备号 | device_info | 变长32位String | 可选 | |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
通道返回码 | bg_channel_code | 变长32位String | 可选 | |
通道返回描述 | bg_channel_msg | 变长200位String | 可选 | |
银行返回码 | bg_bank_code | 变长32位String | 可选 | |
银行返回描述 | bg_bank_message | 变长200位String | 可选 |
返回码¶
H5 支付接口(cmd_id=226) | |
226000 | 交易成功 |
226002 | 请求已受理 |
226003 | 交易失败 |
226099 | 系统异常 |
226100 | 请求参数非法 |
226101 | 商户无此接口权限 |
226102 | 验证签名失败 |
226103 | 商户状态异常 |
226104 | 用户状态异常 |
226107 | 消息类型与签名内容不一致 |
226108 | 商户客户号与签名内容不一致 |
226109 | 版本号与签名内容不一致 |
226110 | 商户号不存在 |
226721 | 分账串内容不能超过五个 |
226727 | 分账信息异常 |
226204 | 商户配置异常 |
226748 | 二级商户号不存在 |
226749 | 二级商户号状态异常 |
226202 | 交易订单号重复 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "226",
"mer_cust_id": "6666000000037133",
"user_cust_id": "",
"order_id": "2018041300095",
"order_date": "20180419",
"pay_type": "16",
"trans_amt": "0.01",
"div_detail": "[{'divCustId':'6666000000037137','divAcctId':'92127','divAmt':'0.01','divFreezeFg':'00'}]",
"goods_desc": "1",
"good_tag": "",
"app_name": "111",
"appinfo_id": "idids00000",
"goods_type": "1222",
"oper_user_id": "test_oper_user_id",
"device_info": "1",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "tess",
"secondary_mer_id": "NP09050001"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "226";
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": "226",
"resp_code": "226000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "226",
"resp_code": "226099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
充值代扣接口 849¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为849 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
充值类型 | recharge_type | 定长8位String | 必须 | 02020003: 代扣充值 |
交易类型 | trans_type | 定长8位String | 必须 | 02020101:支付 02020103:非消费金融代扣支付 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
分账账户串 | div_detail | 变长String | 可选 | 业务类型为支付时必传,分账串使用UTF-8字符集URLEncode编码后传入 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}]分账串金额之和需等于充值金额 支持1条分账指令 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。 注意: 1) URL应使用UTF-8字符集URLEncode编码后传入 2)URL中请不要包含特殊字符 3) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。 注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”: “111111111111”} 二级商户号由汇付生成,详见4.2.13.二级商户号录入接口 |
交易场景 | trans_scene | 定长3位 | 可选 | 不需要 |
交易场景小类 | trans_scene_sub | 定长6位 | 可选 | 不需要 |
二级商户号 | secondary_merid | 变长12位 String | 可选 | |
代扣签约流水 | sign_seq_id | 变长18位String | 必须 | 代扣签约订单唯一标识,代扣充值必传,其他充值不需传 |
银行卡号 | card_no | 变长32位String | 可选 | 代扣支付使用的卡号,不传时默认使用最新绑定的代扣卡 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为849 |
应答返回码 | resp_code | 定长6位String | 必须 | 849000–调用成功,其他见:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识,交易类型为免注册网银支付时,非必传 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+10位系统流水号 |
交易类型 | trans_type | 定长8位String | 可选 | 02020101:支付 02020103:非消费金融代扣支付 |
充值类型 | recharge_type | 定长8位String | 可选 | 02020000: 个人网银,02020001: 企业网银 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
代扣签约流水 | sign_seq_id | 变长18位String | 可选 | 代扣签约订单唯一标识,代扣充值必传,其他充值不需传 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
分账账户串 | div_detail | 变长String | 可选 | 业务类型为支付时必传,分账账户必须是入账客户的账户,数据格式:[{“div_acct_id”:”000001”,”div_amt”:”1.00”}],分账串金额之和需等于充值金额,支持1条分账指令 |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 返参中的URL为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文。 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 |
银行卡号 | card_no | 变长32位String | 可选 | 代扣支付使用的卡号,不传时默认使用最新绑定的代扣卡 |
业务请求流水 | biz_trans_id | 变长20位String | 可选 | 标志一个二段式快捷请求,商户下判断唯一,只能是数字和字母充值类型为二段式快捷时必填 |
返回码¶
返回码 | 返回描述 |
849000 | 交易成功 |
849002 | 请求已受理 |
849003 | 交易失败 |
849099 | 系统异常 |
849100 | 请求参数非法 |
849101 | 商户无此接口权限 |
849102 | 验证签名失败 |
849103 | 商户状态异常 |
849104 | 用户状态异常 |
849107 | 消息类型与签名内容不一致 |
849108 | 商户客户号与签名内容不一致 |
849109 | 版本号与签名内容不一致 |
849110 | 商户号不存在 |
849111 | 用户客户号不存在 |
849202 | 交易订单号重复 |
849204 | 商户配置异常 |
849215 | 请补录身份信息 |
849228 | (入账客户号、入账账户号)与分账串信息必须输入一项 |
849230 | 入账客户号和入账账户号必须同时输入 |
849231 | 入账用户状态异常 |
849302 | 不支持此支付类型 |
849303 | 商户支付基础信息未配置 |
849305 | 入账客户信息不正确 |
849306 | 入账分账串信息不正确 |
849308 | 该用户未绑定代扣卡 |
849309 | 该用户代扣协议不存在或状态异常 |
849311 | 企业用户或商户不支持代扣充值 |
849313 | 该充值银行与用户快捷或代扣卡不匹配 |
849314 | 支付手续费账户状态不正常 |
849318 | 代扣卡不存在或状态异常 |
849321 | 支付手续费未配置 |
849329 | 理财账户不允许进行支付,分账和作为手续费! |
849727 | 分账信息异常 |
849733 | 分账支付明细处理失败 |
849737 | 支付明细处理失败 |
849748 | 二级商户号不存在 |
849749 | 二级商户号状态异常 |
849315 | 手续费金额不得大于等于交易金额 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "849",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000030895",
"order_date": "20180816",
"order_id": "2018081615344454",
"open_id": "3",
"app_id": "01050000",
"good_tag": "D",
"raw_flag": "6232511231322345",
"trans_amt": "93",
"in_cust_id": "",
"divCustId": "",
"divFreezeFg": "",
"divAcctId": "",
"in_acct_id": "",
"divAmt": "",
"biz_trans_id": "",
"goods_desc": "",
"call_back_url": "",
"order_expire_time": "",
"goods_type": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"sign_seq_id": "",
"secondary_mer_id": "",
"mer_priv": "test_merpriv",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "849";
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": "849",
"resp_code": "849000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "849",
"resp_code": "849099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
网银充值接口 847¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为847 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 交易类型为免注册网银支付时,非必传 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
充值类型 | recharge_type | 定长8位String | 必须 | 02020000: 个人网银 ; 02020001: 企业网银 |
交易类型 | trans_type | 定长8位String | 必须 | 02020100:充值 ;02020102:免注册网银支付 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
开户银行代号 | bank_id | 变长8位String | 必传 | |
借贷标记 | dc_flag | 定长1位String | 必传 | D–借记 C–贷记 |
商户前台应答地址 | ret_url | 变长128位String | 必须 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 注意: 1) URL应使用UTF-8字符集URLEncode编码后传入; 2)URL中请不要包含特殊字符 3) 必须是外网地址 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。 注意: 1) URL应使用UTF-8字符集URLEncode编码后传入 2)URL中请不要包含特殊字符 3) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。 注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”: “111111111111”} 二级商户号由汇付生成,详见4.2.13.二级商户号录入接口 |
交易场景 | trans_scene | 定长3位 | 可选 | 交易类型为免注册网银支付时,必传 001:投资理财 002:实物买卖/租赁 003:虚拟物品购买/购买服务 004:缴费 005:还款 006:账户充值 |
交易场景小类 | trans_scene_sub | 定长6位 | 可选 | 交易类型为免注册网银支付时,必传 001001:定期 001002:活期 002001:数码及家用电器 002002:家具建材 002003:生活用品(含:服饰、美容、箱包、玩具、图书/音像、食品等) 002004:珠宝/古玩/贵金属/邮币卡 002005:医药 003001:游戏点卡 003002:电话费 003003:储值卡 003004:服务(含:旅游、美容、按摩、入场消费的美食团购等) 004001:公共事业 004002:手机话费 004003:教育 004004:房屋租赁/物业费 005001:到期还款 005002:提前还款 005003:预期还款 005004:活期赎回 006001:其他 |
二级商户号 | secondary_merid | 变长12位 String | 可选 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为(网银支付851,、网银充值847) |
应答返回码 | resp_code | 定长6位String | 必须 | 847000–调用成功,其他见:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 交易类型为免注册网银支付时,非必传 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+10位系统流水号 |
业务类型 | trans_type | 定长8位String | 可选 | |
充值类型 | recharge_type | 定长8位String | 可选 | 02020000: 个人网银 02020001: 企业网银 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
开户银行代号 | bank_id | 变长8位String | 可选 | 个人/企业网银充值必传 快捷/代扣充值非必传,可为空 |
借贷标记 | dc_flag | 定长1位String | 可选 | 个人/企业网银充值必传 快捷/代扣充值非必传,可为空 D–借记 C–贷记 |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
商户前台应答地址 | ret_url | 变长128位String | 可选 | 返参中的URL为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文。 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 返参中的URL为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文。 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。 注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 |
返回码¶
返回码 | 返回描述 |
847000 | 交易成功 |
847002 | 请求已受理 |
847003 | 交易失败 |
847099 | 系统异常 |
847100 | 请求参数非法 |
847101 | 商户无此接口权限 |
847102 | 验证签名失败 |
847103 | 商户状态异常 |
847104 | 用户状态异常 |
847107 | 消息类型与签名内容不一致 |
847108 | 商户客户号与签名内容不一致 |
847109 | 版本号与签名内容不一致 |
847110 | 商户号不存在 |
847202 | 交易订单号重复 |
847204 | 商户配置异常 |
847301 | 该充值银行网关不存在 |
847303 | 商户支付基础信息未配置 |
847305 | 入账客户信息不正确 |
847306 | 入账分账串信息不正确 |
847314 | 支付手续费账户状态不正常 |
847321 | 支付手续费未配置 |
847322 | 充值失败 |
847329 | 理财账户不允许进行支付,分账和作为手续费! |
847733 | 分账支付明细处理失败 |
847737 | 支付明细处理失败 |
847748 | 二级商户号不存在 |
847749 | 二级商户号状态异常 |
847315 | 手续费金额不得大于等于交易金额 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "847",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000030895",
"order_date": "20180816",
"order_id": "2018081615344454",
"open_id": "3",
"app_id": "01050000",
"good_tag": "D",
"raw_flag": "6232511231322345",
"trans_amt": "93",
"in_cust_id": "",
"divCustId": "",
"divFreezeFg": "",
"divAcctId": "",
"in_acct_id": "",
"divAmt": "",
"biz_trans_id": "",
"goods_desc": "",
"ret_url": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_merpriv",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "847";
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": "847",
"resp_code": "847000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "847",
"resp_code": "847099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
快捷支付后台版 850¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为850 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
充值类型 | recharge_type | 定长8位String | 必须 | 02020006: 二阶段快捷 |
交易类型 | trans_type | 定长8位String | 必须 | 02020101:支付 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
入账账户号 | in_acct_id | 变长9位String | 可选 | |
分账账户串 | div_detail | 变长String | 可选 | 业务类型为支付时必传,分账串使用UTF-8字符集URLEncode编码后传入 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}]分账串金额之和需等于充值金额 支持1条分账指令 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。 注意: 1) URL应使用UTF-8字符集URLEncode编码后传入 2)URL中请不要包含特殊字符 3) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。 注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”: “111111111111”} 二级商户号由汇付生成,详见4.2.13.二级商户号录入接口 |
交易场景 | trans_scene | 定长3位 | 可选 | 不需要 |
交易场景小类 | trans_scene_sub | 定长6位 | 可选 | 不需要 |
二级商户号 | secondary_merid | 变长12位 String | 可选 | |
短信验证码 | sms_code | 定长6位String | 可选 | 与快捷绑卡时的银行预留手机号对应的短信验证码 |
代扣签约流水 | sign_seq_id | 变长18位String | 可选 | 代扣签约订单唯一标识,代扣充值必传,其他充值不需传 不需要 |
银行卡号 | card_no | 变长32位String | 可选 | 代扣支付使用的卡号,不传时默认使用最新绑定的代扣卡 |
阶段标志 | step_flag | 定长2位String | 必须 | 01:快捷支付请求 |
业务请求流水 | biz_trans_id | 变长20位String | 必须 | 标志一个二段式快捷请求,商户下判断唯一,只能是数字和字母充值类型为二段式快捷时必填 与一阶段保持不变 |
分账账户串(div_detail )内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 变长16位String | 必须 | div_detail参数下的二级参数 分账客户号 |
分账账户号 | divAcctId | 变长9位String | 必须 | div_detail参数下的二级参数 分账账户号 |
分账金额 | divAmt | 变长14位String | 必须 | div_detail参数下的二级参数 分账金额,保留两位小数 |
是否冻结标志 | divFreezeFg | 定长2位String | 必须 | div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结 |
注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 变长String | 必须 | 每一种消息类型代表一种交易,此处为850 |
应答返回码 | resp_code | 定长6位String | 必须 | 850000–调用成功,其他见:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 交易类型为免注册网银支付时,非必传 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 可选 | 组成规则:8位本平台日期+10位系统流水号 |
业务类型 | trans_type | 定长8位String | 可选 | 02020101:支付 |
充值类型 | recharge_type | 定长8位String | 可选 | 02020000: 个人网银 02020001: 企业网银 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
入账客户号 | in_cust_id | 定长16位String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 返参中的URL为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文。 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。 注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 |
银行卡号 | card_no | 变长32位String | 可选 | 代扣支付使用的卡号,不传时默认使用最新绑定的代扣卡 |
阶段标志 | step_flag | 定长2位String | 可选 | 01:快捷支付请求02:快捷支付确认充值类型为二段式快捷时必填 |
业务请求流水 | biz_trans_id | 变长20位String | 可选 | 标志一个二段式快捷请求,商户下判断唯一,只能是数字和字母充值类型为二段式快捷时必填 |
返回码¶
返回码 | 返回描述 |
850000 | 交易成功 |
850001 | 交易处理中 |
850002 | 请求已受理 |
850003 | 交易失败 |
850099 | 系统异常 |
850100 | 请求参数非法 |
850101 | 商户无此接口权限 |
850102 | 验证签名失败 |
850103 | 商户状态异常 |
850104 | 用户状态异常 |
850107 | 消息类型与签名内容不一致 |
850108 | 商户客户号与签名内容不一致 |
850109 | 版本号与签名内容不一致 |
850110 | 商户号不存在 |
850111 | 用户客户号不存在 |
850202 | 交易订单号重复 |
850204 | 商户配置异常 |
850228 | (入账客户号、入账账户号)与分账串信息必须输入一项 |
850230 | 入账客户号和入账账户号必须同时输入 |
850231 | 入账用户状态异常 |
850303 | 商户支付基础信息未配置 |
850305 | 入账客户信息不正确 |
850306 | 入账分账串信息不正确 |
850307 | 该用户未绑定快捷卡 |
850313 | 该充值银行与用户快捷或代扣卡不匹配 |
850314 | 支付手续费账户状态不正常 |
850319 | 快捷卡不存在或状态异常 |
850321 | 支付手续费未配置 |
850329 | 理财账户不允许进行支付,分账和作为手续费! |
850727 | 分账信息异常 |
850733 | 分账支付明细处理失败 |
850737 | 支付明细处理失败 |
850739 | 快捷支付短信发送异常 |
850748 | 二级商户号不存在 |
850749 | 二级商户号状态异常 |
850315 | 手续费金额不得大于等于交易金额 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "850",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000030895",
"order_date": "20180816",
"order_id": "2018081615344454",
"open_id": "3",
"app_id": "01050000",
"good_tag": "D",
"raw_flag": "6232511231322345",
"trans_amt": "93",
"in_cust_id": "",
"divCustId": "",
"divFreezeFg": "",
"divAcctId": "",
"in_acct_id": "",
"divAmt": "",
"biz_trans_id": "",
"goods_desc": "",
"ret_url": "",
"step_flag": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_merpriv",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "850";
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": "850",
"resp_code": "850000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "850",
"resp_code": "850099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
直接代扣支付 825¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为825 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
付款方姓名 | user_name | 变长50位String | 必须 | 用户的真实姓名,中文应使用UTF-8字符集URLEncode编码后传入 |
付款方证件类型 | cert_type | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020104:回乡证 01020106:台胞证 01020107:其他 目前仅支持身份证 |
付款方证件号 | cert_id | 变长20位String | 必须 | 付款方证件号码,与证件类型对应 |
付款方银行预留手机号 | card_mobile | 变长11位String | 必须 | 付款方银行预留手机号,变长11位数字 |
付款方银行卡号 | card_no | 变长32位String | 必须 | 付款方银行卡号,变长32位数字 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
银行账户类型 | card_type | 定长8位String | 必须 | 01050001:对公账户 01050000:对私账户 目前仅支持对私 |
入款方账户号 | in_cust_acct_id | 变长9位String | 必须 | 入款方账户号 |
入款方用户号 | in_cust_id | 定长16位String | 必须 | 入款方客户号,不能是出款方客户号 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。 注意: 1) URL应使用UTF-8字符集URLEncode编码后传入 2)URL中请不要包含“附件三:BgRetUrl中禁止的字符串列表”的字符串 3) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行Base64加密后再使用 |
扩展域 | extension | 变长512位String | 可选 | 用于扩展请求参数 若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”} 二级商户号由汇付生成,详见4.2.9.二级商户号录入接口 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为825 |
应答返回码 | resp_code | 定长6位String | 必须 | 825000–调用成功,其他见附件四:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+10位系统流水号 |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
返回码¶
返回码 | 返回描述 |
825000 | 交易成功 |
825002 | 请求已受理 |
825003 | 交易失败 |
825099 | 系统异常 |
825100 | 请求参数非法 |
825102 | 验证签名失败 |
825103 | 商户状态异常 |
825104 | 用户状态异常 |
825105 | 账户状态异常 |
825110 | 商户号不存在 |
825202 | 交易订单号重复 |
825303 | 商户支付基础信息未配置 |
825314 | 支付手续费账户状态不正常 |
825321 | 支付手续费未配置 |
825322 | 入账账户不正确 |
825323 | 该银行卡非借记卡 |
82563C | 手续费金额不得大于等于交易金额 |
825800 | 风控信息验证失败 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "825",
"mer_cust_id": "6666000000026086",
"order_date": "20180816",
"order_id": "2018081615344454",
"user_name": "",
"cert_type": "01020100",
"cert_id": "",
"card_mobile": "13100001111",
"card_no": "6225768612148888",
"gateway_seqId": "1234567890",
"trans_amt": "1.00",
"card_type": "01050000",
"in_cust_acct_id": "",
"in_cust_id": "",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"mer_priv": "test_merpriv",
"extension": "test_extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "825";
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": "825",
"resp_code": "825000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180816",
"order_id": "2018081615344454",
.......
}
失败响应:
200
{
"cmd_id": "825",
"resp_code": "825099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180816",
"order_id": "2018081615344454",
.......
}