用户管理类

个人用户开户 U01

功能说明

用于商户在企账通系统中为个人开通唯一的个人用户。如果开户成功返回唯一标识【用户客户号】。开户时会默认对个人做姓名+身份证号的实名认证。如果验证失败则开户失败。

调用方式:系统调用

校验逻辑

  • 姓名和身份证号进行实名认证。
  • 同一商户下同一身份号只能开立一个用户客户号。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U01
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
用户姓名 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 可选 用于扩展请求参数
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U01
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
手机号 user_mobile 定长11位String 必须 用户的手机号
商户后台应答地址 bg_ret_url 变长120位String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址结果。
商户私有域 mer_priv 变长128位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "U01");
map.put("mer_cust_id", "6666000000118348");
map.put("order_id", DateUtils.getCurrentDateTime());
map.put("order_date", "20180927");
map.put("user_name", "zhangfei");
map.put("cert_id", "310000198204093712");
map.put("user_mobile", "15155820021");
map.put("cust_prov", "0031");
map.put("cust_area", "3100");
map.put("bg_ret_url", "http://tech.chinapnr.com/hftest/page/test7943_3.jsp");
map.put("mer_priv", "");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U01"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U01",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "90000",
    "return_desc": "交易成功",
    "user_name": "zhangfei",
    "cert_id": "310000198204093712",
    "user_mobile": "15155820021",
    "cust_prov": "0031",
    "cust_area": "3100",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp"
    "extension": "extension",
    "mer_priv": "mer_priv"
}

失败响应示例

200
{
    "cmd_id": "U01",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "user_name": "zhangfei",
    "cert_id": "310000198204093712",
    "user_mobile": "15155820021",
    "cust_prov": "0031",
    "cust_area": "3100",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp"
    "extension": "extension",
    "mer_priv": "mer_priv"
}

企业用户开户 U02

功能说明

用于商户在企账通系统中为企业开通唯一的企业用户。如果开户成功返回唯一标识【用户客户号】。

调用方式:页面调用

校验逻辑

  • 接口会弹出页面用于上传企业开户所需的材料,企业开户需要上传:【统一信用代码】(或者【营业执照】、【组织机构证】、【税务证】)、【法人身份证正反面】、【开户许可证或一般户证明】。
  • 企业开户需要人工审核(T+1日完成审核),所以该接口同步返回【企业开户申请号】,审核成功后异步通知返回【企业用户客户号】。
  • 股东信息需按照工商网填写完整。
  • 对公账户银行凭证还需加盖商户有色公章。
  • 持股比例25%以上股东信息需填写名称、证件类型、证件号(个人股东填写身份证信息,企业股东填写营业执照信息)。

上传附件要求

  • 5 证必须提供全,若三证合一,则只需要传三证合一的附件。
  • 上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的有色公章且证件均需在有效期内。
  • “对公账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可。
  • “对公账户信息”中必须显示对应银行的支行信息,并附有银行公章。
  • 一般账户、基本账户的上传资料内容及要求一致。
  • 一旦审核失败,用相同的企业开户申请号,重新提交审核。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易, 此处为 U02
商户唯一标识号 mer_cust_id 定长16位String 必须 商户的唯一标识号
企业开户申请号 apply_id 变长18 位String 必须 申请企业开户的唯一标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8 位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
操作类型 operate_type 定长8位String 必须 00090000-新增; 00090001-修改。
企业证照类型 corp_license_type 定长8位String 必须 01030100-普通营业执照企业; 01030101-三证合一企业。
企业名称 corp_name 变长50位String 必须 企业的公司全称
营业执照注册号 business_code 变长30位String 可选 普通营业执照企业必填
组织机构代码 institution_code 定长9位String 可选 普通营业执照企业必填
税务登记证号 tax_code 变长30位String 可选 普通营业执照企业必填
统一社会信用 代码 social_credit_code 定长18位String 可选 三证合一企业必填, 普通营业执照企业不填
证照起始日期 license_start_date 定长8 位String 必须 企业的营业证照起始日期, 精确到年月日
证照结束日期 license_end_date 定长8 位String 必须 企业的营业证照结束日期, 精确到年月日,支持“永久”
企业经营地址 corp_business_address 变长250位String 必须 企业的经营地址
企业注册地址 corp_reg_address 变长250位String 必须 企业的注册地址
企业固定电话 corp_fixed_telephone 变长15位String 必须 企业的固定电话
经营范围 business_scope 变长1000位String 必须 企业的经营范围
控股股东 (实际控制人) controlling_shareholder 变长1000位String 必须 数据格式: [{“name”:”关羽”, “certType”:”01020100”, “certId”:”330204199008187881”}]
法人姓名 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 可选  
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息

控股股东(controlling_shareholder)

