用户管理类接口¶
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 | 银行卡与姓名或身份证不符 |