交易类¶
充值/支付¶
接口功能说明¶
接口功能说明:用于网银充值/支付,免注册网银支付、快捷支付和代扣支付
- 充值类型 recharge_type=02020000,个人网银充值
- 充值类型 recharge_type=02020001,企业网银充值
- 充值类型 recharge_type=02020002,快捷充值(仅支持个人用户)
- 充值类型 recharge_type=02020003,代扣充值(仅支持个人用户),此类充值 sign_seq_id 不能为空
- 充值类型 recharge_type=02020006,二段式快捷支付,阶段标识和业务请求流水不能为空
- 交易类型 trans_type=02020100,仅是充值到用户账户
- 交易类型 trans_type=02020101,包含支付功能,即充值到用户账户后再转账到另一账户,此类交易 in_cust_id 和 div_detail 不能为空
调用方式:
- 网银(包括个人与企业):页面调用
- 快捷/代扣:后台调用
应答方式:
- 网银(包括个人与企业):同步页面应答、异步应答
- 快捷/代扣:同步后台应答、异步应答
接口类型:
- 网银(包括个人与企业):同步+异步
- 快捷/代扣:异步
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 201 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识,交易类型为免注册网银支付时,非必传 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位 内数字或字母的组合 |
| 交易类型 | trans_type | 定长 8 位 String | 必须 | 02020100:充值; 02020101:支付; 02020102:免注册网银支付; 02020103:非消费金融代扣支付个人用户支持支付和免注册网银支付交易 |
| 充值类型 | recharge_type | 定长 8 位 String | 必须 | 02020000:个人网银; 02020001:企业网银; 02020002:快捷; 02020003:代扣; 02020006:二段式快捷,交易类型为免注册网银支付时,充值类型仅支持个人网银和企业网银 |
| 阶段标志 | step_flag | 定长 2 位 String | 可选 | 01:快捷支付请求; 02:快捷支付确认充值类型为二段式快捷时必填 |
| 业务请求流水 | biz_trans_id | 变长 20 位 String | 可选 | 标志一个二段式快捷请求,商户下判断唯一,只能是数字和字母充值类型为二段式快捷时必填 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 开户银行代号 | bank_id | 变长 8 位 String | 可选 | 个人/企业网银充值必传,快捷/代扣充值非必传,可为空 |
| 借贷标记 | dc_flag | 定长 1 位 String | 可选 | 个人/企业网银充值必传,快捷/代扣充值非必传,可为空 D–借记 C–贷记 |
| 短信验证码 | sms_code | 定长 6 位 String | 可选 | 与快捷绑卡时的银行预留手机号对应的短信验证码 |
| 短信验证码日期 | sms_order_date | 变长 8 位 String | 可选 | 快捷充值使用,与 sms_code 对应的验证码订单日期 |
| 短信验证码订单号 | sms_order_id | 变长 20 位 String | 可选 | 快捷充值使用,与 sms_code 对应的验证码订单号 |
| 代扣签约流水 | sign_seq_id | 变长 18 位 String | 可选 | 代扣签约订单唯一标识,代扣充值必传,其他充值不需传 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人,多条分账可不传 |
| 分账账户串 | div_detail | 变长 String | 可选 | 业务类型为支付时必传,分账账户必须是入账客户的账户,分账串使用 UTF-8 字符集 URLEncode 编码后传入数据格式:[{“in_cust_id”:”6666000000123456”,”div_acct_id”:”000001”,”div_amt”:”1.00”},{“in_cust_id”:”6666000000123457”,”div_acct_id”:”000002”,”div_amt”:”1.00”}]分账串金额之和需等于充值金额支持多条分账指令 |
| 分账入账客户号 | in_cust_id | 定长 16 位 String | 可选 | div_detail 参数下的二级参数分账入账客户号 |
| 分账账户号 | div_acct_id | 变长 9 位 String | 可选 | div_detail 参数下的二级参数分账账户号 |
| 分账金额 | div_amt | 变长 14 位 String | 可选 | div_detail 参数下的二级参数分账金额,保留两位小数 |
| 商户前台应答地址 | ret_url | 变长 128 位 String | 可选 | 网银充值/支付必传交易完成后,本平台系统把交易结果通过页面方式,发送到该地址上注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入;2)URL 中请不要包含特殊字符; 3) 必须是外网地址 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入;2 ) URL 中请不要包含特殊字符;3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”} 二级商户号由汇付生成,详见 二级商户录入接口 |
| 银行卡号 | card_no | 变长 32 位 String | 可选 | 代扣支付使用的卡号,不传时默认使用最新绑定的代扣卡 |
| 交易场景 | trans_scene | 定长 3 位 String | 可选 | 交易类型为免注册网银支付时,必传 001:投资理财; 002:实物买卖/租赁; 003:虚拟物品购买/购买服务;004:缴费; 005:还款; 006:账户充值 |
| 交易场景小类 | trans_scene_sub | 定长 6 位 String | 可选 | 交易类型为免注册网银支付时,必传 001001:定期 001002:活期 002001:数码及家用电器 002002:家具建材 002003:生活用品(含:服饰、美容、箱包、玩具、图书/音像、食品等)002004:珠宝/古玩/贵金属/邮币卡 002005:医药003001:游戏点卡003002:电话费003003:储值卡 003004:服务(含:旅游、美容、按摩、入场消费的美食团购等)004001:公共事业 004002:手机话费 004003:教育 004004:房屋租赁/物业费 005001:到期还款 005002:提前还款 005003:预期还款 005004:活期赎回 006001:其他 |
| 订单超时时间 | order_expire_time | Integer | 可选 | 单位:分钟 如果位空,则默认 4 个小时有效期;如果不为空,必须大于等于 60 分钟,小于等于 12*60 分钟,必须位整数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+user_cust_id+order_date+order_id+trans_type+recharge_type+step_flag+biz_trans_id+trans_amt+bank_id+dc_flag+sms_code+sms_order_date+sms_order_id+sign_seq_id+in_cust_id+div_detail+ret_url+bg_ret_url+mer_priv+extension+card_no+trans_scene+trans_scene_sub
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 变长 String | 必须 | 每一种消息类型代表一种交易,固定为 201 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 201000–调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识,交易类型为免注册网银支付时,非必传 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位 内数字或字母的组合 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位 本平台日期+10 位 系统流水号 |
| 业务类型 | trans_type | 定长 8 位 String | 必须 | 02020100:充值; 02020101:支付; 02020102:免注册支付个人用户仅支持支付交易 |
| 充值类型 | recharge_type | 定长 8 位 String | 必须 | 02020000:个人网银 02020001:企业网银 02020002:快捷 02020003:代扣 02020006:二段式快捷交易类型为免注册支付时,充值类型只支持个人网银和企业网银 |
| 阶段标志 | step_flag | 定长 2 位 String | 可选 | 01:快捷支付请求 02:快捷支付确认 |
| 业务请求流水 | biz_trans_id | 变长 20 位 String | 可选 | 标志一个二段式快捷请求,商户下判断唯一,只能是数字和字母 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 开户银行代号 | bank_id | 变长 8 位 String | 可选 | 个人/企业网银充值必传,快捷/代扣充值非必传,可为空 |
| 借贷标记 | dc_flag | 定长 1 位 String | 可选 | 个人/企业网银充值必传,快捷/代扣充值非必传,可为空 D–借记 C–贷记 |
| 短信验证码 | sms_code | 定长 6 位 String | 可选 | 与快捷绑卡时的银行预留手机号对应的短信验证码 |
| 短信验证码日期 | sms_order_date | 定长 8 位 String | 可选 | 快捷充值使用,与 sms_code 对应的验证码订单日期 |
| 短信验证码订单号 | sms_order_id | 变长 20 位 String | 可选 | 快捷充值使用,与 sms_code 对应的验证码订单号 |
| 代扣签约流水号 | sign_seq_id | 变长 18 位 String | 可选 | 代扣签约订单唯一标识,代扣充值必传,其他充值不需传 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 可选 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
| 分账账户串 | div_detail | 变长 String | 可选 | 业务类型为支付时必传,分账账户必须是入账客户的账户数据格式:[{“div_acct_id”:”000001”,”div_amt”:”1.00”},{“div_acct_id”:”000002”,”div_amt”:”2.00”}] 分账串金额之和需等于充值金额支持多条分账指令 |
| 分账账户号 | div_acct_id | 变长 9 位 String | 可选 | div_detai 参数下的二级参数分账账户号 |
| 分账金额 | div_amt | 变长 14 位 String | 可选 | div_detai 参数下的二级参数分账金额,保留两位小数 |
| 手续费金额 | fee_amt | 变长 14 位 String | 可选 | 手续费金额,格式为 ###.00 |
| 手续费扣款客户号 | fee_cust_id | 定长 16 位 String | 可选 | 手续费扣款客户号 |
| 手续费子账户号 | fee_acct_id | 变长 9 位 String | 可选 | 手续费扣款子账户号 |
| 商户前台应答地址 | ret_url | 变长 128 位 String | 可选 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文。 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文。 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值。 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+user_cust_id+order_date+order_id+platform_seq_id+trans_type+recharge_type+step_flag+biz_trans_id+trans_amt+bank_id+dc_flag+sms_code+sms_order_date+sms_order_id+sign_seq_id+in_cust_id+div_detail+fee_amt+fee_cust_id+fee_acct_id+ret_url+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "201"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "201",
"resp_code": "201000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "201",
"resp_code": "201003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 201000 | 交易成功 |
| 201002 | 请求已受理 |
| 201003 | 交易失败 |
| 201099 | 系统异常 |
| 201100 | 请求参数非法 |
| 201101 | 商户无此接口权限 |
| 201102 | 验证签名失败 |
| 201103 | 商户状态异常 |
| 201104 | 用户状态异常 |
| 201105 | 账户状态异常 |
| 201106 | 商户签名未配置 |
| 201202 | 交易订单号重复 |
| 201204 | 商户配置异常 |
| 201205 | 短信验证码验证失败 |
| 201206 | 短信验证码发送手机号与验证手机号不一致 |
| 201207 | 短信验证码或短信唯一标识为空 |
| 201208 | 短信验证码已失效请重新获取 |
| 201209 | 验证码发送接口与接口不一致 |
| 201300 | 不支持此充值银行 |
| 201301 | 该充值银行网关不存在 |
| 201302 | 不支持此充值类型 |
| 201303 | 商户充值基础信息未配置 |
| 201304 | 不支持此业务类型 |
| 201305 | 入账客户信息不正确 |
| 201306 | 入账分账串信息不正确 |
| 201307 | 该用户未绑定快捷卡 |
| 201308 | 该用户未绑定代扣卡 |
| 201309 | 该用户代扣协议不存在或状态异常 |
| 201310 | 企业用户或商户不支持快捷充值 |
| 201311 | 企业用户或商户不支持代扣充值 |
| 201312 | 手续费金额不得大于等于交易金额 |
| 201313 | 该充值银行与用户快捷卡不匹配 |
| 201314 | 充值手续费账户状态不正常 |
| 201315 | 个人用户仅支持个人网银充值 |
| 201316 | 支付失败 |
| 201501 | 交易失败(包含未知错误码) |
| 201502 | 系统未开放或暂时关闭,请稍后再试 |
| 201503 | 交易通讯超时,请发起查询交易 |
| 201510 | 订单信息为空 |
| 201511 | 订单信息有误 |
| 201512 | 重复交易 |
| 201519 | 订单系统错误 |
| 201523 | 卡信息为空 |
| 201524 | 卡信息有误 |
| 201525 | 卡系统错误 |
| 201526 | 卡系统错误 |
| 201530 | 业务系统信息为空 |
| 201531 | 业务系统信息有误 |
| 201532 | 业务系统错误 |
| 201533 | 金额超限 |
| 201534 | 查无此交易 |
| 201536 | 与原交易信息不符 |
| 201538 | 风险受限 |
| 201542 | 扣款成功但交易超过规定支付时间 |
| 201560 | 交易失败,请联系发卡银行 |
| 201562 | 交易失败,发卡银行不支持该商户,请更换其他银行卡 |
| 201563 | 卡状态不正确 |
| 201564 | 银行卡余额不足 |
| 201565 | 输入的密码、有效期或 CVN2 有误,交易失败 |
| 201567 | 密码输入次数超限 |
| 201568 | 您的银行卡暂不支持该业务 |
| 201580 | 银行卡状态异常 |
| 201581 | 支付失败,请稍后再试 |
| 201583 | 金额超限次数超过限制,请稍后再试! |
| 201584 | 单笔金额超限 |
| 201585 | 单日金额超限 |
| 201586 | 单月金额超限 |
| 201587 | 订单信息重复 |
| 201588 | 支付订单信息有误 |
| 201590 | 交易失败,参数不合法 |
| 201591 | 系统异常 |
| 201592 | 银行系统繁忙,请稍后再试 |
| 201593 | 系统超时 |
| 201594 | 银行处理中,请稍后再试 |
| 201599 | 系统异常 |
| 2015F0 | 渠道交易失败 |
| 2015F2 | 交易失败,未添加白名单 |
| 2015F6 | 交易失败,此卡未签约 |
| 2015P0 | 交易挂起,需要确认 |
| 201800 | 风控信息验证失败 |
| 201801 | 商户接口调用风控受限 |
| 201802 | 用户接口调用风控受限 |
| 201803 | 二级商户接口调用风控受限 |
快捷支付¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 206 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,商户的唯一性标识条件可选:如用户已经开户,可选填该参数,如填写,接口会以该参数来辨识用户,不再匹配客户用户名和身份证号的正确性,但依然会校验参数格式;如不填写,接口会以客户用户名及身份证号匹配客户;如果用户未开户,请不填该参数 |
| 客户用户名 | user_name | 变长 50 位 String | 可选 | 用户的真实姓名条件可选,条件参考用户客户号描述 |
| 身份证号 | cert_id | 定长 18 位 String | 可选 | 用户身份证号,目前仅支持身份证条件可选,条件参考用户客户号描述 |
| 银行预留手机号 | card_mobile | 变长 11 位 String | 必须 | 本次快捷绑卡待绑定的银行卡,在银行开户时的预留手机号,变长 11 位数字 |
| 开户银行代号 | bank_id | 变长 8 位 String | 必须 | 具体见附件:代扣充值支持银行列表 |
| 银行卡号 | card_no | 变长 32 位 String | 必须 | 待绑定的银行卡号 |
| 借贷标记 | dc_flag | 定长 1 位 String | 必须 | D—借记,储蓄卡 C—贷记,信用卡 |
| 贷记卡CVV2 | cvv2 | 定长 3 位 String | 可选 | 当 dc_flag 为 C 时,必传 cvv2 |
| 贷记卡有效期 | valid_date | 定长 4 位 String | 可选 | 当 dc_flag 为 C 时,必传 cvv2 |
| 银行卡开户省份 | card_prov | 定长 4 位 String | 可选 | 银行卡开户省份 |
| 银行卡开户地区 | card_area | 定长 4 位 String | 可选 | 银行卡开户地区 |
| 阶段标志 | step_flag | 定长 2 位 String | 必须 | 01:验卡阶段;02:验证短信阶段 |
| 业务请求流水 | biz_trans_id | 变长 20 位 String | 必须 | 标志一个快捷支付请求,商户下判断唯一,只能是数字和字母 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 必须 | 入账客户号不能是充值客户本人 |
| 分账账户串 | div_detail | 变长 String | 必须 | 分账账户必须是入账客户的账户,分账串使用 UTF-8 字符集 URLEncode 编码后传入数据格式:[{“div_acct_id”:”000001”,”div_amt”:”1.00”},{“div_acct_id”:”000002”,”div_amt”:”2.00”}]分账串金额之和需等于充值金额支持多条分账指令 |
| 分账账户号 | div_acct_id | 变长 9 位 String | 可选 | div_detail 参数下的二级参数分账账户号 |
| 分账金额 | div_amt | 变长 14 位 String | 可选 | div_detail 参数下的二级参数分账金额,保留两位小数 |
| 短信验证码 | sms_code | 定长 6 位 String | 可选 | 银行预留手机号对应的短信验证码,调用接口验卡阶段获取,调用接口验证短信阶段此参数必填 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 的String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 的String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 订单超时时间 | order_expire_time | Integer | 可选 | 单位:分钟 如果位空,则默认 4 个小时有效期;如果不为空,必须大于等于 60 分钟,小于等于 12*60 分钟,必须位整数 |
| 扩展域 | extension | 变长 512 位 的String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”} 二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 的String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+order_date+order_id+user_cust_id+cert_id+card_mobile+bank_id+card_no+dc_flag+cvv2+valid_date+card_prov+card_area+step_flag+biz_trans_id+trans_amt+in_cust_id+div_detail+sms_code+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 206 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 206000– 调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识,成功时必返 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 用户账户号 | acct_id | 变长 8 位 String | 可选 | 用户账户号新开户且成功时必返 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户的系统生成,订单号和订单日期保证唯一 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位 本平台日期 +10 位系统流水号 |
| 验卡手续费金额 | verify_fee_amt | 变长 14 位 String | 可选 | 验卡手续费金额,格式为###.00 |
| 验卡手续费子账户号 | verify_fee_acct_id | 变长 9 位 String | 可选 | 验卡手续费扣款子账户号 |
| 支付手续费金额 | pay_fee_amt | 变长 14 位 String | 可选 | 支付手续费金额,格式为###.00 |
| 支付手续费子账户号 | pay_fee_acct_id | 变长 9 位 String | 可选 | 支付验卡手续费扣款子账户号 |
| 商户私有域 | mer_priv | 变长 120 位 的String | 可选 | 为商户的自定义字段 |
| 签名 | check_value | 变长 256 位 的String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+user_cust_id+trans_amt+acct_id+order_date+order_id+platform_seq_id+verify_fee_amt+verify_fee_acct_id+pay_fee_amt+pay_fee_acct_id+mer_priv
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "206"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "206",
"resp_code": "206000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "206",
"resp_code": "206003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 206000 | 交易成功 |
| 206002 | 请求已受理 |
| 206003 | 交易失败 |
| 206099 | 系统异常 |
| 206100 | 请求参数非法 |
| 206101 | 商户无此接口权限 |
| 206102 | 验证签名失败 |
| 206103 | 商户状态异常 |
| 206104 | 用户状态异常 |
| 206105 | 账户状态异常 |
| 206106 | 商户签名未配置 |
| 206202 | 交易订单号重复 |
| 206203 | 账户可用余额不足 |
| 206204 | 商户配置异常 |
| 206205 | 短信验证码验证失败 |
| 206206 | 短信验证码发送手机号与验证手机号不一致 |
| 206207 | 短信验证码或短信唯一标识为空 |
| 206208 | 短信验证码已失效请重新获取 |
| 206209 | 验证码发送接口与接口不一致 |
| 206210 | 短信验证码发送过于频繁 |
| 206211 | 短信验证码发送失败 |
| 206431 | 不支持绑定该银行的银行卡 |
| 206432 | 用户已绑定快捷卡,不能再绑定取现卡 |
| 206433 | 银行卡号与银行不匹配 |
| 206434 | 该银行卡非借记卡 |
| 206435 | 企业用户/商户不支持快捷绑卡 |
| 206436 | 用户已绑定快捷或代扣卡,请勿重复申请 |
| 206437 | 用户有快捷卡正在绑定中,请勿重复绑卡 |
| 206438 | 省份地区信息非法 |
| 20643F | 手机号与已绑定卡记录不匹配 |
| 206443 | 手机号已注册 |
| 206448 | 银行账号无效或不存在 |
| 206449 | 持卡人身份信息或手机号验证不符 |
| 20644A | 卡号长度有误 |
| 20644B | 验证超时 |
| 20644C | 账号应为活期账号 |
| 20644D | 您的银行卡暂不支持该业务,请更换其他银行卡或咨询发卡银行 |
| 20644E | 绑卡请求流水已存在 |
| 206501 | 交易失败(包含未知错误码) |
| 206502 | 系统未开放或暂时关闭,请稍后再试 |
| 206503 | 交易通讯超时,请发起查询交易 |
| 206505 | 重复签约 |
| 206512 | 重复交易 |
| 206519 | 订单系统错误 |
| 206520 | 持卡人信息为空 |
| 206521 | 持卡人信息有误 |
| 206522 | 持卡人系统错误 |
| 206523 | 卡信息为空 |
| 206524 | 卡信息有误 |
| 206525 | 卡系统错误 |
| 206526 | 卡系统错误 |
| 206535 | 网关不支持签约交易 |
| 206538 | 风险受限 |
| 206560 | 交易失败,请联系发卡银行 |
| 206561 | 对不起,您所输的银行卡号有误,请核实后再试! |
| 206562 | 交易失败,发卡银行不支持该商户,请更换其他银行卡 |
| 206563 | 卡状态不正确 |
| 206565 | 输入的密码、有效期或 CVN2 有误,交易失败 |
| 206566 | 持卡人身份信息或手机号输入不正确,验证失败 |
| 206568 | 您的银行卡暂不支持该业务 |
| 206571 | 对不起,您所输的验证码有误,请核实后再试! |
| 206572 | 签约失败,您尚未在银行柜面或网银页面签约此业务,请去柜面或网银开通,或者拨打发卡行热线电话 |
| 206573 | 对不起,您所输的用户名有误,请核实后再试! |
| 206574 | 对不起,您的证件类型有误,请核实后再试! |
| 206575 | 对不起,您所输的证件号码有误,请核实后再试! |
| 206576 | 对不起,您所输的手机号码有误,请核实后再试! |
| 206577 | 验证码发送失败 |
| 206578 | 验证码超限或超时 |
| 206579 | 对不起,您的用户信息未通过银行验证,请核实后再试! |
| 206580 | 银行卡状态异常 |
| 206590 | 交易失败,参数不合法 |
| 206591 | 系统异常 |
| 206592 | 银行系统繁忙,请稍后再试 |
| 206593 | 系统超时 |
| 206594 | 银行处理中,请稍后再试 |
| 206599 | 系统异常 |
| 2065F0 | 渠道交易失败 |
| 2065F2 | 交易失败,未添加白名单 |
| 2065F3 | 签约失败,请稍后再试 |
| 2065P0 | 交易挂起,需要确认 |
| 206510 | 订单信息为空 |
| 206511 | 订单信息有误 |
| 206530 | 业务系统信息为空 |
| 206531 | 业务系统信息有误 |
| 206532 | 业务系统错误 |
| 206533 | 金额超限 |
| 206534 | 查无此交易 |
| 206536 | 与原交易信息不符 |
| 206542 | 扣款成功但交易超过规定支付时间 |
| 206564 | 银行卡余额不足 |
| 206567 | 密码输入次数超限 |
| 206581 | 支付失败,请稍后再试 |
| 206583 | 金额超限次数超过限制,请稍后再试! |
| 206584 | 单笔金额超限 |
| 206585 | 单日金额超限 |
| 206586 | 单月金额超限 |
| 206587 | 订单信息重复 |
| 206588 | 支付订单信息有误 |
| 2015F6 | 交易失败,此卡未签约 |
| 206630 | 不支持此充值银行 |
| 206631 | 该充值银行网关不存在 |
| 206632 | 不支持此充值类型 |
| 206633 | 商户充值基础信息未配置 |
| 206634 | 不支持此业务类型 |
| 206635 | 入账客户信息不正确 |
| 206636 | 入账分账串信息不正确 |
| 206637 | 该用户未绑定快捷卡 |
| 206638 | 该用户未绑定代扣卡 |
| 206639 | 该用户代扣协议不存在或状态异常 |
| 20663A | 企业用户或商户不支持快捷充值 |
| 20663B | 企业用户或商户不支持代扣充值 |
| 20663C | 手续费金额不得大于等于交易金额 |
| 20663D | 该充值银行与用户快捷卡不匹配 |
| 20663E | 充值手续费账户状态不正常 |
| 20663F | 个人用户仅支持个人网银充值 |
| 206640 | 支付失败 |
| 206800 | 风控信息验证失败 |
| 206801 | 商户接口调用风控受限 |
| 206802 | 用户接口调用风控受限 |
| 206803 | 二级商户接口调用风控受限 |
直接代扣¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 207 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 付款方姓名 | user_name | 变长 50 位 String | 必须 | 用户的真实姓名,中文应使用 UTF-8 字符集 URLEncode 编码后传入 |
| 付款方证件类型 | cert_type | 定长 8 位 String | 必须 | 01020100:身份证; 01020101:护照; 01020102:军官证; 01020104:回乡证; 01020106:台胞证; 01020107:其他目前仅支持身份证 |
| 付款方证件号 | cert_id | 变长 20 位 String | 必须 | 付款方证件号码,与证件类型对应 |
| 付款方银行预留手机号 | card_mobile | 变长 11 位 String | 必须 | 付款方银行预留手机号,变长 11 位数字 |
| 付款方银行卡号 | card_no | 变长 32 位 String | 必须 | 付款方银行卡号,变长 32 位数字 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 银行账户类型 | card_type | 定长 8 位 String | 必须 | 01050001:对公账户; 01050000:对私账户目前仅支持对私 |
| 入款方账户号 | in_cust_acct_id | 变长 9 位 String | 必须 | 入款方账户号 |
| 入款方用户号 | in_cust_id | 定长 16 位 String | 必须 | 入款方客户号不能是出款方客户号 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符串 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 订单超时时间 | order_expire_time | Integer | 可选 | 单位:分钟 如果位空,则默认 4 个小时有效期;如果不为空,必须大于等于 60 分钟,小于等于 12*60 分钟,必须位整数 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”}二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+order_date+order_id+cert_type+cert_id+card_mobile+card_no+trans_amt+cardType+in_cust_acct_id+in_cust_id+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 207 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 207000–调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 手续费金额 | fee_amt | 变长 14 位 String | 可选 | 手续费金额,格式为###.00 |
| 手续费扣款客户号 | fee_cust_id | 定长 16 位 String | 可选 | 手续费扣款客户号 |
| 手续费子账户号 | fee_acct_id | 变长 9 位 String | 可选 | 手续费扣款子账户号 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+order_date+order_id+platform_seq_id+fee_amt+fee_cust_id+fee_acct_id+mer_priv
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "207"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "207",
"resp_code": "207000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "207",
"resp_code": "207003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 207000 | 交易成功 |
| 207002 | 请求已受理 |
| 207003 | 交易失败 |
| 207099 | 系统异常 |
| 207100 | 请求参数非法 |
| 207101 | 商户无此接口权限 |
| 207102 | 验证签名失败 |
| 207103 | 商户状态异常 |
| 207104 | 用户状态异常 |
| 207105 | 账户状态异常 |
| 207106 | 商户签名未配置 |
| 207202 | 交易订单号重复 |
| 207203 | 账户可用余额不足 |
| 207204 | 商户配置异常 |
| 207433 | 银行卡号与银行不匹配 |
| 207434 | 该银行卡非借记卡 |
| 207438 | 省份地区信息非法 |
| 20743F | 手机号与已绑定卡记录不匹配 |
| 207443 | 手机号已注册 |
| 207448 | 银行账号无效或不存在 |
| 207449 | 持卡人身份信息或手机号验证不符 |
| 20744A | 卡号长度有误 |
| 20744B | 验证超时 |
| 20744C | 账号应为活期账号 |
| 20744D | 您的银行卡暂不支持该业务,请更换其他银行卡或咨询发卡银行 |
| 20744E | 绑卡请求流水已存在 |
| 207501 | 交易失败(包含未知错误码) |
| 207502 | 系统未开放或暂时关闭,请稍后再试 |
| 207503 | 交易通讯超时,请发起查询交易 |
| 207505 | 重复签约 |
| 207512 | 重复交易 |
| 207519 | 订单系统错误 |
| 207520 | 持卡人信息为空 |
| 207521 | 持卡人信息有误 |
| 207522 | 持卡人系统错误 |
| 207523 | 卡信息为空 |
| 207524 | 卡信息有误 |
| 207525 | 卡系统错误 |
| 207526 | 卡系统错误 |
| 207535 | 网关不支持签约交易 |
| 207538 | 风险受限 |
| 207560 | 交易失败,请联系发卡银行 |
| 207561 | 对不起,您所输的银行卡号有误,请核实后再试! |
| 207562 | 交易失败,发卡银行不支持该商户,请更换其他银行卡 |
| 207563 | 卡状态不正确 |
| 207565 | 输入的密码、有效期或 CVN2 有误,交易失败 |
| 207566 | 持卡人身份信息或手机号输入不正确,验证失败 |
| 207568 | 您的银行卡暂不支持该业务 |
| 207571 | 对不起,您所输的验证码有误,请核实后再试! |
| 207572 | 签约失败,您尚未在银行柜面或网银页面签约此业务,请去柜面或网银开通,或者拨打发卡行热线电话 |
| 207573 | 对不起,您所输的用户名有误,请核实后再试! |
| 207574 | 对不起,您的证件类型有误,请核实后再试! |
| 207575 | 对不起,您所输的证件号码有误,请核实后再试! |
| 207576 | 对不起,您所输的手机号码有误,请核实后再试! |
| 207577 | 验证码发送失败 |
| 207578 | 验证码超限或超时 |
| 207579 | 对不起,您的用户信息未通过银行验证,请核实后再试! |
| 207580 | 银行卡状态异常 |
| 207590 | 交易失败,参数不合法 |
| 207591 | 系统异常 |
| 207592 | 银行系统繁忙,请稍后再试 |
| 207593 | 系统超时 |
| 207594 | 银行处理中,请稍后再试 |
| 207599 | 系统异常 |
| 2075F0 | 渠道交易失败 |
| 2075F2 | 交易失败,未添加白名单 |
| 2075F3 | 签约失败,请稍后再试 |
| 2075P0 | 交易挂起,需要确认 |
| 207510 | 订单信息为空 |
| 207511 | 订单信息有误 |
| 207530 | 业务系统信息为空 |
| 207531 | 业务系统信息有误 |
| 207532 | 业务系统错误 |
| 207533 | 金额超限 |
| 207534 | 查无此交易 |
| 207536 | 与原交易信息不符 |
| 207542 | 扣款成功但交易超过规定支付时间 |
| 207564 | 银行卡余额不足 |
| 207567 | 密码输入次数超限 |
| 207581 | 支付失败,请稍后再试 |
| 207583 | 金额超限次数超过限制,请稍后再试! |
| 207584 | 单笔金额超限 |
| 207585 | 单日金额超限 |
| 207586 | 单月金额超限 |
| 207587 | 订单信息重复 |
| 207588 | 支付订单信息有误 |
| 207630 | 不支持此充值银行 |
| 207631 | 该充值银行网关不存在 |
| 207632 | 不支持此充值类型 |
| 207633 | 商户充值基础信息未配置 |
| 207634 | 不支持此业务类型 |
| 207635 | 入账客户信息不正确 |
| 207636 | 入账分账串信息不正确 |
| 207637 | 该用户未绑定快捷卡 |
| 207638 | 该用户未绑定代扣卡 |
| 207639 | 该用户代扣协议不存在或状态异常 |
| 20763A | 企业用户或商户不支持快捷充值 |
| 20763B | 企业用户或商户不支持代扣充值 |
| 20763C | 手续费金额不得大于等于交易金额 |
| 20763D | 该充值银行与用户快捷卡不匹配 |
| 20763E | 充值手续费账户状态不正常 |
| 20763F | 个人用户仅支持个人网银充值 |
| 207640 | 支付失败 |
| 207800 | 风控信息验证失败 |
| 207801 | 商户接口调用风控受限 |
| 207802 | 用户接口调用风控受限 |
| 207803 | 二级商户接口调用风控受限 |
微信公众号支付¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 211 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 商家公众号 | open_id | 定长 128 位 String | 必须 | 微信用户关注商家公众号的openid |
| 商家APPID | app_id | 定长 32 位 String | 必须 | 商户 app 的 appid |
| 商品标签 | good_tag | 变长 32 位 String | 可选 | 商品标记,优惠标志等,包含中文请使用 UTF-8 字符集 URLEncode 编码后传入 |
| 原生态标记 | raw_flag | 变长 8 位 String | 必须 | 原生态:00000001; 非原生态:00000000 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 必须 | 入账客户号不能是客户本人 |
| 分账账户串 | div_detail | 变长 String | 必须 | 分账账户必须是入账客户的账户,分账串使用 UTF-8 字符集 URLEncode 编码后传入数据格式:[{“div_acct_id”:”000001”,”div_amt”:”1.00”},{“div_acct_id”:”000002”,”div_amt”:”2.00”}]分账串金额之和需等于充值金额支持多条分账指令 |
| 分账账户号 | div_acct_id | 变长 9 位 String | 必须 | div_detail 参数下的二级参数分账账户号 |
| 分账金额 | div_amt | 变长 14 位 String | 必须 | div_detail 参数下的二级参数分账金额,保留两位小数 |
| 业务请求流水 | biz_trans_id | 变长 16 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 商品描述 | goods_desc | 变长 127 位 String | 必须 | 商户对于该交易的描述, UTF-8 字符集 URLEncode 编码后传入,只校验长度 |
| 页面跳转地址 | call_back_url | 变长 225 位 String | 可选 | 用于支付结束页面跳转用注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 需送绝对路径 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”}二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+user_cust_id+order_date+order_id+open_id+app_id+raw_flag+trans_amt+in_cust_id+div_detail+biz_trans_id+call_back_url+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 变长 String | 必须 | 每一种消息类型代表一种交易,固定为 211 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 211000– 调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 手续费金额 | fee_amt | 变长 14 位 String | 可选 | 手续费金额,格式为###.00 |
| 手续费扣款客户号 | fee_cust_id | 定长 16 位 String | 可选 | 手续费扣款客户号 |
| 手续费子账户号 | fee_acct_id | 变长 9 位 String | 可选 | 手续费扣款子账户号 |
| 业务请求流水 | biz_trans_id | 变长 16 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 支付明细 | pay_info | 变长 600 位 String | 可选 | json格式字符串,作用于原生态js支付时的参数 |
| 动态口令 | token_id | 变长 256 位 String | 必须 | 用于后续接口调用中使用 |
| 借贷标识 | dc_flag | 定长 1 位 String | 可选 | D–借记,储蓄卡 C–贷记,信用卡 |
| 现金券 | cash_coupon | 变长 14 位 String | 可选 | 现金券金额 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文。 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值。 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+user_cust_id+order_date+order_id+platform_seq_id+fee_amt+fee_cust_id+fee_acct_id+biz_trans_id+pay_info+token_id+dc_flag+cash_coupon+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "211"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "211",
"resp_code": "211000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "211",
"resp_code": "211003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 211000 | 交易成功 |
| 211002 | 请求已受理 |
| 211003 | 交易失败 |
| 211099 | 系统异常 |
| 211100 | 请求参数非法 |
| 211101 | 商户无此接口权限 |
| 211102 | 验证签名失败 |
| 211103 | 商户状态异常 |
| 211104 | 用户状态异常 |
| 211105 | 账户状态异常 |
| 211106 | 商户签名未配置 |
| 211202 | 交易订单号重复 |
| 211204 | 商户配置异常 |
| 211305 | 入账客户信息不正确 |
| 211306 | 入账分账串信息不正确 |
| 211312 | 手续费金额不得大于等于交易金额 |
| 211314 | 充值手续费账户状态不正常 |
| 211320 | 免开户支付只支持个人和企业网银 |
| 211324 | 扫码渠道不支持 |
| 211800 | 风控信息验证失败 |
| 211801 | 商户接口调用风控受限 |
| 211802 | 用户接口调用风控受限 |
| 211803 | 二级商户接口调用风控受限 |
扫码支付¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 208 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 扫码支付渠道 | qr_pay_channel | 定长 8 位 String | 必须 | 二维码微信: 02020400; 二维码支付宝: 02020401; 二维码银联: 02020402 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 必须 | 业务类型为支付时必传,且入账客户号不能是充值客户本人 |
| 分账账户串 | div_detail | 变长 String | 必须 | 业务类型为支付时必传,分账账户必须是入账客户的账户,分账串使用 UTF-8 字符集 URLEncode 编码后传入数据格式:[{“div_acct_id”:”000001”,”div_amt”:”1.00”},{“div_acct_id”:”000002”,”div_amt”:”2.00”}]分账串金额之和需等于充值金额支持多条分账指令 |
| 分账账户号 | div_acct_id | 变长 9 位 String | 必须 | div_detail 参数下的二级参数分账账户号 |
| 分账金额 | div_amt | 变长 14 位 String | 必须 | div_detail 参数下的二级参数分账金额,保留两位小数 |
| 业务请求流水 | biz_trans_id | 变长 16 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 商品描述 | goods_desc | 变长 127 位 String | 必须 | 商户对于该交易的描述, UTF-8 字符集 URLEncode 编码后传入,只校验长度 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”}二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+user_cust_id+order_date+order_id+qr_pay_channel+trans_amt+in_cust_id+div_detail+biz_trans_id+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 变长 String | 必须 | 每一种消息类型代表一种交易,固定为 208 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 208000–调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 二维码url | qr_code_url | 变长 64 位 String | 必须 | 二维码 URL,返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 手续费金额 | fee_amt | 变长 14 位 String | 可选 | 手续费金额,格式为###.00 |
| 手续费扣款客户号 | fee_cust_id | 定长 16 位 String | 可选 | 手续费扣款客户号 |
| 手续费子账户号 | fee_acct_id | 变长 9 位 String | 可选 | 手续费扣款子账户号 |
| 业务请求流水 | biz_trans_id | 变长 16 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文。 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值。 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+user_cust_id+order_date+order_id+qr_code_url+platform_seq_id+fee_amt+fee_cust_id+fee_acct_id+biz_trans_id+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "208"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "208",
"resp_code": "208000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "208",
"resp_code": "208003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 208000 | 交易成功 |
| 208002 | 请求已受理 |
| 208003 | 交易失败 |
| 208099 | 系统异常 |
| 208100 | 请求参数非法 |
| 208101 | 商户无此接口权限 |
| 208102 | 验证签名失败 |
| 208103 | 商户状态异常 |
| 208104 | 用户状态异常 |
| 208105 | 账户状态异常 |
| 208106 | 商户签名未配置 |
| 208202 | 交易订单号重复 |
| 208203 | 账户可用余额不足 |
| 208204 | 商户配置异常 |
| 208305 | 入账客户信息不正确 |
| 208306 | 入账分账串信息不正确 |
| 208433 | 银行卡号与银行不匹配 |
| 208434 | 该银行卡非借记卡 |
| 208438 | 省份地区信息非法 |
| 20843F | 手机号与已绑定卡记录不匹配 |
| 208443 | 手机号已注册 |
| 208448 | 银行账号无效或不存在 |
| 208449 | 持卡人身份信息或手机号验证不符 |
| 20844A | 卡号长度有误 |
| 20844B | 验证超时 |
| 20844C | 账号应为活期账号 |
| 20844D | 您的银行卡暂不支持该业务,请更换其他银行卡或咨询发卡银行 |
| 20844E | 绑卡请求流水已存在 |
| 208800 | 风控信息验证失败 |
| 208801 | 商户接口调用风控受限 |
| 208802 | 用户接口调用风控受限 |
| 208803 | 二级商户接口调用风控受限 |
交易退款¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 209 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 定长 16 位 String | 可选 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 交易类型 | trans_type | 定长 8 位 String | 必须 | 02020005:二维码 |
| 原业务请求流水 | biz_trans_id | 变长 20 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 退款金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 出账客户号 | out_cust_id | 定长 16 位 String | 必须 | 原交易的入账客户号 |
| 出账账户号 | out_acct_id | 变长 9 位 String | 必须 | 原交易的入账客户号下的账户 |
| 手续费客户号 | fee_cust_id | 定长 16 位 String | 可选 | 暂不支持 |
| 手续费账户号 | fee_acct_id | 变长 9 位 String | 可选 | 暂不支持 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”} 二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+user_cust_id+order_date+order_id+trans_type+biz_trans_id+trans_amt+out_cust_id+out_acct_id+fee_cust_id+fee_acct_id+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 209 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 209000–调用成功 |
| 应答返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 原业务请求流水 | biz_trans_id | 变长 20 位 String | 必须 | 标志一个支付请求,商户下判断唯一,只能是数字和字母 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+order_date+order_id+biz_trans_id+platform_seq_id+mer_priv
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "209"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "209",
"resp_code": "209000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "209",
"resp_code": "209003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 209000 | 交易成功 |
| 209002 | 请求已受理 |
| 209003 | 交易失败 |
| 209099 | 系统异常 |
| 209100 | 请求参数非法 |
| 209101 | 商户无此接口权限 |
| 209102 | 验证签名失败 |
| 209103 | 商户状态异常 |
| 209104 | 用户状态异常 |
| 209105 | 账户状态异常 |
| 209106 | 商户签名未配置 |
| 209202 | 交易订单号重复 |
| 209203 | 账户可用余额不足 |
| 209204 | 商户配置异常 |
| 209301 | 当前交易不能申请退款 |
| 209302 | 总退款金额不能大于原交易金额 |
| 209303 | 出账账户号无效 |
| 209304 | 省份地区信息非法 |
| 209305 | 退款受理中或已成功,请勿重复申请 |
| 209306 | 产品信息校验失败 |
| 209307 | 只能对至少1天前的交易进行退款 |
| 209308 | 交易金额不合法 |
| 209309 | 请求太频繁 |
取现¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 202 |
| 商户客户号 | mer_cust_id | 变长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 变长 16 位 String | 必须 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 取现银行卡号 | card_no | 变长 32 位 String | 可选 | 本次取现的银行卡卡号 |
| 手续费/服务费内外扣标记 | cash_deduct_type | 定长 8 位 String | 必须 | 02030100:内扣; 02030101:外扣目前只支持内扣 |
| 商户收取服务费金额 | serv_fee_amt | 变长 14 位 String | 可选 | 商户收取用户的服务费金额,格式为###.00 |
| 商户收取服务费子账户号 | serv_fee_acct_id | 变长 9 位 String | 可选 | 服务费非空时为必填,商户用来收取服务费的子账户号 |
| 手续费收取对象 | fee_obj | 定长 8 位 String | 可选 | 用户商户指定取现手续费的收取对象,优先级别高于商户配置的收取对象 02050200:向商户收取 02050201:向用户收取 |
| 手续费收取子账户 | fee_acct_id | 变长 9 位 String | 可选 | 向商户收取时,必填向用户收取时,可忽略 |
| 取现方式 | cash_type | 定长 8 位 String | 必须 | 02030000:T+0 取现 02030010:T+1 取现,可传的取现通道范围小于等于商户配置的取现通道 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”} 二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 定长 256 位 的String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+user_cust_id+order_date+order_id+trans_amt+card_no+cash_deduct_type+serv_fee_amt+serv_fee_acct_id+fee_obj+fee_acct_id+cash_type+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 变长 String | 必须 | 每一种消息类型代表一种交易,固定为 202 |
| 返回码 | resp_code | 变长 String | 必须 | 202000–调用成功 |
| 结果描述 | resp_desc | 变长 String | 必须 | 返回码对应的中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 变长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 用户客户号 | user_cust_id | 变长 16 位 String | 必须 | 由汇付生成,用户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 平台流水ID | platform_seq_id | 定长 18 位 String | 必须 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 实际到账金额 | real_trans_amt | 变长 14 位 String | 可选 | 取现成功实际到账金额,各种原因导致取现失败则不传 |
| 取现银行卡号 | card_no | 变长 32 位 String | 可选 | 本次取现的银行卡卡号 |
| 手续费/服务费内外扣标记 | cash_deduct_type | 定长 8 位 String | 可选 | 02030100:内扣; 02030101:外扣目前只支持内扣 |
| 开户银行代号 | bank_id | 变长 8 位 String | 可选 | 具体见附件:取现支持银行列表 |
| 商户收取服务费金额 | serv_fee_amt | 变长 14 位 String | 可选 | 商户收取用户的服务费金额,格式为###.00 |
| 商户子账户号 | serv_fee_acct_id | 变长 9 位 String | 可选 | 服务费非空时为必填,商户用来收取服务费的子账户号 |
| 手续费金额 | fee_amt | 变长 14 位 String | 必须 | 手续费金额,格式为###.00 |
| 手续费扣款客户号 | fee_cust_id | 变长 16 位 String | 必须 | 手续费扣款客户号 |
| 手续费扣款子账户号 | fee_acct_id | 变长 9 位 String | 必须 | 手续费扣款子账户号 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 定长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+user_cust_id+order_date+order_id+platform_seq_id+trans_amt+real_trans_amt+card_no+cash_deduct_type+bank_id+serv_fee_amt+serv_fee_acct_id+fee_amt+fee_cust_id+fee_acct_id+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "202"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "202",
"resp_code": "202000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "202",
"resp_code": "202003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 202000 | 交易成功 |
| 202002 | 请求已受理 |
| 202003 | 交易失败 |
| 202099 | 系统异常 |
| 202100 | 请求参数非法 |
| 202101 | 商户无此接口权限 |
| 202102 | 验证签名失败 |
| 202103 | 商户状态异常 |
| 202104 | 用户状态异常 |
| 202105 | 账户状态异常 |
| 202106 | 商户签名未配置 |
| 202202 | 交易订单号重复 |
| 202204 | 商户配置异常 |
| 202212 | 账户余额查询失败 |
| 202300 | 银行卡不是取现卡 |
| 202301 | 没有可用的默认取现卡 |
| 202302 | 取现服务费超出最大费率配置 |
| 202303 | 取现金额不足 |
| 202304 | 取现方式错误 |
| 202305 | 银行卡信息不存在或状态异常 |
| 202306 | 接口不支持手续费外扣 |
| 202307 | 取现金额小于等于取现费用 |
| 202308 | 商户取现不支持服务费 |
| 202309 | 手续费专户不能出账 |
| 202800 | 风控信息验证失败 |
| 202801 | 商户接口调用风控受限 |
| 202802 | 用户接口调用风控受限 |
| 202803 | 二级商户接口调用风控受限 |
转账¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 203 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位 内数字或字母的组合 |
| 转账类型 | transfer_type | 定长 8 位 String | 必须 | 02040000:商户转用户;02040001:企业用户转商户;02040002:企业用户与个人用户间转账;02040003:商户子账户间转账 |
| 出账客户号 | out_cust_id | 定长 16 位 String | 必须 | 转账出账方的客户号,出账客户不可为个人用户 |
| 出账账户号 | out_acct_id | 变长 9 位 String | 必须 | 转账出账方的账户号 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 必须 | 转账入账方的客户号 |
| 入账账户号 | in_acct_id | 变长 9 位 String | 必须 | 转账入账方的账户号 |
| 转账金额 | transfer_amt | 变长 14 位 String | 必须 | 转账金额,格式为###.00 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 通过后台异步通知,商户应在应答接收的响应中输出 RECV_ORD_ID 字样的字符串,表明商户已经收到该笔交易结果。注意:1) URL 应使用 UTF-8 字符集 URLEncode 编码后传入 2 ) URL 中请不要包含特殊字符 3) 必须是外网地址 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 入参扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数若需要进行二级商户号验证,则必传,格式:{“sub_mer_cust_id”:”111111111111”}二级商户号由汇付生成,详见 二级商户录入接口 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+order_date+order_id+transfer_type+out_cust_id+out_acct_id+in_cust_id+in_acct_id+transfer_amt+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 接口标识 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 203 |
| 应答返回码 | resp_code | 定长 6 位 String | 必须 | 203000–调用成功 |
| 应答描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 转账类型 | transfer_type | 定长 8 位 String | 必须 | 02040000:商户转用户; 02040001:企业用户转商户; 02040002:企业用户与个人用户间转账; 02040003:商户子账户间转账 |
| 出账客户号 | out_cust_id | 定长 16 位 String | 必须 | 转账出账方的客户号,出账客户不可为个人用户 |
| 出账账户号 | out_acct_id | 变长 9 位 String | 必须 | 转账出账方的账户号 |
| 入账客户号 | in_cust_id | 定长 16 位 String | 必须 | 转账入账方的客户号 |
| 入账账户号 | in_acct_id | 变长 9 位 String | 必须 | 转账入账方的账户号 |
| 转账金额 | transfer_amt | 变长 14 位 String | 必须 | 转账金额,格式为###.00 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 入参扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+order_date+order_id+transfer_type+out_cust_id+out_acct_id+in_cust_id+in_acct_id+transfer_amt+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "203"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "203",
"resp_code": "203000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "203",
"resp_code": "203003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 203000 | 交易成功 |
| 203099 | 系统异常 |
| 203100 | 请求参数非法 |
| 203101 | 商户无此接口权限 |
| 203102 | 验证签名失败 |
| 203103 | 商户状态异常 |
| 203104 | 用户状态异常 |
| 203202 | 交易订单号重复 |
| 203300 | 转账类型与转入方/转出方用户信息不匹配 |
| 203301 | 转出方用户信息不存在 |
| 203302 | 转入方用户信息不存在 |
| 203303 | 转出方用户状态异常 |
| 203304 | 转入方用户状态异常 |
| 203305 | 子账户间转账,商户信息不存在 |
| 203306 | 子账户间转账,商户状态异常 |
| 203307 | 转出方帐户号不存在 |
| 203308 | 转入方账号不存在 |
| 203309 | 转出方帐户状态异常 |
| 203310 | 转入方帐户状态异常 |
| 203311 | 转账失败 |
| 203312 | 商户手续费帐户不存在 |
| 203313 | 商户手续费帐户状态异常 |
| 203314 | 风控拦截 |
| 203315 | 验证手续费专户,资金不能转出 |
| 203800 | 风控信息验证失败 |
| 203801 | 商户接口调用风控受限 |
| 203802 | 用户接口调用风控受限 |
| 203803 | 二级商户接口调用风控受限 |
代发¶
请求参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 版本号 | version | 定长 2 位 String | 必须 | 目前固定为 10 |
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 214 |
| 商户客户号 | mer_cust_id | 变长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位 内数字或字母的组合 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 代发出账子账户 | acct_id | 变长 9 位 String | 必须 | 商户的子账户 |
| 银行账户类型 | card_type | 定长 8 位 String | 必须 | 01050001:对公账户; 01050000:对私账户目前仅支持对私 |
| 代发类型 | agency_pay_type | 定长 8 位 String | 必须 | 02080000:T+0 代发目前仅支持 T+0 |
| 银行代号 | bank_id | 变长 8 位 String | 必须 | 具体见附件一:支持银行列表 |
| 银行卡号 | card_no | 变长 32 位 String | 必须 | 本次快捷绑卡待绑定的银行卡号,变长 32 位 数字 |
| 银行卡开户省份 | card_prov | 定长 4 位 String | 可选 | 对私非必传,对公必传 |
| 银行卡开户地区 | card_area | 定长 4 位 String | 可选 | 对私非必传,对公必传 |
| 持卡方户名 | user_name | 变长 50 位 String | 必须 | 用户的真实姓名,中文应使用 UTF-8 字符集 URLEncode 编码后传入 |
| 持卡方证件类型 | cert_type | 定长 8 位 String | 必须 | 01020100:身份证; 01020101:护照; 01020102:军官证; 01020104:回乡证; 01020106:台胞证; 01020107:其他银行账户类型为对私时必传 |
| 持卡方证件号 | cert_id | 变长 30 位 String | 必须 | 用户证件号码银行账户类型为对私时必传 |
| 企业证照号 | corp_code | 变长 30 位 String | 可选 | 银行账户类型为对公时必传 |
| 手续费收取子账户 | fee_acct_id | 变长 9 位 String | 可选 | 如果不传,则按商户配置的子账户收取手续费 |
| 代发用途 | purpose | 变长 512 位 String | 必须 | 代发用途 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户私有域 | mer_priv | 变长 120 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值。 |
本接口加签拼接顺序:
version+cmd_id+mer_cust_id+order_date+order_id+trans_amt+acct_id+card_type+agency_pay_type+bank_id+card_no+card_prov+card_area+cert_type+cert_id+corp_code+fee_acct_id+bg_ret_url+mer_priv+extension
返回参数列表¶
| 中文名 | 参数名 | 数据格式 | 是否必须 | 说明 |
|---|---|---|---|---|
| 消息类型 | cmd_id | 定长 3 位 String | 必须 | 每一种消息类型代表一种交易,固定为 213 |
| 返回码 | resp_code | 定长 6 位 String | 必须 | 213000–调用成功 |
| 返回描述 | resp_desc | 变长 String | 必须 | 返回码的对应中文描述,中文为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户客户号 | mer_cust_id | 定长 16 位 String | 必须 | 由汇付生成,商户的唯一性标识 |
| 订单日期 | order_date | 定长 8 位 String | 必须 | 格式为 YYYYMMDD,例如:20160307 |
| 订单号 | order_id | 变长 20 位 String | 必须 | 由商户生成,必须保证唯一,20 位内数字或字母的组合 |
| 本平台交易唯一标识号 | platform_seq_id | 定长 18 位 String | 可选 | 组成规则:8 位本平台日期 +10 位系统流水号 |
| 交易金额 | trans_amt | 变长 14 位 String | 必须 | 交易金额,格式为###.00 |
| 手续费金额 | fee_amt | 变长 14 位 String | 可选 | 手续费金额,格式为###.00 |
| 手续费收取子账户 | fee_acct_id | 变长 9 位 String | 可选 | 手续费扣款子账户号 |
| 商户后台应答地址 | bg_ret_url | 变长 128 位 String | 必须 | 返参中的 URL 为 UTF-8 字符集 URLEncode 编码后的字符串,商户应解码获取原文 |
| 商户私有域 | mer_priv | 变长 128 位 String | 可选 | 为商户的自定义字段,该字段在交易完成后由本平台原样返回。注意:如参数中包含中文,应对参数进行 Base64 加密后再使用 |
| 扩展域 | extension | 变长 512 位 String | 可选 | 用于扩展请求参数 |
| 签名 | check_value | 变长 256 位 String | 必须 | 加签规则:MD5+RSA 将参数列表的值按从上到下的顺序进行字符串拼接,调用签名函数获得的值 |
本接口加签拼接顺序:
cmd_id+resp_code+mer_cust_id+order_date+order_id+platform_seq_id+trans_amt+fee_amt+fee_acct_id+bg_ret_url+mer_priv+extension
代码示例¶
java
String result = new String();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://mertest.chinapnr.com/asharp/merchantRequest");
try {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("version", "10"));
nvps.add(new BasicNameValuePair("cmd_id", "214"));
nvps.add(new BasicNameValuePair("mer_cust_id", "6666000000000001"));
nvps.add(new BasicNameValuePair("order_date", "20180327"));
nvps.add(new BasicNameValuePair("order_id", "10000000001"));
.......
post.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(post);
int code = httpResponse.getStatusLine().getStatusCode();
String returnStr = EntityUtils.toString(httpResponse.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
成功响应
200
{
"cmd_id": "214",
"resp_code": "214000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
失败响应
200
{
"cmd_id": "214",
"resp_code": "214003",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000000001",
"order_date": "20180327",
"order_id": "10000000001",
.......
}
接口返回码¶
| 返回参数 | 返回描述 |
| 214000 | 交易成功 |
| 214002 | 请求已受理 |
| 214003 | 交易失败 |
| 214099 | 系统异常 |
| 214100 | 请求参数非法 |
| 214101 | 商户无此接口权限 |
| 214102 | 验证签名失败 |
| 214103 | 商户状态异常 |
| 214104 | 用户状态异常 |
| 214105 | 账户状态异常 |
| 214106 | 商户签名未配置 |
| 214202 | 交易订单号重复 |
| 214300 | 商户出账子账户不存在或状态异常 |
| 214301 | 商户手续费子账户不合法 |
| 214302 | 商户代发配置异常 |
| 214303 | 不支持此代发类型 |
| 214304 | 不支持此银行账户类型 |
| 214305 | 不支持此银行 |
| 214306 | 银行卡号与银行不匹配 |
| 214800 | 风控信息验证失败 |
| 214801 | 商户接口调用风控受限 |
| 214802 | 用户接口调用风控受限 |
| 214803 | 二级商户接口调用风控受限 |