参数中文名称 参数名称 数据格式 是否必须 说明
姓名 name 变长20位String 必须  
证件类型 certType 定长8位String 必须 01020100:身份证; 01020101:护照; 01020102:军官证; 01020103:士兵证; 01020104:回乡证; 01020105:警官证; 01020106:台胞证; 01020107:其他。暂时只支持身份证。
证件号码 certId 变长20位String 必须 股东的证件号码,与证件类型对应

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U02
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
企业开户申请号 apply_id 变长20位 String 必须 由商户提供,申请企业开户的唯一标识
企业用户客户号 user_cust_id 定长16位String 可选  
订单号 order_id 定长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8 位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
商户唯一标识号 mer_cust_id 变长16位String 必须 由汇付生成,商户的唯一标识号
企业名称 corp_name 变长50位String 必须 企业的公司全称
提现绑定银行卡ID cash_bind_card_id 变长20位String 可选  
审核状态 audit_status 定长2位String 必须 00:通过; 01:待修改; 02:拒绝; 04:待审核。
审核描述 audit_desc 变长500位String 可选  
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
页面返回URL ret_url 变长128位String 可选 交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选  
子账户号 acct_id 变长9位String 可选 由汇付生成,用户的默认子账户号

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "U02");
map.put("mer_cust_id", "6666000000118348");
map.put("apply_id", "2018080800043652");
map.put("order_id", DateUtils.getCurrentDateTime());
map.put("order_date", "20180927");
map.put("operate_type", "00090000");
map.put("corp_license_type", "01030100");
map.put("business_code", "5842146232018178");
map.put("institution_code", "584214631");
map.put("tax_code", "2018170");
map.put("corp_type", "01030000");
map.put("corp_name", "corpname11");
map.put("license_start_date", "20160808");
map.put("license_end_date", "20200808");
map.put("corp_business_address", "businessaddress");
map.put("corp_reg_address", "regaddress");
map.put("corp_fixed_telephone", "021-68680001");
map.put("business_scope", "businessscope");
map.put("controlling_shareholder", "[{"name":"关羽", "certType":"01020100", "certId":"310000197804030104"}]");
map.put("legal_name", "legalname");
map.put("legal_cert_type", "01020100");
map.put("legal_cert_id", "310000197804030104");
map.put("legal_cert_start_date", "19990919");
map.put("legal_cert_end_date", "20190919");
map.put("legal_mobile", "14755824575");
map.put("contact_name", "contactname");
map.put("contact_mobile", "14755824575");
map.put("contact_email", "xingkui7.chen@huifu.com");
map.put("bank_acct_name", "corpname11");
map.put("bank_id", "01050000");
map.put("bank_acct_no", "6232510000001086");
map.put("bank_branch", "bankbranch");
map.put("bank_prov", "0031");
map.put("bank_area", "3100");
map.put("bg_ret_url", "http://172.31.19.92:8081/eacloud/bgResponse/corpRegAuditAsynNotice");
map.put("mer_priv", "");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U02"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "return_code": "90000",
    "return_desc": "交易成功",
    "cmd_id": "U02",
    "mer_cust_id": "6666000000118348",
    "apply_id": "2018080800043652",
    "order_id": DateUtils.getCurrentDateTime(,
    "order_date": "20180927",
    "operate_type": "00090000",
    "corp_license_type": "01030100",
    "business_code": "5842146232018178",
    "institution_code": "584214631",
    "tax_code": "2018170",
    "corp_type": "01030000",
    "corp_name": "corpname11",
    "license_start_date": "20160808",
    "license_end_date": "20200808",
    "corp_business_address": "businessaddress",
    "corp_reg_address": "regaddress",
    "corp_fixed_telephone": "021-68680001",
    "business_scope": "businessscope",
    "controlling_shareholder": "[{"name":"关羽", "certType":"01020100", "certId":"310000197804030104"}]",
    "legal_name": "legalname",
    "legal_cert_type": "01020100",
    "legal_cert_id": "310000197804030104",
    "legal_cert_start_date": "19990919",
    "legal_cert_end_date": "20190919",
    "legal_mobile": "14755824575",
    "contact_name": "contactname",
    "contact_mobile": "14755824575",
    "contact_email": "xingkui7.chen@huifu.com",
    "bank_acct_name": "corpname11",
    "bank_id": "01050000",
    "bank_acct_no": "6232510000001086",
    "bank_branch": "bankbranch",
    "bank_prov": "0031",
    "bank_area": "3100",
    "bg_ret_url": "http://172.31.19.92:8081/eacloud/bgResponse/corpRegAuditAsynNotice",
    "mer_priv": ""
}

失败响应示例

200
{
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "cmd_id": "U02",
    "mer_cust_id": "6666000000118348",
    "apply_id": "2018080800043652",
    "order_id": DateUtils.getCurrentDateTime(),
    "order_date": "20180927",
    "operate_type": "00090000",
    "corp_license_type": "01030100",
    "business_code": "5842146232018178",
    "institution_code": "584214631",
    "tax_code": "2018170",
    "corp_type": "01030000",
    "corp_name": "corpname11",
    "license_start_date": "20160808",
    "license_end_date": "20200808",
    "corp_business_address": "businessaddress",
    "corp_reg_address": "regaddress",
    "corp_fixed_telephone": "021-68680001",
    "business_scope": "businessscope",
    "controlling_shareholder": "[{"name":"关羽", "certType":"01020100", "certId":"310000197804030104"}]",
    "legal_name": "legalname",
    "legal_cert_type": "01020100",
    "legal_cert_id": "310000197804030104",
    "legal_cert_start_date": "19990919",
    "legal_cert_end_date": "20190919",
    "legal_mobile": "14755824575",
    "contact_name": "contactname",
    "contact_mobile": "14755824575",
    "contact_email": "xingkui7.chen@huifu.com",
    "bank_acct_name": "corpname11",
    "bank_id": "01050000",
    "bank_acct_no": "6232510000001086",
    "bank_branch": "bankbranch",
    "bank_prov": "0031",
    "bank_area": "3100",
    "bg_ret_url": "http://172.31.19.92:8081/eacloud/bgResponse/corpRegAuditAsynNotice",
    "mer_priv": ""
}

