交易类¶
充值/支付¶
接口功能说明¶
接口功能说明:用于网银充值/支付,免注册网银支付、快捷支付和代扣支付
- 充值类型 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 | 二级商户接口调用风控受限 |