用户管理类接口¶
101 个人用户开户接口¶
功能说明¶
用于在本平台系统下为个人用户开设专属虚拟账户。返回的参数列表中开发者至少要保存用户虚拟账户客户号user_cust_id和子账号acct_id,以便后续其他接口中会用到。
调用方式:系统调用
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为101 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户姓名 | user_name | 变长50位String | 必须 | 用户的真实姓名 |
身份证号 | cert_id | 变长18位String | 必须 | 用户的身份证号 |
手机号 | user_mobile | 定长11位String | 必须 | 用户的手机号 |
证件有效期 | vali_date | 定长8位String | 可选 | 填写证件上有效期的截至日期,格式为:YYYYMMDD,例如:20290420 |
用户省份 | cust_prov | 定长4位String | 必须 | 用户省份,如上海0031 |
用户地区 | cust_area | 定长4位String | 必须 | 用户地区,如上海3100 |
住址 | cust_address | 变长250位String | 必须 | 填写证件上的住址 |
职业 | occupation | 定长2位String | 必须 | 见个人职业分类表 |
邮箱 | user_email | 变长40位String | 可选 | 用户的电子邮箱 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
国籍 | nationality | 变长128位的String | 必须 | 例如:中华人民共和国 |
个人职业分类表:
职业名称 | 编号 | 职业名称 | 编号 | |
---|---|---|---|---|
国家机关、党群机关、企事业单位负责人 | 01 | 卫生行业从业人员 | 08 | |
金融业从业人员 | 02 | IT业从业人员 | 09 | |
房地产业从业人员 | 03 | 农林牧渔劳动者 | 10 | |
商贸从业人员 | 04 | 生产工作、运输工作和部分体力劳动者 | 11 | |
自由职业者 | 05 | 退休人员 | 12 | |
科教文从业人员 | 06 | 不便分类的其他劳动者 | 13 | |
制造业从业人员 | 07 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为101 |
应答返回码 | resp_code | 定长6位String | 必须 | 101000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
子账户号 | acct_id | 变长16位String | 必须 | 由汇付生成,用户的默认子账户号 |
手机号 | user_mobile | 定长11位String | 必须 | 用户的手机号 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+10位系统流水号 |
手续费金额 | fee_amt | 变长14位String | 必须 | 手续费金额,格式为###.00 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
商户后台应答地址 | bg_ret_url | 变长120位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址结果 |
商户私有域 | mer_priv | 变长128位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "101",
"mer_cust_id": "6666000000026086",
"order_id": "10000000001",
"order_date": "20170828",
"solo_flg": "00000100",
"user_name": "测试2.0",
"cert_id": "441201199010245791",
"user_mobile": "15947001263",
"vali_date": "20161130",
"cust_prov": "0031",
"cust_area": "3100",
"cust_address": "12",
"occupation": "12",
"user_email": "johson.wu_56@qq.com",
"pay_password": "password",
"mer_priv": "testmerpriv",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"extension": "extension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "101";
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": "101",
"resp_code": "101000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
成功响应:
200
{
"cmd_id": "101",
"resp_code": "101304",
"resp_desc": "个人用户开户失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
---|---|
101100 | 请求参数非法 |
101000 | 交易成功 |
101098 | 系统超时 |
101099 | 系统异常 |
101101 | 商户无此接口权限 |
101102 | 验证签名失败 |
101103 | 商户状态异常 |
101107 | 消息类型与签名内容不一致 |
101108 | 商户客户号与签名内容不一致 |
101109 | 版本号与签名内容不一致 |
101110 | 商户号不存在 |
101202 | 交易订单号重复 |
101203 | 账户可用余额不足 |
101204 | 商户配置异常 |
101301 | 该用户已开户,身份证号已存在 |
101302 | 该用户已开户,手机号已存在 |
101303 | 该用户正在开户中,请务重复申请 |
101304 | 个人用户开户失败 |
101305 | 手续费收取失败 |
101306 | 个体户开户时,支付密码为必输 |
101307 | 个体户开户时,证件有效期为必输 |
101308 | 省份地区信息非法 |
134 个人用户信息修改接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为134 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:202020604 |
手机号 | user_mobile | 定长11位String | 必须 | 用户新的手机号 |
后台应答地址 | bg_ret_url | 变长128位的String | 可选 | 通过后台通知商户结果 注意 1) 使用时不要包含中文 2) 必须是外网地址 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为134 |
应答返回码 | resp_code | 定长6位String | 必须 | 134000–成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
手机号 | user_mobile | 定长11位String | 必须 | 用户的手机号 |
后台应答地址 | bg_ret_url | 变长128位的String | 可选 | 通过后台通知商户结果 注意 1) 使用时不要包含中文 2) 必须是外网地址 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "134",
"mer_cust_id": "6666000000026086",
"order_id": "10000000001",
"order_date": "20200604",
"user_cust_id": "6666000000026190",
"user_mobile": "13614092840",
"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 = "134";
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": "134",
"resp_code": "134000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20200604",
"order_id": "10000000001",
.......
}
成功响应:
200
{
"cmd_id": "134",
"resp_code": "134099",
"resp_desc": "系统异常",
"mer_cust_id" : "6666000000026086",
"order_date": "20200604",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
---|---|
134100 | 请求参数非法 |
134000 | 交易成功 |
134099 | 系统异常 |
134101 | 商户无此接口权限 |
134102 | 验证签名失败 |
134103 | 商户状态异常 |
134107 | 消息类型与签名内容不一致 |
134108 | 商户客户号与签名内容不一致 |
134109 | 版本号与签名内容不一致 |
134202 | 交易订单号重复 |
134011 | 用户不存在 |
134236 | 只支持个人用户修改 |
134104 | 用户状态异常 |
102 企业用户开户接口(页面版)¶
功能说明¶
用于在本平台系统下为企业用户开设专属虚拟账户,需页面form表单提交,在弹出我们的页面上上传附件。返回的参数列表中开发者至少要保存用户虚拟账户客户号user_cust_id和子账号acct_id,以便后续其他接口中会用到。
- 注:若因材料问题导致审核不通过,则需用之前相同的企业开户申请号apply_id、操作类型operate_type改为修改、并重新更换订单号order_id后重新提交开户申请审核。
附件材料要求
五证:营业执照、组织机构代码、税务登记证、法人身份证(正反面)、对公银行账户信息;
三证:统一社会信用码、法人身份证(正反面)、对公银行账户信息;
- 五证必须提供全,若三证合一,则只需要传三证合一的附件
- 上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的 有色公章 且证件均需在有效期内
- “对公银行账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可
- “对公银行账户信息”中必须显示对应银行的支行信息,并附有银行公章
- 上传资料内容与接口参数上的信息及要求一致
调用方式:页面浏览器
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为102 |
商户唯一标识号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一标识号 |
企业开户申请号 | apply_id | 变长18 位String | 必须 | 由商户提供,申请企业开户的唯一标识 |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
操作类型 | operate_type | 定长8位String | 必须 | 00090000 新增 00090001 修改 |
企业证照类型 | corp_license_type | 定长8位String | 必须 | 01030100.普通营业执照企业 01030101.三证合一企业 |
企业类型 | corp_type | 定长8位String | 必须 | 01030000.普通企业 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
营业执照注册号 | business_code | 变长30位的String | 可选 | 企业的营业执照注册号,操作类型operate_type为普通营业执照企业时 必传 |
组织机构代码 | institution_code | 定长9位的String | 可选 | 企业的组织机构代码证,操作类型operate_type为普通营业执照企业时 必传 |
税务登记证号 | tax_code | 变长30位的String | 可选 | 企业的税务登记号,操作类型operate_type为普通营业执照企业时 必传 |
统一社会信用代码 | social_credit_code | 定长18位String | 可选 | 企业的统一社会信用代码,操作类型operate_type为三证合一企业时 必传 |
证照起始日期 | license_start_date | 定长8 位String | 必须 | 企业的营业证照起始日期,精确到年月日 |
证照结束日期 | license_end_date | 定长8 位String | 必须 | 企业的营业证照结束日期,精确到年月日,支持“永久” |
企业经营地址 | corp_business_address | 变长250位字符串 | 必须 | 企业的经营地址 |
企业注册地址 | corp_reg_address | 变长250位字符串 | 必须 | 企业的注册地址 |
企业固定电话 | corp_fixed_telephone | 变长15位字符串 | 必须 | 企业的固定电话 |
经营范围 | business_scope | 变长1000位字符串 | 必须 | 企业的经营范围 |
控股股东 (实际控制人) | controlling_shareholder | 变长3000位字符串 | 必须 | 数据格式:[{“custName”:”测试”,”certType”:”01020100”,”certId”:”371100198212191101”,”shareholderAddr”:”上海市”,”ratio”:”50”}] |
法人姓名 | legal_name | 变长20位String | 必须 | 企业的法人姓名 |
法人证件类型 | legal_cert_type | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
法人证件号码 | legal_cert_id | 变长20位String | 必须 | 法人的证件号码,与证件类型对应 |
法人证件起始日期 | legal_cert_start_date | 定长8 位String | 必须 | 法人的证件起始日期,精确到年月日 |
法人证件起始日期 | legal_cert_end_date | 定长8 位String | 必须 | 法人的证件结束日期,精确到年月日,支持“永久” |
法人手机号码 | legal_mobile | 定长11位String | 必须 | 法人的手机号码 |
企业联系人姓名 | contact_name | 变长50位String | 必须 | 企业联系人的姓名 |
联系人手机号 | contact_mobile | 定长11为String | 必须 | 联系人的手机号码 |
联系人邮箱 | contact_email | 变长40位的String | 必须 | 联系人的邮箱地址 |
开户银行账户名 | bank_acct_name | 变长40位的String | 必须 | 企业开户银行账户名,需与企业名称保持一致 |
开户银行 | bank_id | 定长8位的String | 必须 | 具体见附件:开户银行代号 |
开户银行账号 | bank_acct_no | 变长32位的String | 必须 | 企业开户银行账号 |
开户银行支行名称 | bank_branch | 变长100位String | 必须 | 企业开户银行的支行名称 |
开户银行省份 | bank_prov | 定长4位String | 必须 | 银行卡开户省份 |
开户银行地区 | bank_area | 定长4位String | 必须 | 银行卡开户地区 |
行业 | industry | 定长2位String | 必须 | 企业行业类别,具体见下方:行业列表 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | |
法人国籍 | nationality | 变长128位的String | 必须 | 例如:中华人民共和国 |
控股股东(controlling_shareholder)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
姓名 | custName | 变长20位String | 必须 | |
证件类型 | certType | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
证件号码 | certId | 变长20位String | 必须 | 股东的证件号码,与证件类型对应 |
股东地址 | shareholderAddr | 变长250位String | 必须 | 股东的地址 |
股份占比 | ratio | 变长4位String | 必须 | 股份占比 |
行业类表(industry)
行业名称 | 编号 | 行业名称 | 编号 | 行业名称 | 编号 | ||
---|---|---|---|---|---|---|---|
酒店、餐饮类 | 01 | 信息传输、计算机服务业和软件业类 | 10 | 水利环境和公共设施管理类 | 19 | ||
旅游类 | 02 | 预售卡及虚拟物品销售类 | 11 | 政府类 | 20 | ||
艺术品交易/收藏类 | 03 | 租赁和商务服务业类 | 12 | 卫生、社会保障和社会福利类 | 21 | ||
娱乐类 | 04 | 慈善、基金会等非盈利组织 | 13 | 教育业 | 22 | ||
建筑业/房地产类 | 05 | 金融理财类 | 14 | 采矿业类 | 23 | ||
拍卖和典当类 | 06 | 外贸类 | 15 | 制造业类 | 24 | ||
废品收购类 | 07 | 货币服务 | 16 | 科学研究、技术服务和地质勘查业 | 25 | ||
居民服务、快递和其他服务类 | 08 | 林、渔、农、牧业类 | 17 | 其他 | 26 | ||
批发和零售类 | 09 | 交通运输,仓储类 | 18 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为102 |
应答返回码 | resp_code | 定长6位String | 必须 | 102000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
企业开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请企业开户的唯一标识 |
企业用户客户号 | user_cust_id | 定长16位String | 可选 | |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
商户唯一标识号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一标识号 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
子账户号 | acct_id | 变长9位String | 可选 | 基本户-支付账户 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 可选 | 取现接口需要用到此ID |
审核状态 | audit_status | 定长2位String | 可选 | 同步(resp_code=102000时返回 04:待审核,否则不返回) |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为102 |
应答返回码 | resp_code | 定长6位String | 必须 | 102000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
企业开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请企业开户的唯一标识 |
企业用户客户号 | user_cust_id | 定长16位String | 可选 | |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
商户唯一标识号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一标识号 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
子账户号 | acct_id | 变长9位String | 可选 | 基本户-支付账户 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 可选 | 取现接口需要用到此ID |
审核状态 | audit_status | 定长2位String | 可选 | 异步(resp_code=102000时返回,审核通过audit_status=00, 审核拒绝audit_status=02, 待修改audit_status=01) |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "102",
"mer_cust_id": "6666000000026086",
"apply_id": "2000001hh43",
"order_id": "2017569800043",
"order_date": "20170228",
"operate_type": "00090000",
"corp_license_type": "01030100",
"corp_type": "01030001",
"corp_name": "全球黑科",
"business_code": "a1225431204",
"institution_code": "088100129",
"tax_code": "a199945675",
"social_credit_code": "",
"license_start_date": "20160830",
"license_end_date": "20190830",
"corp_business_address": "上海市",
"corp_reg_address": "上海杨北路",
"corp_fixed_telephone": "021-12345678900",
"business_scope": "上海市浦张杨",
"controlling_shareholder": "[{\"name\":\"20条\",\"certType\":\"01020100\",\"certId\":\"370101197209143545\"}]",
"legal_name": "球",
"legal_cert_type": "01020100",
"legal_cert_id": "140203195101011256",
"legal_cert_start_date": "20150809",
"legal_cert_end_date": "20190809",
"legal_mobile": "15911115334",
"contact_name": "科技球",
"contact_mobile": "15911552132",
"contact_email": "1234901234567890_.jo@qq.ne",
"bank_acct_name": "全球黑科",
"bank_id": "01030000",
"bank_acct_no": "622253011203",
"bank_branch": "支付",
"bank_prov": "0031",
"bank_area": "3100",
"industry": "01",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"ret_url": "",
"mer_priv": "test_priv",
"extension": "test"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "102";
String merCustId = "6666000000026086";
String version = "10";
response.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = response.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": "102",
"resp_code": "102000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "102",
"resp_code": "102304",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
102000 | 交易成功 |
102098 | 系统超时 |
102099 | 系统异常 |
102100 | 请求参数非法 |
102101 | 商户无此接口权限 |
102102 | 验证签名失败 |
102103 | 商户状态异常 |
102107 | 消息类型与签名内容不一致 |
102108 | 商户客户号与签名内容不一致 |
102109 | 版本号与签名内容不一致 |
102110 | 商户号不存在 |
102201 | 页面数据被篡改 |
102202 | 交易订单号重复 |
102300 | 该企业证照类型与证照号不匹配 |
102301 | 该企业已开户 |
102302 | 未查询到原开户申请号 |
102303 | 该企业已申请开户 |
102304 | 该企业开户申请(已经通过/正在审核中/已被拒绝不能修改) |
102305 | 省份地区信息非法 |
102306 | 企业名称与开户银行账户名不相同 |
102307 | 营业执照注册号已被使用 |
102308 | 统一社会信用代码已被使用 |
102309 | 该企业已有正在处理的开户申请或已开户成功 |
102310 | 行业非法 |
102311 | 上传失败,文件大小超过5M |
102312 | 上传失败,不支持该文件格式 |
102313 | 上传失败,文件数量超过限制 |
102314 | 文件上传失败,请稍后重试 |
102315 | 操作超时,请重试 |
102316 | 文件信息不匹配 |
102317 | 开户申请提交失败,数据异常 |
102319 | 文件数据异常 |
125 企业开户申请接口(后台版)¶
功能说明¶
用于在本平台系统下为企业用户开设专属虚拟账户,纯后台API接口,无页面。返回的参数列表中开发者至少要保存用户虚拟账户客户号user_cust_id和子账号acct_id,以便后续其他接口中会用到。
准备工作:企业开户调该接口前先调用 商户文件上传接口 上传图片资料,资料要求如下:
五证:营业执照、组织机构代码、税务登记证、法人身份证(正反面)、对公银行账户信息;
三证:统一社会信用码、法人身份证(正反面)、对公银行账户信息;
1、五证必须提供全,若三证合一,则只需要传三证合一的附件
2、上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的 有色公章 且证件均需在有效期内
3、“对公银行账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可
4、“对公银行账户信息”中必须显示对应银行的支行信息,并附有银行公章
5、上传资料内容与接口参数上的信息及要求一致
注:若因材料问题导致审核不通过,则需用之前相同的企业开户申请号apply_id、操作类型operate_type改为修改、并重新更换订单号order_id后重新提交开户申请审核。
调用方式:系统调用
接口方式:同步
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为125 |
商户唯一标识号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一标识号 |
企业开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请企业开户的唯一标识 |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
操作类型 | operate_type | 定长8位String | 必须 | 00090000 新增 00090001 修改 |
企业证照类型 | corp_license_type | 定长8位String | 必须 | 01030100.普通营业执照企业 01030101.三证合一企业 |
企业类型 | corp_type | 定长8位String | 必须 | 01030000.普通企业 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
营业执照注册号 | business_code | 变长30位的String | 可选 | 企业的营业执照注册号,操作类型operate_type为普通营业执照企业时 必传 |
组织机构代码 | institution_code | 定长9位的String | 可选 | 企业的组织机构代码证,操作类型operate_type为普通营业执照企业时 必传 |
税务登记证号 | tax_code | 变长30位的String | 可选 | 企业的税务登记号,操作类型operate_type为普通营业执照企业时 必传 |
统一社会信用代码 | social_credit_code | 定长18位String | 可选 | 企业的统一社会信用代码,操作类型operate_type为三证合一企业时 必传 |
证照起始日期 | license_start_date | 定长8 位String | 必须 | 企业的营业证照起始日期,精确到年月日 |
证照结束日期 | license_end_date | 定长8 位String | 必须 | 企业的营业证照结束日期,精确到年月日,支持“永久” |
企业经营地址 | corp_business_address | 变长250位字符串 | 必须 | 企业的经营地址 |
企业注册地址 | corp_reg_address | 变长250位字符串 | 必须 | 企业的注册地址 |
企业固定电话 | corp_fixed_telephone | 变长15位字符串 | 必须 | 企业的固定电话 |
经营范围 | business_scope | 变长1000位字符串 | 必须 | 企业的经营范围 |
控股股东 (实际控制人) | controlling_shareholder | 变长3000位字符串 | 必须 | 数据格式:[{“custName”:”测试”,”certType”:”01020100”,”certId”:”371100198212191101”,”shareholderAddr”:”上海市”,”ratio”:”50”}] |
法人姓名 | legal_name | 变长20位String | 必须 | 企业的法人姓名 |
法人证件类型 | legal_cert_type | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
法人证件号码 | legal_cert_id | 变长20位String | 必须 | 法人的证件号码,与证件类型对应 |
法人证件起始日期 | legal_cert_start_date | 定长8 位String | 必须 | 法人的证件起始日期,精确到年月日 |
法人证件起始日期 | legal_cert_end_date | 定长8 位String | 必须 | 法人的证件结束日期,精确到年月日,支持“永久” |
法人手机号码 | legal_mobile | 定长11位String | 必须 | 法人的手机号码 |
企业联系人姓名 | contact_name | 变长50位String | 必须 | 企业联系人的姓名 |
联系人手机号 | contact_mobile | 定长11为String | 必须 | 联系人的手机号码 |
联系人邮箱 | contact_email | 变长40位的String | 必须 | 联系人的邮箱地址 |
开户银行账户名 | bank_acct_name | 变长50位的String | 必须 | 企业开户银行账户名,需与企业名称保持一致 |
开户银行 | bank_id | 定长8位的String | 必须 | 具体见附件:开户银行代号 |
开户银行账号 | bank_acct_no | 变长32位的String | 必须 | 企业开户银行账号 |
开户银行支行名称 | bank_branch | 变长100位String | 必须 | 企业开户银行的支行名称 |
开户银行省份 | bank_prov | 定长4位String | 必须 | 银行卡开户省份 |
开户银行地区 | bank_area | 定长4位String | 必须 | 银行卡开户地区 |
附件编号列表 | attach_nos | 变长210位的String | 必须 | 商户文件上传接口(122)的附件编号列表,多个附件编号之间用逗号隔开,如:abc123或者abc123,abc1234,需要的文件类型(法定代表人证件(正反面),开户银行许可证,统一社会信用代码,其他) |
行业 | industry | 定长2位String | 必须 | 企业行业类别,具体见下方:行业列表 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | |
法人国籍 | nationality | 变长128位的String | 必须 | 例如:中华人民共和国 |
控股股东(controlling_shareholder)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
姓名 | custName | 变长20位String | 必须 | |
证件类型 | certType | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
证件号码 | certId | 变长20位String | 必须 | 股东的证件号码,与证件类型对应 |
股东地址 | shareholderAddr | 变长250位String | 必须 | 股东地址 |
股份占比 | ratio | 变长4位String | 必须 | 股份占比 |
行业类表(industry)
行业名称 | 编号 | 行业名称 | 编号 | 行业名称 | 编号 | ||
---|---|---|---|---|---|---|---|
酒店、餐饮类 | 01 | 信息传输、计算机服务业和软件业类 | 10 | 水利环境和公共设施管理类 | 19 | ||
旅游类 | 02 | 预售卡及虚拟物品销售类 | 11 | 政府类 | 20 | ||
艺术品交易/收藏类 | 03 | 租赁和商务服务业类 | 12 | 卫生、社会保障和社会福利类 | 21 | ||
娱乐类 | 04 | 慈善、基金会等非盈利组织 | 13 | 教育业 | 22 | ||
建筑业/房地产类 | 05 | 金融理财类 | 14 | 采矿业类 | 23 | ||
拍卖和典当类 | 06 | 外贸类 | 15 | 制造业类 | 24 | ||
废品收购类 | 07 | 货币服务 | 16 | 科学研究、技术服务和地质勘查业 | 25 | ||
居民服务、快递和其他服务类 | 08 | 林、渔、农、牧业类 | 17 | 其他 | 26 | ||
批发和零售类 | 09 | 交通运输,仓储类 | 18 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为125 |
应答返回码 | resp_code | 定长6位String | 必须 | 125000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
企业开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请企业开户的唯一标识 |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
企业用户客户号 | user_cust_id | 定长16位String | 可选 | |
商户唯一标识号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一标识号 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
子账户号 | acct_id | 变长9位String | 可选 | 基本户-支付账户 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 可选 | 取现接口需要用到此ID |
审核状态 | audit_status | 定长2位String | 可选 | 同步(resp_code=125000时返回 04:待审核,否则不返回); |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返参扩展域 | extension | 变长512位的String | 可选 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为125 |
应答返回码 | resp_code | 定长6位String | 必须 | 125000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
企业开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请企业开户的唯一标识 |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
企业用户客户号 | user_cust_id | 定长16位String | 可选 | |
商户唯一标识号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一标识号 |
企业名称 | corp_name | 变长50位String | 必须 | 企业的公司全称 |
子账户号 | acct_id | 变长9位String | 可选 | 基本户-支付账户 |
取现绑定银行卡ID | cash_bind_card_id | 变长20位的String | 可选 | 取现接口需要用到此ID |
审核状态 | audit_status | 定长2位String | 可选 | 异步(resp_code=125000,审核通过audit_status=00, 审核拒绝audit_status=02, 待修改audit_status=01) |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返参扩展域 | extension | 变长512位的String | 可选 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "125",
"mer_cust_id": "6666000000026086",
"apply_id": "2000001hh45",
"order_id": "2017569800045",
"order_date": "20170228",
"operate_type": "00090000",
"corp_license_type": "01030100",
"corp_type": "01030001",
"corp_name": "全球黑科",
"business_code": "a1225431204",
"institution_code": "088100129",
"tax_code": "a199945675",
"social_credit_code": "",
"license_start_date": "20160830",
"license_end_date": "20190830",
"corp_business_address": "上海市",
"corp_reg_address": "上海杨北路",
"corp_fixed_telephone": "021-12345678900",
"business_scope": "上海市浦张杨",
"controlling_shareholder": "[{\"name\":\"20条\",\"certType\":\"01020100\",\"certId\":\"370101197209143545\"}]",
"legal_name": "球",
"legal_cert_type": "01020100",
"legal_cert_id": "140203195101011256",
"legal_cert_start_date": "20150809",
"legal_cert_end_date": "20190809",
"legal_mobile": "15911115334",
"contact_name": "科技球",
"contact_mobile": "15911552132",
"contact_email": "1234901234567890_.jo@qq.ne",
"bank_acct_name": "全球黑科",
"bank_id": "01030000",
"bank_acct_no": "622253011203",
"bank_branch": "支付",
"bank_prov": "0031",
"bank_area": "3100",
"industry": "01",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"attach_nos": "test01,test02",
"mer_priv": "test_priv",
"extension": "test"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "125";
String merCustId = "6666000000026086";
String version = "10";
response.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = response.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();
返回码¶
返回码 | 返回描述 |
125000 | 交易成功 |
125098 | 系统超时 |
125099 | 系统异常 |
125100 | 请求参数非法 |
125101 | 商户无此接口权限 |
125102 | 验证签名失败 |
125103 | 商户状态异常 |
125107 | 消息类型与签名内容不一致 |
125108 | 商户客户号与签名内容不一致 |
125109 | 版本号与签名内容不一致 |
125110 | 商户号不存在 |
125201 | 页面数据被篡改 |
125202 | 交易订单号重复 |
125300 | 该企业证照类型与证照号不匹配 |
125301 | 该企业已开户 |
125302 | 未查询到原开户申请号 |
125303 | 该企业已申请开户 |
125304 | 该企业开户申请(已经通过/正在审核中/已被拒绝不能修改) |
125305 | 省份地区信息非法 |
125306 | 企业名称与开户银行账户名不相同 |
125307 | 营业执照注册号已被使用 |
125308 | 统一社会信用代码已被使用 |
125309 | 该企业已有正在处理的开户申请或已开户成功 |
125310 | 行业非法 |
125311 | 上传失败,文件大小超过5M |
125312 | 上传失败,不支持该文件格式 |
125313 | 上传失败,文件数量超过限制 |
125314 | 文件上传失败,请稍后重试 |
125315 | 操作超时,请重试 |
125316 | 文件信息不匹配 |
125317 | 开户申请提交失败,数据异常 |
125319 | 文件数据异常 |
125321 | 文件已被使用 |
120 代理商商户开户接口¶
功能说明¶
用于代理商在本平台系统下为旗下商户开户
准备工作:商户开户前先调用 商户文件上传接口 上传图片资料,资料要求如下:
五证:营业执照、组织机构代码、税务登记证、法人身份证(正反面)、对公银行账户信息;
三证:统一社会信用码、法人身份证(正反面)、对公银行账户信息;
1、五证必须提供全,若三证合一,则只需要传三证合一的附件
2、上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的 有色公章 且证件均需在有效期内
3、“对公银行账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可
4、“对公银行账户信息”中必须显示对应银行的支行信息,并附有银行公章
5、上传资料内容与接口参数上的信息及要求一致
调用方式:系统调用
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为120 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 传代理商ID |
商户全称 | mer_name | 变长50位String | 必须 | 商户全称(同银行账户名称) |
商户简称 | mer_short_name | 变长25位String | 必须 | |
商户英文名 | mer_en_name | 变长25位String | 必须 | 简称的首字母拼音缩写 |
注册资本(元) | reg_fund | 变长14位String | 必须 | |
实缴资本(元) | paid_in_fund | 变长14位String | 必须 | |
网站地址 | mer_website | 变长200位String | 必须 | |
ICP备案号 | per_icp_code | 变长50位String | 必须 | |
成立时间 | est_date | 定长8位String | 必须 | |
商户所在省份 | mer_prov | 定长4位String | 必须 | |
商户所在地区 | mer_area | 定长4位String | 必须 | |
商户经营地址 | mer_addr | 变长256位String | 必须 | |
商户注册地址 | mer_reg_addr | 变长256位String | 必须 | |
证照类型 | license_type | 定长8位String | 必须 | “普通企业”,” 01030100 ” “三证合一”,” 01030101 “ |
营业执照注册号 | business_code | 变长30位String | 可选 | 商户的营业执照注册号 (证照类型为:普通企业 必填) |
组织机构代码 | institution_code | 变长9位String | 可选 | 商户的组织机构代码证 (证照类型为:普通企业 必填) |
税务登记号 | tax_code | 变长30位String | 可选 | 商户的税务登记号 (证照类型为:普通企业必填) |
统一社会信用代码 | social_credit_code | 变长30位String | 可选 | 商户的统一社会信用代码 (证照类型为:三证合一 必填) |
证照有效起始日期 | license_start_date | 定长8位String | 必须 | 精确到年月日,如19701212 |
证照有效结束日期 | license_end_date | 定长8位String | 必须 | 精确到年月日,如19701212,支持“永久” |
经营范围 | business_scope | 变长1000位String | 必须 | 商户的经营范围 |
股东 | stockholders | 变长3000位String | 必须 | 数据格式:[{“custName”:”测试”,”certType”:”01020100”,”certId”:”371100198212191101”,”shareholderAddr”:”上海市”,”ratio”:”50”}] |
法人姓名 | legal_name | 变长50位String | 必须 | |
法人证件类型 | legal_cert_type | 定长8位String | 必须 | 01020100:身份证(默认) 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
法人证件号 | legal_cert_id | 变长30位String | 必须 | 法人的证件号码,与证件类型对应 |
法人证件起始日期 | legal_id_start_date | 变长8位String | 必须 | 精确到年月日,如19701212 |
法人证件结束日期 | legal_id_end_date | 变长8位String | 必须 | 精确到年月日,如19701212,支持“永久” |
法人手机号 | legal_mobile | 变长11位String | 必须 | 法人的手机号码 |
联系人姓名 | contact_name | 变长50位String | 必须 | 联系人的姓名 |
联系人手机号 | contact_mobile | 变长11位String | 必须 | |
联系人邮箱 | contact_email | 变长50位String | 必须 | |
开户银行 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 |
开户银行账号 | bank_acct_no | 变长32位String | 必须 | 商户开户银行账号 |
开户银行支行名称 | bank_branch | 变长80位String | 可选 | 商户开户银行的支行名称 |
开户银行省份 | bank_prov | 定长4位String | 必须 | 银行卡开户省份 |
开户银行地区 | bank_area | 定长4位String | 必须 | 银行卡开户地区 |
附件编号列表 | attach_nos | 变长260位String | 可选 | 商户文件上传接口(122)的附件编号列表,多个附件编号之间用逗号隔开,如:abc123或者abc123,abc1234 |
结算卡标志 | card_type | 定长1位String | 可选 | 结算卡对公对私标志 1:对公 2:对私 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 企账通代理商必填,如:{“eacloud”:”proxy”} |
行业 | mer_industry | 定长2位String | 必须 | 行业类别,具体见下方:行业类表 |
固定电话 | corp_phone | 变长15位的String | 必须 | |
法人国籍 | nationality | 变长128位的String | 必须 | 例如:中华人民共和国 |
控股股东(controlling_shareholder)
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
姓名 | custName | 变长20位String | 必须 | |
证件类型 | certType | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
证件号码 | certId | 变长20位String | 必须 | 股东的证件号码,与证件类型对应 |
股东地址 | shareholderAddr | 变长250位String | 必须 | 股东地址 |
股份占比 | ratio | 变长4位String | 必须 | 股份占比 |
行业类表(mer_industry)
行业名称 | 编号 | 行业名称 | 编号 | 行业名称 | 编号 | ||
---|---|---|---|---|---|---|---|
酒店、餐饮类 | 01 | 信息传输、计算机服务业和软件业类 | 10 | 水利环境和公共设施管理类 | 19 | ||
旅游类 | 02 | 预售卡及虚拟物品销售类 | 11 | 政府类 | 20 | ||
艺术品交易/收藏类 | 03 | 租赁和商务服务业类 | 12 | 卫生、社会保障和社会福利类 | 21 | ||
娱乐类 | 04 | 慈善、基金会等非盈利组织 | 13 | 教育业 | 22 | ||
建筑业/房地产类 | 05 | 金融理财类 | 14 | 采矿业类 | 23 | ||
拍卖和典当类 | 06 | 外贸类 | 15 | 制造业类 | 24 | ||
废品收购类 | 07 | 货币服务 | 16 | 科学研究、技术服务和地质勘查业 | 25 | ||
居民服务、快递和其他服务类 | 08 | 林、渔、农、牧业类 | 17 | 其他 | 26 | ||
批发和零售类 | 09 | 交通运输,仓储类 | 18 |
同步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为120 |
应答返回码 | resp_code | 定长6位String | 必须 | 120000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 可选 | 返回码的对应中文描述 |
代理商ID | agent_id | 变长16 的String | 必须 | 由商户提供,代理商唯一标识 |
审核状态 | audit_status | 定长2位String | 可选 | 00:待审核 (resp_code=120000时返回,否则不返回) |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返参扩展域 | extension | 变长512位的String | 可选 |
异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为120 |
应答返回码 | resp_code | 定长6位String | 必须 | 120000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 可选 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 变长16 的String | 必须 | 商户唯一标识 |
审核状态 | audit_status | 定长2位String | 必须 | 审核拒绝时resp_code=120003,audit_status=02 ,审核通过时resp_code=120000,audit_status=01 |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户名称 | mer_name | 变长50位String | 可选 | |
基本账户号 | acct_id | 变长9位String | 可选 | |
结算卡绑卡ID | bind_card_id | 变长20位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
返参扩展域 | extension | 变长512位的String | 可选 |
代码示例¶
java
package com.huifu.zeusClient.webapp.controller.zeus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huifu.saturn.cfca.CFCASignature;
import com.huifu.saturn.cfca.SignResult;
import com.huifu.saturn.cfca.VerifyResult;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.Charset;
/**
* Function : 代理商开户测试
* Date : 2018年9月26日 下午4:45:53
*/
public class CreateMerUserMain {
// 地址可以询问对方运营
public static String TEST_FILE_URL = "http://localhost:8087/service-provider/fileMerchantRequest";
public static String TEST_URL = "http://localhost:8087/service-provider/merchantRequest";
// 加签用pfx文件
public static String PFX_FILE_NAME = "888888-NEW.pfx";
// 加签用密码
public static String PFX_FILE_PWD = "123456";
//商户号
public static String MER_CUST_ID = "6666000000026086";
//文件可以询问对方运营
public static String CER_NAME = "CFCA_ACS_TEST_OCA31.cer";
public static String VERSION = "10";
public static String CHARSET = "UTF-8";
public static void main(String[] args) {
String attachNos = "c1454422338,c1454422339";
//上传附件
uploadFile(attachNos);
//代理商开户---同类型附件最多只能有一个
createAgentUser(attachNos);
}
/**
* 商户附件上传
*
* @param attachNos
*/
public static void uploadFile(String attachNos) {
if (StringUtils.isNotBlank(attachNos)) {
String[] attachNoList = attachNos.split(",");
for (String attachNo : attachNoList) {
//循环上传附件
uploadFileMain(attachNo);
try {
//测试环境,休眠一会再上传;正式环境不需要
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void uploadFileMain(String attachNo) {
String valueObj = "{\"version\":\"10\",\"cmd_id\":\"122\",\"mer_cust_id\":\"" + MER_CUST_ID + "\",\"attach_no\":\"" + attachNo + "\",\"trans_type\":\"01\",\"attach_type\":\"05\",\"extension\":\"1\"}";
// 进行base64转换
String base64RequestParams = Base64.encodeBase64String(valueObj.getBytes(Charset.forName("utf-8")));
// 加签
SignResult signResult = CFCASignature.signature("F:/app/" + PFX_FILE_NAME, PFX_FILE_PWD, base64RequestParams,
"utf-8");
if (!"000".equals(signResult.getCode())) {
System.out.println("加签错误");
return;
}
String checkValue = signResult.getSign();
String cmdId = "122";
//如果文件名称中有中文,请先使用URLEncoder.encode(filename, "UTF-8")对文件名编码
File newFile = new File("C:\\Users\\hao.sun\\Desktop\\0.png");
HttpRequest httpRequest = HttpRequest.post(TEST_FILE_URL).charset(CHARSET);
HttpResponse httpResponse = httpRequest.contentType("multipart/form-data").form(
"cmd_id", cmdId,
"version", VERSION,
"mer_cust_id", MER_CUST_ID,
"check_value", checkValue,
"attach_file", newFile).send();
String body = httpResponse.bodyText();
// 响应解密 验签失败
JSONObject jsonObject = JSON.parseObject(body);
String sign = jsonObject.getString("check_value");
VerifyResult verifyResult = CFCASignature.verifyMerSign("100001", sign, CHARSET,
"F:/app/" + CER_NAME);
if (!"000".equals(verifyResult.getCode())) {
System.out.println("验签失败");
return;
}
String content = new String(verifyResult.getContent(), Charset.forName(CHARSET));
String decrptyContent = new String(Base64.decodeBase64(content), Charset.forName(CHARSET));
System.out.println(decrptyContent);
}
/**
* 代理商开户申请
*
* @param attachNos
*/
public static void createAgentUser(String attachNos) {
String socialCreditCode = "344452111561313162";
String valueObj = "{\"version\":\"10\",\"cmd_id\":\"120\",\"mer_cust_id\":\"6666000000026086\",\"mer_name\":\"代理商商户测试\",\"mer_short_name\":\"商户简称\",\"mer_en_name\":\"我爱你中国\",\"reg_fund\":\"10000000000000\",\"paid_in_fund\":\"90000000000000\",\"mer_website\":\"www.baidu.com\",\"per_icp_code\":\"dhfdshfhsdfsd\",\"est_date\":\"20160512\",\"mer_prov\":\"0011\",\"mer_area\":\"1100\",\"mer_addr\":\"无法adfdf\",\"mer_reg_addr\":\"普通商户注册地\",\"license_type\":\"01030101\",\"business_code\":\"\",\"institution_code\":\"\",\"tax_code\":\"\",\"social_credit_code\":\""+socialCreditCode+"\",\"license_start_date\":\"20120612\",\"license_end_date\":\"20190612\",\"business_scope\":\"fdksfhsdkfggfg\",\"stockholders\":\"fdksfhsdkfggfg\",\"legal_name\":\"张大庄\",\"legal_cert_type\":\"01020100\",\"legal_cert_id\":\"020103197101062287\",\"legal_id_start_date\":\"20111220\",\"legal_id_end_date\":\"21111220\",\"legal_mobile\":\"15811111111\",\"contact_name\":\"测试sh\",\"contact_mobile\":\"15911111111\",\"contact_email\":\"15911111111@163.com\",\"bank_acct_no\":\"6217001257387383\",\"bank_branch\":\"gfdgfdg\",\"bank_prov\":\"0012\",\"bank_area\":\"1200\",\"addr_fileid\":\"\",\"gate_fileid\":\"\",\"manage_fileid\":\"\",\"social_credit_code_fileid\":\"\",\"business_license_fileid\":\"\",\"org_code_fileid\":\"\",\"tax_reg_fileid\":\"\",\"other_data_fileid\":\"\",\"legal_license_fileid1\":\"\",\"legal_license_fileid2\":\"\",\"bank_acct_open_lice_fileid\":\"\",\"elec_protocol_fileid\":\"\",\"bg_ret_url\":\"http://192.168.0.74:8001/npayCallBack/asyncHandle.json\",\"mer_priv\":\"\",\"extension\":\"\",\"attach_nos\":\""+attachNos+"\"}";
// 进行base64转换
String base64RequestParams = Base64.encodeBase64String(valueObj.getBytes(Charset.forName("utf-8")));
// 加签
SignResult signResult = CFCASignature.signature("F:/app/" + PFX_FILE_NAME, PFX_FILE_PWD, base64RequestParams, "utf-8");
if (!"000".equals(signResult.getCode())) {
System.out.println("加签错误");
return;
}
String checkValue = signResult.getSign();
String cmdId = "120";
String contentType = "application/x-www-form-urlencoded";
String postStr = "cmd_id=" + cmdId + "&version=" + VERSION + "&mer_cust_id=" + MER_CUST_ID + "&check_value=" + checkValue;
HttpRequest httpRequest = HttpRequest.post(TEST_URL).charset(CHARSET);
HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
// 响应解密 验签失败
JSONObject jsonObject = JSON.parseObject(body);
String sign = jsonObject.getString("check_value");
VerifyResult verifyResult = CFCASignature.verifyMerSign("100001", sign, CHARSET,
"F:/app/" + CER_NAME);
if (!"000".equals(verifyResult.getCode())) {
System.out.println("验签失败");
return;
}
String content = new String(verifyResult.getContent(), Charset.forName(CHARSET));
String decrptyContent = new String(Base64.decodeBase64(content), Charset.forName(CHARSET));
System.out.println(decrptyContent);
}
}
返回码¶
代理商商户开户(cmd_id=120) | |
---|---|
120000 | 交易成功 |
120003 | 交易失败;开户审核拒绝 |
120098 | 系统超时 |
120099 | 系统异常 |
120100 | 请求参数非法 |
120101 | 商户无此接口权限 |
120102 | 验证签名失败 |
120103 | 商户状态异常 |
120107 | 消息类型与签名内容不一致 |
120108 | 商户客户号与签名内容不一致 |
120109 | 版本号与签名内容不一致 |
120110 | 商户号不存在 |
120300 | 该企业证照类型与证照号不匹配 |
120303 | 银行卡号与银行不匹配 |
120304 | 银行卡类型错误 |
120305 | 省份地区信息非法 |
120319 | 文件数据异常 |
120321 | 代理商配置信息不存在(或”文件已被使用”) |
120322 | 商户开户请求异常(或”文件不存在”) |
120323 | 商户名称与开户银行账户名不一致(或”同类型文件有多个”) |
120324 | 更新附件状态异常(或”验卡失败”) |
120325 | 该商户名称已使用 |
120326 | 该商户名称简称已使用 |
120327 | 该商户邮箱已被使用 |
120328 | 营业执照注册号已被使用(或”统一社会信用代码已被使用”) |
120329 | 联系人手机号不正确 |
120330 | 联系人邮箱不正确 |
120331 | 法人证件号不正确 |
120332 | 法人手机号不正确 |
120333 | 开户银行帐号不正确(或”证照图片异常,请先上传证照再处理”) |
120334 | 保存请求数据失败 |
120335 | 联系人手机号邮箱不允许都为空 |
120336 | 调用账管家”商户与分销商关系新增”接口失败 |
120337 | 商户信息不存在 |
120338 | 开户审核拒绝 |
120339 | 开户银行ID不存在 |
120340 | 银行卡号不正确(或”请联系管理员,配置SFTP服务!”) |
120341 | 新增开发者用户商户关系失败 |
120348 | 绑定对私卡银行卡卡号不能为空! |
124 个体工商户开户接口¶
功能说明¶
用于在本平台系统下为个体工商户开设专属账户。返回的参数列表中开发者至少要保存用户虚拟账户客户号user_cust_id和子账号acct_id,以便后续其他接口中会用到。
准备工作:个体工商户开户调该接口前先调用 商户文件上传接口 上传图片资料,资料要求如下:
1、五证必须提供全,若三证合一,则只需要传三证合一的附件
2、上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的 有色公章 且证件均需在有效期内
3、“对公账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可
4、“对公账户信息”中必须显示对应银行的支行信息,并附有银行公章
5、上传资料内容与接口参数上的信息及要求一致
注:若个体工商户无公章,可上传 经营者有色指印+签名 的复印件。
调用方式:系统调用
接口方式:同步
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为124 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
操作类型 | operate_type | 定长8位String | 必须 | 00090000 新增 00090001 修改 |
个体工商户开户申请号 | apply_id | 变长20位String | 必须 | 个体工商户开户申请号 |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
个体户名称 | user_name | 变长50位String | 必须 | 个体户名称 |
营业执照注册号 | business_code | 变长30位的String | 必须 | 个体工商户的营业执照注册号 |
证照起始日期 | license_start_date | 定长8 位String | 必须 | 个体工商户的营业证照起始日期,精确到年月日 |
证照结束日期 | license_end_date | 定长8 位String | 必须 | 个体工商户的营业证照结束日期,精确到年月日,支持“永久” |
个体工商户经营地址 | solo_business_address | 变长250位字符串 | 必须 | 个体工商户的经营地址 |
个体工商户注册地址 | solo_reg_address | 变长250位字符串 | 必须 | 个体工商户的注册地址 |
个体工商户固定电话 | solo_fixed_telephone | 变长15位字符串 | 必须 | 个体工商户的固定电话 |
经营范围 | business_scope | 变长1000位字符串 | 必须 | 个体工商户的经营范围 |
经营者姓名 | legal_name | 变长20位String | 必须 | 个体工商户的法人姓名 |
经营者证件类型 | legal_cert_type | 定长8位String | 必须 | 01020100:身份证 01020101:护照 01020102:军官证 01020103士兵证 01020104:回乡证 01020105警官证 01020106:台胞证 01020107:其他 |
经营者证件号码 | legal_cert_id | 变长20位String | 必须 | 经营者的证件号码,与证件类型对应 |
经营者证件起始日期 | legal_cert_start_date | 定长8 位String | 必须 | 经营者的证件起始日期,精确到年月日 |
经营者证件到期日期 | legal_cert_end_date | 定长8 位String | 必须 | 经营者的证件结束日期,精确到年月日,支持“永久” |
经营者手机号码 | legal_mobile | 定长11位String | 必须 | 法人的手机号码 |
个体工商户联系人姓名 | contact_name | 变长50位String | 必须 | 个体工商户联系人的姓名 |
联系人手机号 | contact_mobile | 定长11位String | 必须 | 联系人的手机号码 |
联系人邮箱 | contact_email | 变长40位的String | 必须 | 联系人的邮箱地址 |
职业 | occupation | 定长2位的String | 必须 | 见下面个人职业分类附表 |
住址 | address | 变长256位的String | 必须 | 填写经营者的住址 |
附件编号列表 | attach_nos | 变长210位String | 必须 | 商户文件上传接口(122)的附件编号列表,多个附件编号之间用逗号隔开,如:abc123或者abc123,abc1234,需要的文件类型(营业执照,法人身份证照片正反面,结算卡正反面)—附件最多十个 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
行业 | industry | 定长2位String | 必须 | 行业类别,具体见下方:行业类表 |
经营者国籍 | nationality | 变长128位的String | 必须 | 例如:中华人民共和国 |
行业类表(industry)
行业名称 | 编号 | 行业名称 | 编号 | 行业名称 | 编号 | ||
---|---|---|---|---|---|---|---|
酒店、餐饮类 | 01 | 信息传输、计算机服务业和软件业类 | 10 | 水利环境和公共设施管理类 | 19 | ||
旅游类 | 02 | 预售卡及虚拟物品销售类 | 11 | 政府类 | 20 | ||
艺术品交易/收藏类 | 03 | 租赁和商务服务业类 | 12 | 卫生、社会保障和社会福利类 | 21 | ||
娱乐类 | 04 | 慈善、基金会等非盈利组织 | 13 | 教育业 | 22 | ||
建筑业/房地产类 | 05 | 金融理财类 | 14 | 采矿业类 | 23 | ||
拍卖和典当类 | 06 | 外贸类 | 15 | 制造业类 | 24 | ||
废品收购类 | 07 | 货币服务 | 16 | 科学研究、技术服务和地质勘查业 | 25 | ||
居民服务、快递和其他服务类 | 08 | 林、渔、农、牧业类 | 17 | 其他 | 26 | ||
批发和零售类 | 09 | 交通运输,仓储类 | 18 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为124 |
应答返回码 | resp_code | 定长6位String | 必须 | 124000–调用成功,其他见附件四:返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述,中文为UTF-8字符集URLEncode编码后的字符串,商户应解码获取原文 |
个体工商户开户申请号 | apply_id | 变长20 的String | 必须 | 由商户提供,申请个体工商户开户的唯一标识 |
个体工商户用户客户号 | user_cust_id | 定长16位String | 可选 | |
订单号 | order_id | 定长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8 位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
商户唯一标识号 | mer_cust_id | 变长16位的String | 必须 | 由汇付生成,商户的唯一标识号 |
经营者姓名 | legal_name | 变长20位String | 必须 | 个体工商户的法人姓名 |
子账户号 | acct_id | 变长9位String | 可选 | 基本户-支付账户 |
审核状态 | audit_status | 定长2位String | 必须 | 00:通过 01:待修改 02:拒绝 04:待审核 |
审核描述 | audit_desc | 变长500位String | 可选 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 |
代码示例¶
java
String valueObj = "{
"version":"10",
"cmd_id":"124",
"mer_cust_id":"6666000000026086",
"operate_type":"00090000",
"apply_id":"138",
"order_id":"139",
"order_date":"20181107",
"user_name":"张三",
"business_code":"135",
"license_start_date":"20181107",
"license_end_date":"20181107",
"solo_business_address":"测试注册地址",
"solo_reg_address":"测试",
"solo_fixed_telephone":"156172514233",
"business_scope":"是啥",
"legal_name":"测试姓名",
"legal_cert_type":"01020100",
"legal_cert_id":"14010120040217509X",
"legal_cert_start_date":"20181107",
"legal_cert_end_date":"20181107",
"legal_mobile":"15625142312",
"contact_name":"方法",
"contact_mobile":"15641324132",
"contact_email":"6636@qq.com",
"occupation":"01",
"address":"测试地址",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"attach_nos": "test01,test02",
"mer_priv": "test_priv",
"extension": "test"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "124";
String merCustId = "6666000000026086";
String version = "10";
response.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = response.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();
返回码¶
返回码 | 返回描述 |
---|---|
124000 | 交易成功 |
124003 | 交易失败 |
124099 | 系统异常 |
124100 | 请求参数非法 |
124101 | 商户无此接口权限 |
124102 | 验证签名失败 |
124103 | 商户状态异常 |
124110 | 商户号不存在 |
124204 | 商户配置异常 |
124301 | 该用户已开户,身份证号已存在 |
124302 | 该用户已开户,手机号已存在 |
124303 | 该用户正在开户中,请勿重复申请 |
124304 | 个体工商户开户失败 |
124305 | 手续费收取失败 |
124306 | 个体工商户开户时,支付密码为必输 |
124307 | 个体工商户开户时,证件有效期为必输 |
124308 | 省份地区信息非法 |
124309 | 营业执照注册号已被使用 |
124310 | 该个体工商户已有正在处理的开户申请或已开户成功 |
124311 | 该个体工商户申请已完成开户 |
124312 | 该个体工商户开户申请正在审核中,不能修改 |
124313 | 该个体工商户开户申请审核拒绝,不能修改 |
122 商户文件上传接口¶
功能说明¶
给商户提供个体工商户开户、企业用户开户、代理商商户开户文件上传的功能。
注:此接口强烈建议用下方代码示例方式来写代码,避免不必要的麻烦。
目前支持的文件格式:rar,zip,png,jpg,jpeg,gif,bmp,pdf,doc,docx。
附件材料要求如下:
1、五证必须提供全,若三证合一,则只需要传三证合一的附件
2、上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的 有色公章 且证件均需在有效期内
3、“对公账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可
4、“对公账户信息”中必须显示对应银行的支行信息,并附有银行公章
5、上传资料内容与接口参数上的信息及要求一致
注:若个体工商户无公章,可上传 经营者有色指印+签名 的复印件。
调用方式:系统调用
请求地址:
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为 10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 122 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
附件编号 | attach_no | 变长20位的String | 必须 | 商户下唯一 |
业务类型 | trans_type | 定长2位String | 必须 | 01:代理商开户,02:生利宝开户 03:企业开户, 05:个体工商户开户, 06:批量代发, 19:活体验证 |
附件类型 | attach_type | 定长2位String | 必须 | 营业执照注册号:00 组织结构代码证:01 税务登记证号:02 法人证件:03 开户银行许可证:04 统一社会信用代码:05 开户电子协议:08 法人证件反面:09 经营照片:10 经营照片(地址照片):11 经营照片(门面照片):12 其他:99 经办人证件:15 活体验证照片:19 |
文件描述 | attach_desc | 变长80位String | 可选 | |
文件 | attach_file | File | 必须 | 传入的中文文件名称为 UTF-8 字符集 URLEncode 编码后的字符串 |
上传类型 | file_upload_type | 定长2位String | 可选 | 01:新增 说明(非必填。默认为新增,新增情况下,文件名重复报错) |
用户客户号 | user_cust_id | 定长16位String | 可选 | 业务类型为活体验证时必填 |
App名称 | app_name | 变长128位String | 可选 | 业务类型为活体验证时必填 |
是否活体验证 | live_verify | 定长2位String | 可选 | 业务类型为活体验证时必填,01:是,02:否 |
活体验证结果 | verify_result | 定长2位String | 可选 | 业务类型为活体验证时必填,01:通过,02:未通过 |
活体验证渠道 | verify_channel | 定长2位String | 可选 | 业务类型为活体验证时必填,01:realme,02:公安,03:其他 |
活体验证节点 | verify_node | 定长2位String | 可选 | 业务类型为活体验证时必填,01:注册,02:登录,03:绑卡,04:支付 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为 122 |
应答返回码 | resp_code | 定长6位的String | 必须 | 122000:交易成功, 122003:交易失败 122099:系统异常 |
应答描述 | resp_desc | 变长String | 必须 |
代码示例¶
java
import java.io.File;
import java.nio.charset.Charset;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import org.apache.commons.codec.binary.Base64;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huifu.saturn.cfca.CFCASignature;
import com.huifu.saturn.cfca.SignResult;
import com.huifu.saturn.cfca.VerifyResult;
/**
* Function : 文件上传测试
* Date : 2018年9月26日 下午4:45:53
*/
public class Demo122 {
public static void main(String[] args) {
// 地址可以询问对方运营
String testUrlFile = "http://mertest.chinapnr.com/npay/fileMerchantRequest";
String charset = "UTF-8";
// 加签用pfx文件,配置商户的Pfx文件名
String pfxFile = "D:/app/etc/product/888888-NEW.pfx";
// 加签用密码,配置商户的pwd
String pfxFilePwd = "123456";
// 文件可以询问对方运营
String cerFile = "D:/app/etc/product/CFCA_ACS_TEST_OCA31.cer";
// 商户客户号
String merCustId = "6666000000002619";
String cmdId = "122";
String version = "10";
// 拼装请求参数
String valueObj = "{\"version\":\"10\",\"cmd_id\":\"122\",\"mer_cust_id\":\"6666000000002619\",\"attach_no\":\"a2454422338\",\"trans_type\":\"01\",\"attach_type\":\"05\",\"extension\":\"1\"}";
// 进行base64转换
String base64RequestParams = Base64.encodeBase64String(valueObj.getBytes(Charset.forName("utf-8")));
// 加签
SignResult signResult = CFCASignature.signature(pfxFile, pfxFilePwd, base64RequestParams,
"utf-8");
if (!"000".equals(signResult.getCode())) {
System.out.println("加签错误");
return;
}
String checkValue = signResult.getSign();
//如果文件名称中有中文,请先使用URLEncoder.encode(filename, "UTF-8")对文件名编码
File newFile = new File("D:/app/a.jpg");
HttpRequest httpRequest = HttpRequest.post(testUrlFile).charset(charset);
HttpResponse httpResponse = httpRequest.contentType("multipart/form-data").form(
"cmd_id", cmdId,
"version", version,
"mer_cust_id", merCustId,
"check_value", checkValue,
"attach_file", newFile).send();
String body = httpResponse.bodyText();
// 响应解密 验签失败
JSONObject jsonObject = JSON.parseObject(body);
String sign = jsonObject.getString("check_value");
VerifyResult verifyResult = CFCASignature.verifyMerSign("100001", sign, charset,cerFile);
if (!"000".equals(verifyResult.getCode())) {
System.out.println("验签失败");
return;
}
String content = new String(verifyResult.getContent(), Charset.forName(charset));
String decrptyContent = new String(Base64.decodeBase64(content), Charset.forName(charset));
System.out.println(decrptyContent);
}
}
返回码¶
返回码 | 返回描述 |
---|---|
122000 | 交易成功 |
122003 | 交易失败 |
122099 | 系统异常 |
122100 | 请求参数非法 |
122101 | 商户无此接口权限 |
122102 | 验证签名失败 |
122103 | 商户状态异常 |
122107 | 消息类型与签名内容不一致 |
122108 | 商户客户号与签名内容不一致 |
122109 | 版本号与签名内容不一致 |
122110 | 商户号不存在 |
122310 | 附件编号不能重复 |
122311 | 上传文件不能为空 |
122312 | 上传失败,不支持该文件格式 |
122316 | 上传失败,文件大小超过限制 |
122322 | 文件名称有误 |
121 创建子账户接口¶
功能说明¶
调用该接口为商户/用户创建子账户
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位的String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为121 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 商户的唯一标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 用户的唯一标识; |
账户类型 | acct_type | 定长2位string | 可选 | 00:基本支付账户; 01:基本非支付账户; 02:手续费账户; 05:专用资金账户; 不填默认01; |
账户名称 | acct_name | 变长32位String | 可选 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为121 |
应答返回码 | resp_code | 定长6位String | 必须 | 121000—成功 , 其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位的String | 必须 | 用户的唯一标识; |
账户号 | acct_id | 变长9位String | 可选 |
代码示例¶
java
String valueObj = "{"version":"10","cmd_id":"121","mer_cust_id":"6666000000076596","user_cust_id":"6666000000076598","acct_type":"01","acct_name":"user非支付账户"}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "121";
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": "121",
"resp_code": "121000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "121",
"resp_code": "121099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
添加子账户(cmd_id=121) | |
121000 | 交易成功 |
121003 | 交易失败 |
121099 | 系统异常 |
121100 | 请求参数非法 |
121101 | 商户无此接口权限 |
121102 | 验证签名失败 |
121103 | 商户状态异常 |
121104 | 用户状态异常 |
121107 | 消息类型与签名内容不一致 |
121108 | 商户客户号与签名内容不一致 |
121109 | 版本号与签名内容不一致 |
121110 | 商户号不存在 |
121310 | 产品信息校验失败 |
121300 | 客户号不存在 |
121301 | 调用PA子账户开户失败 |
121302 | 子账户信息不存在 |
121303 | 调用PA子账户修改失败 |
121304 | 不允许创建该类型的子账户 |
121305 | 子账户数已超过最大限制 |
814 二级商户录入接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为814 |
订单日期 | order_date | 定长8位 String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位 String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
二级商户名 | sub_mer_cust_name | 变长50位String | 必须 | 二级商户名称 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出RECV_ORD_ID字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL中请不要包含特殊字符 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行Base64加密后再使用。 |
入参扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为814 |
应答返回码 | resp_code | 定长6位String | 必须 | 814000–调用成功,其他见返回码表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
二级商户号 | sub_mer_cust_id | 变长20位String | 可选 | 二级商户号, 20位内数字或字母的组合,录入成功(返回码:000)时必返 |
订单日期 | order_date | 定长8位 String | 必须 | 格式为YYYYMMDD,例如:20160307 |
订单号 | order_id | 变长20位 String | 必须 | 由商户生成,必须保证唯一,20位内数字或字母的组合 |
平台流水号 | platform_seq_id | 定长18位String | 可选 | 组成规则:8位本平台日期+ 10位系统流水号,录入成功(返回码:000)时必返 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行Base64加密后再使用. |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "814",
"mer_cust_id": "6666000000026086",
"order_date": "20180816",
"order_id": "2018081616035656",
"sub_mer_cust_name": "贸负",
"bg_ret_url": "http://192.168.0.70:8081/asharp/acceptbgret/virgo",
"mer_priv": "test_mer_priv",
"extension": "test_textension"
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "814";
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": "814",
"resp_code": "814000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
成功响应:
200
{
"cmd_id": "814",
"resp_code": "814099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
二级商户录入(cmd_id=814) | |
814000 | 交易成功 |
814099 | 系统异常 |
814100 | 请求参数非法 |
814101 | 商户无此接口权限 |
814202 | 交易订单号重复 |
814103 | 商户状态异常 |
814104 | 用户状态异常 |
814107 | 消息类型与签名内容不一致 |
814108 | 商户客户号与签名内容不一致 |
814109 | 版本号与签名内容不一致 |
814213 | 不支持二级商户号 |
814215 | 二级商户名已存在 |
814202 | 交易订单号重复 |
130 无卡收款绑卡短信接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为130 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
验卡类型 | card_verify_type | 定长2位String | 必须 | 快捷绑卡: 02 消费分期代扣绑卡: 03 非消费分期代扣绑卡: 04 |
开户银行代号 | bank_id | 变长8位String | 可选 | 具体见附件:开户银行代号 |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 2–准贷记卡 |
银行卡号 | card_no | 变长32位String | 必须 | 本次快捷绑卡待绑定的银行卡号 |
银行预留手机号 | card_ mobile | 变长11位String | 必须 | 本次快捷绑卡待绑定的银行卡,在银行开户时的预留手机号 |
卡姓名 | card_name | 变长120位String | 可选 | 当前绑定银行卡的开户名称 (只有快捷绑卡时才需要输入) |
卡证件号 | cert_id | 定长18位String | 可选 | 当前绑定银行卡的开户证件号 (只有快捷绑卡时才需要输入) |
银行卡开户省份 | card_prov | 定长4位String | 可选(可以为空默认为上海) | 本次快捷绑卡待绑定的银行卡开户省份 |
银行卡开户地区 | card_area | 定长4位String | 可选(可以为空默认为上海) | 本次快捷绑卡待绑定的银行卡开户地区 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
设备信息 | dev_info_json | 变长1024位的String | 必须 | 参见 设备静态信息 。 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为130 |
应答返回码 | resp_code | 定长6位String | 是 | 130000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 是 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
验卡类型 | card_verify_type | 定长8位String | 必须 | 快捷绑卡: 02 消费分期代扣绑卡: 03 非消费分期代扣绑卡: 04 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "130",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000027184",
"order_date": "20180328",
"order_id": "0020180365",
"card_verify_type": "02",
"bank_id": "01020000",
"dc_flag": "0",
"card_no": "6212261001039279143",
"card_mobile": "13666666691",
"card_name": "",
"cert_id": "",
"card_prov": "0031",
"card_area": "3100",
"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 = "130";
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": "130",
"resp_code": "130000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "130",
"resp_code": "130099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
130000 | 交易成功 |
130098 | 系统超时 |
130099 | 系统异常 |
130100 | 请求参数非法 |
130101 | 商户无此接口权限 |
130102 | 验证签名失败 |
130103 | 商户状态异常 |
130104 | 用户状态异常 |
130107 | 消息类型与签名内容不一致 |
130108 | 商户客户号与签名内容不一致 |
130109 | 版本号与签名内容不一致 |
130110 | 商户号不存在 |
130111 | 用户客户号不存在 |
130204 | 商户配置异常 |
130210 | 短信验证码发送过于频繁 |
130211 | 短信验证码发送失败 |
130300 | 当前商户不支持借记卡 |
130301 | 当前商户不支持贷记卡 |
130302 | 当前银行卡已绑过快捷卡 |
130303 | 银行卡信息与上次绑卡信息不一致,请解绑后再提交绑卡 |
130304 | 验证码发送失败 |
130305 | 验证码发送成功 |
130306 | 贷记卡类型时,贷记卡CVV2、贷记卡有效期必须输入 |
130307 | 非贷记卡类型时,贷记卡CVV2、贷记卡有效期不能输入 |
130308 | 只有个人用户和个体户能绑定快捷卡 |
130309 | 验证码发送中 |
131 无卡收款绑卡接口¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 目前固定为10 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为131 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
开户银行代号 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡 1–贷记,信用卡 2–准贷记卡 |
银行卡号 | card_no | 变长32位String | 必须 | 本次快捷绑卡待绑定的银行卡号 |
银行预留手机号 | card_mobile | 变长11位String | 必须 | 本次快捷绑卡待绑定的银行卡,在银行开户时的预留手机号 |
卡姓名 | card_name | 变长120位String | 可选 | 当前绑定银行卡的开户名称 |
卡证件号 | cert_id | 定长18位String | 可选 | 当前绑定银行卡的开户证件号 |
银行卡开户省份 | card_prov | 定长4位String | 必须 | 本次快捷绑卡待绑定的银行卡开户省份 |
银行卡开户地区 | card_area | 定长4位String | 必须 | 本次快捷绑卡待绑定的银行卡开户地区 |
短信验证码 | sms_code | 定长6位String | 必须 | |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
设备信息 | dev_info_json | 变长1024位的String | 必须 | 参见 设备静态信息 。 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为131 |
应答返回码 | resp_code | 定长6位String | 必须 | 131000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20160307 |
本平台交易唯一标识号 | platform_seq_id | 定长18位String | 必须 | 组成规则:8位本平台日期+ 10位系统流水号 |
开户银行代号 | bank_id | 变长8位String | 必须 | 具体见附件:开户银行代号 |
银行卡号 | card_no | 变长32位String | 必须 | 返回银行卡号掩码 |
绑定银行卡ID | bind_card_id | 变长20位String | 必须 | 本次快捷绑卡的ID |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
页面返回URL | ret_url | 变长128位的String | 可选 | 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上 |
商户私有域 | mer_priv | 变长120位的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回 |
扩展域 | extension | 变长512位的String | 可选 | 用于扩展请求参数 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "131",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000291215",
"order_id": "0020180368",
"order_date": "20180402",
"bank_id": "03134402",
"dc_flag": "0",
"card_no": "6230580000038076969",
"card_mobile": "13761708192",
"card_name": "",
"cert_id": "",
"card_prov": "0031",
"card_area": "3100",
"sms_code": "324402",
"bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"ret_url": "",
"mer_priv": "",
"extension": ""
}";
String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "131";
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": "131",
"resp_code": "131000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "131",
"resp_code": "131304",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
131000 | 交易成功 |
131002 | 请求已受理 |
131003 | 交易失败 |
131099 | 系统异常 |
131100 | 请求参数非法 |
131101 | 商户无此接口权限 |
131102 | 验证签名失败 |
131103 | 商户状态异常 |
131104 | 用户状态异常 |
131107 | 消息类型与签名内容不一致 |
131108 | 商户客户号与签名内容不一致 |
131109 | 版本号与签名内容不一致 |
131110 | 商户号不存在 |
131201 | 页面数据被篡改 |
131202 | 交易订单号重复 |
131204 | 商户配置异常 |
131205 | 短信验证码验证失败 |
131206 | 短信验证码发送手机号与验证手机号不一致 |
131207 | 短信验证码或短信唯一标识为空 |
131208 | 短信验证码已失效请重新获取 |
131209 | 验证码发送接口与接口不一致 |
131210 | 短信验证码发送过于频繁 |
131211 | 短信验证码发送失败 |
131303 | 银行卡号与银行不匹配 |
131305 | 只有个人用户和个体户能绑定快捷卡 |
131308 | 省份地区信息非法 |
131314 | 请获取验证码 |
131315 | 银行卡信息有更新,请重新获取验证码 |
131316 | 用户已绑定快捷卡,请勿重复申请 |
131317 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
131318 | 该银行卡号与卡类型不匹配 |
131320 | 该商户不支持绑定贷记卡 |
129 银行卡四要素验证¶
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为129。 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20200513 |
用户姓名 | card_name | 变长40位String | 必须 | 银行卡的开户户名 |
客户身份证号 | cert_id | 定长18位String | 必须 | 银行卡开户身份证号 |
手机号 | user_mobile | 定长11位String | 必须 | 银行卡开户备案手机号 |
银行卡号 | card_no | 变长32位String | 必须 | 验证的银行卡号 |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
同步/异步返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为129 |
应答返回码 | resp_code | 定长6位String | 必须 | 129000–调用成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 可选 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位String | 必须 | 格式为YYYYMMDD,例如:20200513 |
代码示例¶
java
String valueObj = "{
"version": "10",
"cmd_id": "129",
"mer_cust_id": "6666000000026086",
"user_cust_id": "6666000000291215",
"order_id": "0020180368",
"order_date": "20180402",
"card_name":"XXX",
"cert_id":"370102199503072253",
"user_mobile":"13678450973",
"card_no":"62128400123456786438",
"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 = "129";
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": "129",
"resp_code": "129000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应:
200
{
"cmd_id": "129",
"resp_code": "129003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
返回码¶
返回码 | 返回描述 |
129000 | 交易成功 |
129002 | 请求已受理 |
129003 | 交易失败 |
129099 | 系统异常 |
129100 | 请求参数非法 |
129101 | 商户无此接口权限 |
129102 | 验证签名失败 |
129103 | 商户状态异常 |
129104 | 用户状态异常 |
129107 | 消息类型与签名内容不一致 |
129108 | 商户客户号与签名内容不一致 |
129109 | 版本号与签名内容不一致 |
129110 | 商户号不存在 |
129201 | 页面数据被篡改 |
129202 | 交易订单号重复 |
129204 | 商户配置异常 |
129323 | 该卡号绑定次数超限制 |
129303 | 银行卡号与银行不匹配 |
129321 | 支付手续费未配置 |
129314 | 支付手续费账户状态不正常 |
129112 | 账号不存在 |
129212 | 账户余额查询失败 |
129225 | 手续费计算异常 |
129903 | 手续费余额不足 |
129325 | 银行卡与姓名或身份证不符 |