绑定提现卡 U04

功能说明

用于绑定取现银行卡,以便用于用户提现。

调用方式:系统调用

校验逻辑

  • 返回【银行卡绑定ID】作为唯一标志,后续用户银行卡解绑、用户提现等操作。
  • 一个用户只支持绑定一张取现卡。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U04
商户唯一标识号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户唯一标识号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
银行代号 bank_id 定长8位String 可选 对公:必填;对私:可选
银行卡号 card_no 变长32位String 必须  
借贷标记 dc_flag 定长1位String 必须 0:借记卡(固定)
银行卡开户省份 card_prov 定长4位String 必须  
银行卡开户地区 card_area 定长4位String 必须  
银行预留手机号 card_mobile 变长11位String 必须  
后台返回地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户绑卡结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U04
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户唯一标识号 mer_cust_id 定长16位 必须 由汇付生成,商户的唯一性标识
用户唯一标识号 user_cust_id 定长16位 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
银行代号 bank_id 定长8位String 必须 银行代号
银行卡号 card_no 变长32位String 必须 银行卡号掩码
银行卡绑定ID cash_bind_card_id 变长20位String 必须  
借贷标记 dc_flag 定长1位String 必须 0:借记卡; 1:贷记卡。
银行卡开户省份 card_prov 定长4位String 必须  
银行卡开户地区 card_area 定长4位String 必须  
后台返回地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户绑卡结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "U04");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000118473");
map.put("order_id", DateUtils.getCurrentDateTime());
map.put("order_date", "20181015");
map.put("bank_id", "01050000");
map.put("card_no", "6232510000001179");
map.put("card_mobile", "18904960178");
map.put("dc_flag", "0");
map.put("card_prov", "0031");
map.put("card_area", "3100");
map.put("bg_ret_url", "http://tech.chinapnr.com/hftest/page/test7943_3.jsp");
map.put("mer_priv", "");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U04"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U04",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "90000",
    "return_desc": "交易成功",
    "bank_id": "01050000",
    "card_no": "6232510000001179",
    " cash_bind_card_id": "62325",
    " card_mobile": "15155820021",
    "dc_flag": "0"
    "cust_prov": "0031",
    "cust_area": "3100",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp"
    "extension": "extension",
    "mer_priv": "mer_priv"
}

失败响应示例

200
{
    "cmd_id": "U04",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "bank_id": "01050000",
    "card_no": "6232510000001179",
    " cash_bind_card_id": "62325",
    " card_mobile": "15155820021",
    "dc_flag": "0"
    "cust_prov": "0031",
    "cust_area": "3100",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp"
    "extension": "extension",
    "mer_priv": "mer_priv"
}

银行卡解绑 U05

功能说明

用于解绑之前已绑定的提现卡、快捷卡。

调用方式:系统调用

校验逻辑

  • 通过绑卡ID来确定是解绑哪一张卡。
  • 区分已绑定卡是用于提现还是快捷业务,所以请正确填写【卡业务类型】。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本 version 固定2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 固定3位String 必须 每一种消息类型代表一种交易,此处为 U05
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
银行代码 bank_id 定长8位String 必须 具体见附件二:快捷支付支持银行列表
绑卡ID card_id 变长20位String 必须 绑卡ID
银行卡预留手机号 card_mobile 定长11位String 必须 银行卡预留手机号
卡业务类型 card_buss_type 固定1位String 必须 0:提现;2:快捷。
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户解绑结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U05
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 商户唯一标识,由汇付生成
用户客户号 user_cust_id 定长16位String 必须 用户唯一标识,由汇付生成
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
银行代码 bank_id 定长8位String 必须  
绑卡ID card_id 变长20位String 必须  
卡业务类型 card_buss_type 固定1位String 必须 0提现卡;2快捷卡;
银行卡预留手机号 card_mobile 定长11位String 必须 银行卡预留手机号
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户解绑结果 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U05");
map.put("mer_cust_id", "6666000000043642");
map.put("user_cust_id", "6666000000043951");
map.put("order_id", DateUtils.getCurrentDateTime());
map.put("order_date", "20180817");
map.put("bank_id", "01050000");
map.put("card_id", "1000002168");
map.put("card_mobile", "13156680129");
map.put("card_buss_type", "2");
map.put("bg_ret_url", "http://tech.chinapnr.com/hftest/page/test7943_3.jsp");
map.put("mer_priv", "");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U05"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U05",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "90000",
    "return_desc": "交易成功",
    "bank_id": "01050000",
    "card_id": "1000002168",
    "card_buss_type": "2",
    "card_mobile": "15155820021",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "extension": "extension",
    "mer_priv": "mer_priv"
}

