网银类接口¶
204 网银支付( WEB 版)接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | 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 | 变长String | 必须 | 该参数表示分账对象,将金额分给不同用户的账户中;分账串定义可参照下表 |
数据格式:[{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’}],可分给多个对象,每个对象大括号{}用逗号隔开 | ||||
divCustId和divAcctId即为开户接口返回的user_cust_id和acct_id,若分给商户平台自己,可通过上线邮件中查找商户客户号和子账号信息 | ||||
二级商户号 | secondary_mer_id | 定长10位的String | 可选 | 对于开启二级商户模式的商户,必须输入其配下的二级商户号 |
商品名称 | goods_desc | 变长12位String | 可选 | 默认:通用型产品 |
订单有效期 | ord_exp | 定长14位String | 可选 | 格式为YYYYMMDDhhmmss |
网关支付受理渠道 | gw_chnnl_tp | 定长2位String | 可选 | 网关支付受理渠道 01:电脑浏览器 02:手机浏览器 03:手机应用程序 99:其他 若为空默认传99 |
付款终端类型 | pyer_trx_trm_tp | 定长2位String | 可选 | 付款终端类型:01:电脑 02:手机 03:平板设备 04:可穿戴设备 05:数字电视 06:条码支付受理终端 99:其他 |
设备信息 | dev_info_json | 变长1024位String | 必须 | 参见 设备静态信息 。 |
交易发生地 | transaction_addr | 变长128位String | 必须 | |
资金用途 | purpose | 变长128位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 | 必须 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
交易类型 | pay_type | 定长2位String | 可选 | 00:个人网银,01:企业网银 |
付款方银行编号 | pyer_bank_no | 定长String | 可选 | 交易异步成功后才会返回 |
付款方银行账号 | pyer_acct_id | 定长String | 可选 | 交易异步成功后才会返回 |
付款方银行账户名 | pyer_acct_nm | 定长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",
.......
}
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 | 必须 | 02020001: 企业网银 |
交易类型 | trans_type | 定长8位String | 必须 | 02020100:充值 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额,格式为###.00 |
开户银行代号 | bank_id | 变长8位String | 必传 | |
借贷标记 | dc_flag | 定长1位String | 必传 | D–借记 C–贷记 |
商户前台应答地址 | ret_url | 变长128位String | 必须 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 注意: 1) URL中请不要包含特殊字符 2) 必须是外网地址 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。 注意: 1) URL中请不要包含特殊字符 2) 必须是外网地址 |
商户私有域 | 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 | 可选 | |
设备信息 | dev_info_json | 变长1024位String | 必须 | 参见 设备静态信息 。 |
交易发生地 | transaction_addr | 变长128位String | 必须 | |
资金用途 | purpose | 变长128位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",
.......
}