失败响应示例

200
{
    "cmd_id": "U05",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "bank_id": "01050000",
    "card_id": "1000002168",
    "card_buss_type": "2",
    "card_mobile": "15155820021",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "extension": "extension",
    "mer_priv": "mer_priv"
}

创建子账户 U06

功能说明

用于创建用户支付账户或非支付账户。个人或企业用户开户之后仍需要调用【创建子账户】接口来创建虚拟账户。

调用方式:页面调用

校验逻辑

  • 支付账户指可以用于收款、支付(出款)以及提现的虚拟账户。
  • 非支付账户只能用于收款、提现的虚拟账户。
  • 企账通所有用户都支持开通不超过5个子账户,5个子账户包含支付账户和非支付账户。个人用户限制只创建一个支付账户,非支付账户数量不限。
  • 账户安全措施为短信验证或支付密码。如有特殊要求需要申请经汇付审核。账户安全措施为短信验证时,需先调用短信发送接口,将用户收到的短信验证码上送本接口短信验证码字段中,汇付会验证短信验证码正确性。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本 version 固定2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 固定3位String 必须 每一种消息类型代表一种交易,此处为 U06
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
账户类型 acct_type 定长3位String 必须 100:支付账户;200:非支付账户
短信验证码 sms_code 定长6位String 可选 当商户配置不使用汇付协议页面并且单独调了发短信接口则必填;使用汇付协议页面时可选
页面返回URL ret_url 变长128位String 可选 本平台把交易结果通过页面方式返回商户
商户后台应答地址 bg_ret_url 变长128位String 必须 本平台把交易结果通过后台异步通知商户 注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息
是否同意支付协议 is_agree_pay_protocol 定长1位String 可选 1-同意

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U06
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 原样返回
用户客户号 user_cust_id 定长16位String 必须 原样返回
订单日期 order_date 定长8位String 必须 原样返回
订单号 order_id 变长20位String 必须 原样返回
账户类型 acct_type 定长3位String 可选 原样返回
支付账户 acct_id 变长16位String 可选 用户开通的支付账户,开通成功则必填
支付账户等级 acct_level 定长2位String 可选 01:一类帐户;02:二类帐户;03:三类帐户
页面返回URL ret_url 变长128位String 可选 原样返回
商户后台应答地址 bg_ret_url 变长128位String 必须 原样返回
商户私有域 mer_priv 变长120位String 可选 原样返回
扩展域 extension 变长512位String 可选 原样返回

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "U06");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000136203");
map.put("order_id", DateUtils.getCurrentDateTime());
map.put("order_date", "20181018");
map.put("acct_type", "100");
map.put("acct_name", "支付账户");
map.put("confirm_flag", "Y");
map.put("sms_code", "");
map.put("ret_url", "");
map.put("bg_ret_url", "http://tech.chinapnr.com/hftest/page/test7943_3.jsp");
map.put("mer_priv", "mer_priv");
map.put("extension", "extension");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U06"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U06",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "90000",
    "return_desc": "交易成功",
    "acct_type", "100",
    "sms_code", "",
    "acct_id ": "15155",
    "acct_level": "01",
    "ret_url", "",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "extension": "extension",
    "mer_priv": "mer_priv"
}

失败响应示例

200
{
    "cmd_id": "U06",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000136008",
    "order_date": "20181018",
    "order_id": "20181018000001",
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "acct_type", "100",
    "sms_code", "",
    "acct_id ": "",
    "acct_level": "",
    "ret_url", "",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "extension": "extension",
    "mer_priv": "mer_priv"
}

短信发送 U07

功能说明

用于余额支付、提现和创建子账户场景时预先向指定手机号上发送短信验证码。

调用方式:系统调用

校验逻辑

  • 商户账户安全措施选择短信验证时,需要调用本接口先发送短信验证码。
  • 短信验证码的时效为10分钟,若过期,请重新生成订单号调用本接口。
  • 同一笔订单号的短信验证码验证失败总次数不得超过5次。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本 version 固定2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 固定3位String 必须 每一种消息类型代表一种交易,此处为 U07
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
业务类型 busi_type 定长3位String 必选 T11-余额支付; T07-提现; U06-创建子账户。
用户手机号 user_mobile 定长11位String 必须 必须与用户开户手机号保持一致
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 固定3位String 必须 每一种消息类型代表一种交易,此处为 U07
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
业务类型 busi_type 定长2位String 必选 T11-余额支付; T07-提现; U06-创建子账户。
用户手机号 user_mobile 定长11位String 必须 必须与用户开户手机号保持一致
商户私有域 mer_priv 变长120位String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位String 可选 用于扩展请求参数

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("version", "10");
map.put("cmd_id", "U07");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", "6666000000133631");
map.put("order_date", "20181019");
map.put("order_id", "20181019000001");
map.put("busi_type", "T07");
map.put("user_mobile", "17126027941");
map.put("mer_priv", "mer_priv");
map.put("extension", "extension");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", " U07"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "busi_type": "T07",
    "cmd_id": "U07",
    "extension": "extension",
    "mer_cust_id": "6666000000118348",
    "mer_priv": "mer_priv",
    "order_date": "20181019",
    "order_id": "20181019000001",
    "return_code": "90000",
    "return_desc": "交易成功",
    "user_cust_id": "6666000000133631",
    "user_mobile": "17126027941"
}

失败响应示例

200
{
    "busi_type": "T07",
    "cmd_id": "U07",
    "extension": "extension",
    "mer_cust_id": "6666000000118348",
    "mer_priv": "mer_priv",
    "order_date": "20181019",
    "order_id": "20181019000001",
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "user_cust_id": "6666000000133631",
    "user_mobile": "17126027941"
}

证件上传 U08

功能说明

用于上传身份证正反面照片进行实名认证。

调用方式:系统调用

校验逻辑

  • 开通【支付账户】时会对照片做认证。
  • 本接口上送身份证号必须为用户开户时身份证号保持一致。
  • 两张身份证照片大小加起来不超过1M。
  • 如果个人开通支付账户但没有上传证照,交易、提现可能会被风控拦截。如出现相关拦截提示请按要求上传证照。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 固定为10,如版本升级,能向前兼容
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U08
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为 YYYYMMDD
证件号 cert_id 定长18位String 必须  
证件姓名 cert_name 变长50位String 必须  
证件类型 cert_type 定长2位String 必须 证件类型:00-身份证
来源渠道 source_channel 定长1位String 必须 0-PC;1-ANDROID;2-IOS
后台返回地址 bg_ret_url 变长256位String 必须  
证件照1 file1 multipart-file 必须 身份证正面照
证件照2 file2 multipart-file 必须 身份证反面照

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U08
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 必须 由汇付生成,用户的唯一性标识
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
证件号 cert_id 定长18位String 必须  
证件姓名 cert_name 变长50位String 必须  
证件类型 cert_type 定长2位String 必须 证件类型:00-身份证
来源渠道 source_channel 定长1位String 必须 0-PC;1-ANDROID;2-IOS
后台返回地址 bg_ret_url 变长256位String 必须  
实名验证状态 check_stat 定长1位String 必须 S-验证通过; F-验证失败; P-验证中; I-未验证。

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>(16);
map.put("version", "10");
map.put("cmd_id", "U08");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", " 6666000000118473");
map.put("order_id", "201810180000001");
map.put("order_date", "20181018");
map.put("cert_type", " 00");
map.put("source_channel", "0");
map.put("cert_name", "姓名");
map.put("cert_id", " 310000197504183045");
map.put("bg_ret_url", "http://192.168.0.200:8008/hftest/common/commonResult.jsp");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
Map<String, Object> paramMap = new HashMap<>(16);
paramMap.put("mer_cust_id", "6666000000118348");
paramMap.put("cmd_id", "U08");
paramMap.put("version", "10");
paramMap.put("check_value", chkValue);
paramMap.put("file1", new File("\tmp\1.png"));
paramMap.put("file2", new File("\tmp\1.png"));
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
    if (entry.getValue() instanceof File) {
        multipartEntityBuilder.addBinaryBody(entry.getKey(), (File) entry.getValue());
    } else {
        multipartEntityBuilder.addTextBody(entry.getKey(), (String) entry.getValue());
    }
}
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(multipartEntityBuilder.build());
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "return_code": "90000",
    "return_desc": "交易成功",
    "cert_type":"00",
    "source_channel":"0",
    "cert_id":"310000197504183045",
    "check_stat":"S",
    "order_date":"20181018",
    "bg_ret_url":"http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "cert_name":"姓名",
    "user_cust_id":"6666000000118473",
    "order_id":"201810180000001",
    "cmd_id":"U08",
    "mer_cust_id":"6666000000118348"
}

失败响应示例

200
{
    "return_code": "10099",
    "return_desc": "交易处理失败",
    "error_code": "100001",
    "error_desc": "请求订单号重复",
    "cert_type":"00",
    "source_channel":"0",
    "cert_id":"310000197504183045",
    "check_stat":"F",
    "order_date":"20181018",
    "bg_ret_url":"http://192.168.0.200:8008/hftest/common/commonResult.jsp",
    "cert_name":"姓名",
    "user_cust_id":"6666000000118473",
    "order_id":"201810180000001",
    "cmd_id":"U08",
    "mer_cust_id":"6666000000118348"
}

个体工商户开户 U09

功能说明

用于个体工商户开户。

调用方式:系统调用

校验逻辑

  • 【操作类型】为新增时,【个体工商户开户申请号】必须唯一。
  • 【操作类型】为修改时,【个体工商户开户申请号】对应的前一次申请记录必须为待修改状态,即用这个申请号第一次发起开户申请的审核结果状态为待修改。
  • 【营业执照注册号】必须唯一,不能重复开户。
  • 【附件编号列表】为 商户文件上传 的【附件编号】字段,用英文逗号隔开且最多为10个。
  • 为保证审核通过率,建议附件上传的文件类型包含营业执照、法人身份证照片正反面、结算卡正反面信息。

上传附件要求

  • 五证必须提供全,若三证合一,则只需要传三证合一的附件。
  • 上传图片必须清晰,证件字体能清楚辨认,每张证件必须盖有注册企业的有色公章且证件均需在有效期内。
  • “对公账户信息”提供印鉴卡、银行流水单号、银行开户许可证、银行开户回执单,4项中任一即可。
  • “对公账户信息”中必须显示对应银行的支行信息,并附有银行公章。
  • 一般账户、基本账户的上传资料内容及要求一致。
  • 一旦审核失败,用相同的企业开户申请号,重新提交审核。
  • 注:若个体工商户无公章,可上传 经营者有色指印+签名 的复印件。

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U09
商户客户号 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 必须 商户文件上传的附件编号列表,多个附件编号之间用逗号隔开,如:abc123或者abc123,abc1234;附件最多十个
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
设备静态信息 dev_info 变长512位String 必须 参见 设备静态信息
是否同意支付协议 is_agree_pay_protocol 定长1位String 可选 1-同意。

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U09
返回码 return_code 定长6位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_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 必须 由汇付生成,商户的唯一标识号
经营者姓名 legal_name 变长20位String 必须 个体工商户的法人姓名
审核状态 audit_status 定长2位String 必须 00:通过 01:待修改 02:拒绝 04:待审核
审核描述 audit_desc 变长500位String 可选  
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
子账户号 acct_id 变长9位String 可选 由汇付生成,用户的默认子账户号

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U09");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("operate_type", " 00090000");
map.put("apply_id", "00001");
map.put("order_date", "20181121");
map.put("order_id", "201811210001");
map.put("user_name", "用户名");
map.put("business_code", " 10000000001");
map.put("license_start_date", "20180101");
map.put("license_end_date", "永久");
map.put("solo_business_address", "上海");
map.put("solo_reg_address", "上海");
map.put("solo_fixed_telephone", " 5931-59548");
map.put("business_scope", "经营范围");
map.put("legal_name", "经营者姓名");
map.put("legal_cert_type", " 01020100");
map.put("legal_cert_id", " 110101199003078873 ");
map.put("legal_cert_start_date", " 20180101");
map.put("legal_cert_end_date", "永久");
map.put("legal_mobile", " 13156680000");
map.put("contact_name", "联系人姓名");
map.put("contact_mobile", " 13156680000 ");
map.put("contact_email", " 13156680000@qq.com");
map.put("occupation", "01");
map.put("address", "地址");
map.put("attach_nos", " 201811203253883419");
map.put("bg_ret_url", " http://192.168.0.200:8008/hftest/common/commonResult.jsp");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U09"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "apply_id": "200903038295092",
    "audit_desc": "待审核",
    "audit_status": "00",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp",
    "cmd_id": "U09",
    "error_code": "",
    "error_desc": "",
    "legal_name": "经营者姓名",
    "mer_cust_id": "6666000000118348",
    "order_date": "20181121",
    "order_id": "201811210001",
    "return_code": "90000",
    "return_desc": "交易成功"
}

失败响应示例

200
{
    "apply_id": "200903038295092",
    "audit_desc": "审核拒绝",
    "audit_status": "02",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp",
    "cmd_id": "U09",
    "error_code": "100000",
    "error_desc": "交易成功",
    "legal_name": "经营者姓名",
    "mer_cust_id": "6666000000118348",
    "order_date": "20181121",
    "order_id": "201811210001",
    "return_code": "90000",
    "return_desc": "交易成功"
}

用户签约 U20

功能说明

提供一户一码用户签约

调用方式:系统调用

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U20
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
签约方式 user_sign_type 定长1 位String 必须 固定值1
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U20
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
扩展域 extension 变长512位String 可选  
商户客户号 mer_cust_id 定长16位String 必须 商户的唯一标识
商户私有域 mer_priv 变长120位String 可选 商户的自定义字段,该字段在交易完成后由本平台原样返回
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
签约方式 user_sign_type 定长1 位String 必须 1-线下
状态码 resp_code 变长8位String 必须 U20000–交易成功,其他见状态码表
状态描述 resp_desc 变长128位String 必须  
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U20");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", " 6666000000195772");
map.put("user_sign_type", "1");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U20"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U20",
    "error_code": "",
"errorDesc": "",
    "respCode": "U20000",
    "respDesc": "交易成功",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "user_sign_type": "1",
    "return_code": "90000",
    "return_desc": "交易成功"
}

失败响应示例

200
{
    "cmd_id": "U20",
    "error_code": "100300",
"errorDesc": "用户已签约",
    "respCode": "U20300",
    "respDesc": "用户已签约",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "user_sign_type": "1",
    "return_code": "10099",
    "return_desc": "交易处理失败"
}

用户入驻 U21

功能说明

用户完成一户一码签约成功后,调用企账通“用户入驻”接口,完成用户(企业用户或者个体工商户)在支付宝和微信的入驻。微信用户完成入驻后需进行实名认证,操作步骤详见附件 实名认证指引

调用方式:系统调用

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U21
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
支付通道 pay_way 定长1位String 必须 1支付宝,2微信
客服电话 customer_mobile 变长32位String 必须 客服电话(纯数字组成,座机不能带-)
经营类目 business_category 变长128位String 必须 微信:微信经营类目
支付宝:支付宝经营类目
用户简称 short_name 变长10位String 必须 用户简称,最多10个汉字
省份编码 prov_code 变长6位String 必须 入驻参数
城市编码 area_code 变长6位String 必须 入驻参数
区县编码 zip_code 变长6位String 必须 入驻参数
商户经营类型 business_oper_type 定长1位String 必须 1-实体;2-虚拟
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U21
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
扩展域 extension 变长512位String 可选  
商户客户号 mer_cust_id 定长16位String 必须 商户的唯一标识
商户私有域 mer_priv 变长120位String 可选 商户的自定义字段,该字段在交易完成后由本平台原样返回
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
状态码 resp_code 变长8位String 必须 U21000–交易成功,其他见状态码表
状态描述 resp_desc 变长128位String 必须  
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
支付通道 pay_way 定长1位String 必须 1支付宝,2微信
客服电话 customer_mobile 变长32位String 必须 客服电话(纯数字组成,座机不能带-)
经营类目 business_category 变长128位String 必须 微信:微信经营类目
支付宝:支付宝经营类目
用户简称 short_name 变长10位String 必须 用户简称,最多10个汉字
省份编码 prov_code 变长6位String 必须 入驻参数
城市编码 area_code 变长6位String 必须 入驻参数
区县编码 zip_code 变长6位String 必须 入驻参数
商户经营类型 business_oper_type 定长1位String 必须 1-实体;2-虚拟
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U21");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", " 6666000000195772");
map.put("order_date", "20190507");
map.put("order_id", "20190307134944310");
map.put("pay_way", "1");
map.put("customer_mobile", "13114982839");
map.put("business_category", "2016062900190124");
map.put("short_name", "test");
map.put("prov_code", "110000");
map.put("area_code", "110100");
map.put("zip_code", "110101");
map.put("business_oper_type", "2");
map.put("bg_ret_url", "http://192.168.0.200:8008/hftest/page/test7906_5.jsp");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U21"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U21",
    "error_code": "",
"errorDesc": "",
    "respCode": "U21000",
    "respDesc": "交易成功",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "90000",
    "return_desc": "交易成功",
    "order_date": "20190507",
    "order_id": "20190307134944310",
    "pay_way": "1",
    "customer_mobile": "13114982839",
    "business_category": "2016062900190124",
    "short_name": "test",
    "prov_code": "110000",
    "area_code": "110100",
    "zip_code": "110101",
    "business_oper_type": "2",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"

}

失败响应示例

200
{
    "cmd_id": "U21",
    "error_code": "100307",
"errorDesc": "商户渠道号未配置",
    "respCode": "U21307",
    "respDesc": "商户渠道号未配置",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "10099",
    "return_desc": "交易处理失败",
        "order_date": "20190507",
    "order_id": "20190307134944310",
    "pay_way": "1",
    "customer_mobile": "13114982839",
    "business_category": "2016062900190124",
    "short_name": "test",
    "prov_code": "110000",
    "area_code": "110100",
    "zip_code": "110101",
    "business_oper_type": "2",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"
}

用户入驻修改 U22

功能说明

用户“客服电话”和“用户简称”发生变更时,商户调用企账通“入驻修改”接口

调用方式:系统调用

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U22
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
支付通道 pay_way 定长1位String 必须 1支付宝,2微信
客服电话 customer_mobile 变长32位String 必须 客服电话(纯数字组成,座机不能带-)
用户简称 short_name 变长10位String 必须 用户简称,最多10个汉字
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U22
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
扩展域 extension 变长512位String 可选  
商户客户号 mer_cust_id 定长16位String 必须 商户的唯一标识
商户私有域 mer_priv 变长120位String 可选 商户的自定义字段,该字段在交易完成后由本平台原样返回
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
状态码 resp_code 变长8位String 必须 U22000–交易成功,其他见状态码表
状态描述 resp_desc 变长128位String 必须  
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
支付通道 pay_way 定长1位String 必须 1支付宝,2微信
客服电话 customer_mobile 变长32位String 必须 客服电话(纯数字组成,座机不能带-)
用户简称 short_name 变长10位String 必须 用户简称,最多10个汉字
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U22");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", " 6666000000195772");
map.put("order_date", "20190507");
map.put("order_id", "2019030713491110");
map.put("pay_way", "1");
map.put("customer_mobile", "13114982840");
map.put("short_name", "test");
map.put("bg_ret_url", "http://192.168.0.200:8008/hftest/page/test7906_5.jsp");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U22"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U22",
    "error_code": "",
"errorDesc": "",
    "respCode": "U22000",
    "respDesc": "交易成功",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "90000",
    "return_desc": "交易成功",
    "order_date": "20190507",
    "order_id": "2019030713491110",
    "pay_way": "1",
    "customer_mobile": "13114982840",
    "short_name": "test",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"

}

失败响应示例

200
{
    "cmd_id": "U22",
    "error_code": "100202",
"errorDesc": "交易订单号重复",
    "respCode": "U22202",
    "respDesc": "交易订单号重复",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "10099",
    "return_desc": "交易处理失败",
        "order_date": "20190507",
    "order_id": "2019030713491110",
    "pay_way": "1",
    "customer_mobile": "13114982840",
    "short_name": "test",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"
}

用户配置 U23

功能说明

商户为用户入驻微信配置绑定appid,配置授权目录,推荐关注公众号。公众号及小程序支付时需要调用此接口。最多支持配置5条记录(第6条覆盖第1条)。推荐公众号appid的主体需和绑定的公众号appid主体一致。小程序支付仅需配置appid。

调用方式:系统调用

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为U23
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
配置值 conf_value 变长1000位String 必须 格式如下:appid:wxxxxx,path:http://xxx.com, subscribeAppid:wxxxx分别是需要绑定的appid,需要配置的授权目录,推荐关注公众号中间用英文逗号分隔
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 每一种消息类型代表一种交易,此处为 U23
错误码 error_code 定长6位String 可选 参见 错误码
错误描述 error_desc 变长String 可选  
扩展域 extension 变长512位String 可选  
商户客户号 mer_cust_id 定长16位String 必须 商户的唯一标识
商户私有域 mer_priv 变长120位String 可选 商户的自定义字段,该字段在交易完成后由本平台原样返回
用户客户号 user_cust_id 定长16 位String 必须 由汇付生成,用户的唯一性标识
状态码 resp_code 变长8位String 必须 U23000–交易成功,其他见状态码表
状态描述 resp_desc 变长128位String 必须  
返回码 return_code 定长5位String 必须 参见 返回码
返回描述 return_desc 变长String 必须  
订单日期 order_date 定长8位String 必须 保证订单号和订单日期唯一,格式为YYYYMMDD
订单号 order_id 变长20位String 必须 保证订单号和订单日期唯一
商户后台应答地址 bg_ret_url 变长128位String 必须 通过后台异步通知商户结果,注意: 1) 使用时不要包含中文; 2) 必须是外网地址。
配置值 conf_value 变长1000位String 必须 格式如下:appid:wxxxxx,path:http://xxx.com, subscribeAppid:wxxxx分别是需要绑定的appid,
需要配置的授权目录,推荐关注公众号中间用英文逗号分隔

代码示例

JAVA

请求示例

// 测试环境请求地址
String requestUrl = "https://eacloud.testpnr.com/api/publicRequests";
Map<String, String> map = new HashMap<>();
map.put("cmd_id", "U23");
map.put("version", "10");
map.put("mer_cust_id", "6666000000118348");
map.put("user_cust_id", " 6666000000195772");
map.put("order_date", "20190507");
map.put("order_id", "2019030713491111");
map.put("conf_value", "appid:wxxxxx,path:http://xxx.com, subscribeAppid:wxxxx");
map.put("bg_ret_url", "http://192.168.0.200:8008/hftest/page/test7906_5.jsp");
// 将请求参数转换为json字符串
String jsonStr = JSON.toJSONString(map);
// 将json字符串使用CFCA加签
String chkValue = cfcaSEncrypt(jsonStr);
// 组装接口调用参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("mer_cust_id", "6666000000118348"));
nameValuePairs.add(new BasicNameValuePair("cmd_id", "U23"));
nameValuePairs.add(new BasicNameValuePair("version", "10"));
nameValuePairs.add(new BasicNameValuePair("check_value", chkValue));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
// 创建httpPost
HttpPost httpPost = new HttpPost(requestUrl);
httpPost.setEntity(uefEntity);
InputStreamReader isr;
BufferedReader br;
String line;
try {
    // 使用HttpClient发送请求
    CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
    isr = new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8);
    StringBuffer resultString = new StringBuffer();
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        resultString.append(line);
    }
    // 返回结果解签
    String resultJson = cfcaSDncrypt(resultString.toString());
} catch (Exception e) {
    // 处理异常
}

成功响应示例

200
{
    "cmd_id": "U23",
    "error_code": "",
"errorDesc": "",
    "respCode": "U23000",
    "respDesc": "交易成功",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "90000",
    "return_desc": "交易成功",
    "order_date": "20190507",
    "order_id": "2019030713491111",
    "conf_value": "appid:wxxxxx,path:http://xxx.com, subscribeAppid:wxxxx",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"

}

失败响应示例

200
{
    "cmd_id": "U23",
    "error_code": "100202",
"errorDesc": "交易订单号重复",
    "respCode": "U23202",
    "respDesc": "交易订单号重复",
    "mer_cust_id": "6666000000118348",
    "user_cust_id": "6666000000195772",
    "return_code": "10099",
    "return_desc": "交易处理失败",
        "order_date": "20190507",
    "order_id": "2019030713491111",
    "conf_value": "appid:wxxxxx,path:http://xxx.com, subscribeAppid:wxxxx",
    "bg_ret_url": "http://192.168.0.200:8008/hftest/page/test7906_5.jsp"
}