快捷协议支付
1.修订记录
版本 |
日期 |
说明 |
作者 |
V0.1 |
2018/05/28 |
新接口参数定义 |
郭勇 |
V0.2 |
2018/08/01 |
新增接口返回参数sub_msg返回信息 |
邓鑫 |
V0.3 |
2018/08/29 |
新增返回状态TRADE_PROCESS |
邓鑫 |
V0.4 |
2018/12/19 |
超时时间说明 |
邓文泉 |
V0.5 |
2019/02/25 |
新增所属区域、mcc、第三方商户号 |
邓鑫 |
V0.6 |
2019/03/28 |
新增返回参数:该笔支付状态pay_status |
郭勇 |
V0.7 |
2021/04/13 |
增加子商户ip sumber_ip |
汤吉齐 |
V0.8 |
2021/08/24 |
支持分期交易 |
王晶 |
V0.9 |
2021/12/27 |
支持国密 |
王晶 |
V1.0 |
2023/03/31 |
支持快捷挂网协议改造 ,新增请求参数uid、token |
林竞 |
2.业务说明
(1)场景说明
用户签约成功后,通过该接口可以创建无卡快捷订单及明细登记 协议快捷支付流程: 1、协议签约接口签约; 2、协议签约后,会收到短信验证码,再调用协议签约确认接口进行确认; 3、协议签约确认完成后,调用创建无卡快捷订单及明细登记接口订单创建; 4、创建无卡快捷订单及明细登记后,会收到短信验证码,调用确认协议快捷支付短信接口进行确认支付; 5、如果没有收到协议快捷短信验证码,调用重新获取协议快捷支付短信接口再发送短信验证码进行确认支付;
(2)接口说明
1、用户先进行签约,签约完成后进调用本接口进行支付
3.请求地址
4.参数说明
4.1公共请求参数
参数 |
类型(长度) |
Y |
参数说明 |
method |
String(128) |
Y |
接口名称 固定值 ysepay.trusteeship.fastPay |
partner_id |
String(20) |
Y |
在银盛支付开设的服务商商户号,请联系客户经理提供 |
timestamp |
String(19) |
Y |
发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 示例值:2014-07-24 03:07:50 |
charset |
String(10) |
Y |
商户网站使用的编码格式,如UTF-8、GBK、GB2312等,默认值 GBK |
sign_type |
String(10) |
Y |
报文签名算法,RSA/SM |
sign |
String(256) |
Y |
签名字符串,再用Base64编码 |
notify_url |
String(500) |
Y |
交易成功异步通知到商户的后台地址,http路径支持多个url进行异步通知,多个url用分隔符“,”分开,格式如:url1,url2,url3,支持TLS1.0、TLS1.1、TLS1.2 |
return_url |
String(190) |
N |
同步通知地址 |
version |
String(3) |
Y |
接口版本3.0 当前版本 3.0 |
biz_content |
String |
Y |
业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 |
4.2 业务请求参数
参数名biz_content,值为一个json格式对象,下面列表描述json对象的值
参数 |
类型(字节长度) |
必填 |
参数说明 |
out_trade_no |
String(1,32) |
Y |
商户系统生成的订单号,生成规则前8位为交易日期,如20180525,范围跨度支持包含当天在内的前后一天,且只能由大小写英文字母、数字、下划线及横杠组成 示例值:201805256843192280647118 |
shopdate |
String(8,8) |
Y |
商户日期(该参数做交易与查询时需要一致) 该日期需在当日的前后一天时间范围之内 示例值:20180525 |
subject |
String(1,250) |
Y |
订单备注 |
total_amount |
Number(10,2) |
Y |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。Number(10,2)指10位长度,2位精度 示例值:100 |
currency |
String(3) |
N |
默认CNY(人民币) |
seller_id |
String(1,20) |
Y |
收款商户号(银盛支付生成并下发) |
seller_name |
String(1,50) |
Y |
收款方银盛支付客户名 |
timeout_express |
String(2,6) |
Y |
设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭,取值范围:1m~15d。m-分钟,h-小时,d-天。该参数数值不接受小数点,如1.5h,可转换为90m。注意:设置了未付款交易超时时间的情况下,若我司在限定时间内没有收到成功支付通知,则会关闭交易,关闭后该笔交易若付款方支付成功的情况下,会自动原路退款至付款方。 示例值:96h 代表96小时后订单自动关闭 |
extend_params |
String(500) |
|
业务扩展参数,一个json字符串,order_mode订单模式,暂时可选的值为:00 代表购物车模式;seller_list参与分账的收款方信息数组,每个元素包含seller_id收款方银盛支付用户号。实时分账业务,order_mode和seller_list均不能为空,order_mode的值必须为00。示例值:样例7.2 |
extra_common_param |
String(2000) |
N |
公用回传参数 商户自定义数据域,原样返回 |
business_code |
String(1,10) |
Y |
业务代码 ,请联系银盛客户经理获取。注意:业务代码非固定值,不同到账方式需要传不同的业务代码 |
user_id |
String(1,25) |
Y |
唯一客户标识,商户旗下客户号。签约时的user_id |
protocol_no |
String(1,20) |
Y |
银盛协议号,签约时返回的银盛协议号 |
cardCvn2 |
String(3) |
N |
贷记卡必传,如果签名方式为RSA,则用DES加密,密钥为商户号partner_id前8位,不足8位在商户号前补空格;如果签名方式为SM,则用SM加密 |
cardExprDt |
String(4) |
N |
贷记卡必传,如果签名方式为RSA,则用DES加密,密钥为商户号partner_id前8位,不足8位在商户号前补空格,格式为MMYY; 如果签名方式为SM,则用SM加密 |
sub_merchant |
SubMerchantInfo |
N |
二级商户信息, Json格式,暂包括merName、merShortName、merAddr、telephone、merNo、category、mrchntCertId 示例值:样例7.3 |
consignee_info |
ConsigeeInfo |
N |
收货人信息json格式 示例值:样例7.4 |
mccs |
String(200) |
N |
Mcc码(支持上传多个,多个用\ |
分割) 示例值:5811\ |
5812\ |
5813 |
mer_no |
String(20) |
N |
第三方商户号 |
submer_ip |
String(16) |
N |
子商户ip 示例值:112.112.112.112 |
installment_req |
InstallmentReq |
N |
分期请求信息,如果business_code为00510140协议支付分期,该参数必填。否则该参数无效 |
uid |
String(1,32) |
N |
商户唯一标识,非必填,挂网协议改造使用。当token有值时,uid不可为空,允许toke和uid同时为空,此时走原逻辑。当uid和token同时不为空时,走挂网协议改造逻辑,uid必须要与调快捷挂网协议跳转接口请求的uid相同 |
token |
String |
N |
用户token值(加密),非必填,挂网协议改造使用。当uid有值时,token不可为空,允许toke和uid同时为空,此时走原逻辑。当uid和token同时不为空时,走挂网协议改造逻辑,token必须要与调快捷挂网协议跳转接口响应回来的token相同 |
参数 |
类型(字节长度) |
必填 |
参数说明 |
installment_num |
String |
Y |
分期期数,允许值:3~99 |
discount_fee_mode |
String |
Y |
商户补贴分期手续费方式,0-不贴息,1-贴息,2-全额贴息 |
discount_fee_rate |
String |
N |
商户分期贴息费率,discount_fee_mode取值为1-贴息或2-全额贴息时,该字段必须上送,小数点后可保留6位,允许值:0~1 示例值:0.56 |
4.4 二级商户 SubMerchantInfo
参数 |
类型(字节长度) |
必填 |
参数说明 |
merName |
String(50) |
N |
二级商户名称,支持25个中文 |
merShortName |
String(50) |
N |
二级商户简称,支持25个中文 |
merAddr |
String(200) |
N |
二级商户地址,支持100个中文 |
telephone |
String(13) |
N |
固定电话/手机号码二选一 |
merNo |
String(32) |
N |
二级商户编号 |
category |
String(20) |
N |
类目,按附件内容输入类目编号 |
mrchntCertId |
String(15\ |
18) |
N |
身份证号,只支持身份证格式(如果签名方式为RSA,则用DES加密,密钥为商户号partner_id前8位,不足8位在商户号前补空格; 如果签名方式为SM,则用SM加密) |
4.5 收货人信息 ConsigeeInfo
参数 |
类型(字节长度) |
必填 |
参数说明 |
consigneeName |
String(150) |
N |
收货人姓名 |
consigneeAddr |
String(200) |
N |
收货地址 |
transportationInfo |
String(200) |
N |
物流配送信息(物流名称+订单号) |
commodityName |
String(150) |
N |
商品名称 |
commodityNumber |
String(10) |
N |
商品数量, |
5.响应参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据同步回执给商户。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
5.1 公共响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign |
String |
Y |
签名字符串,Base64编码 |
ysepay_trusteeship_fastPay_response |
String |
Y |
业务响应参数的集合,最大长度不限 |
5.2 业务响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
code |
String |
Y |
响应代码 |
msg |
String |
Y |
响应代码描述 |
out_trade_no |
String(32) |
Y |
商户系统生成的订单号 |
trade_no |
String(30) |
N |
该交易在银盛支付系统中的交易流水号。 |
trade_status |
String |
Y |
交易目前所处的状态。成功状态的值: TRADE_SUCCESS 示例值:附录8.1 |
total_amount |
Number |
N |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
account_date |
String(19) |
N |
入账日期,格式"yyyy-MM-dd" 示例值:2014-07-24 |
need_sign |
String |
N |
是否需要重新签约(协议不可用,或渠道不可用 Y需重新签约) |
need_sms_confirm |
String |
N |
是否需要短信确认(Y需短信确认) |
paysn |
String |
N |
支付流水(用于短信确认支付) |
sub_msg |
String(50) |
N |
返回信息 |
pay_status |
String |
N |
该笔支付目前所处的状态。成功状态的值: TRADE_SUCCESS,TRADE_PROCESS,TRADE_FAILED 具体示例值:附录8.1 |
installment_resp |
InstallmentResp |
N |
分期响应信息 |
mer_discount_fee |
Double |
N |
商户贴息手续费 |
5.3 分期响应 installmentResp
参数 |
类型(字节长度) |
必填 |
参数说明 |
installment_num |
String |
Y |
分期期数,允许值:3~99 |
installment_fee_total |
Double |
Y |
分期应付手续费 |
installment_fee_pay_mode |
String |
Y |
持卡人手续费支付方式 ,0-一次性支付,1-分期支付 |
first_fee |
Double |
Y |
首期手续费 |
each_fee |
Double |
Y |
每期手续费 |
first_back_amount |
Double |
Y |
首期还款金额 |
real_discount_fee_rate |
Double |
N |
商户分期实际贴息费率 |
6.服务器异步通知参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign_type |
String |
Y |
签名类型,交易请求时传入的签名类型RSA/SM |
sign |
String |
Y |
签名字符串,Base64编码 |
notify_type |
String |
Y |
通知类型 固定directpay.status.sync |
notify_time |
String(19) |
Y |
发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 示例值:2014-07-24 03:07:50 |
out_trade_no |
String(32) |
Y |
商户系统生成的订单号 |
total_amount |
Number |
N |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
trade_no |
String(20) |
N |
该交易在银盛支付系统中的交易流水号。 |
trade_status |
String |
Y |
交易目前所处的状态。成功状态的值: TRADE_SUCCESS\ |
TRADE_CLOSED示例值:附录8.1 |
account_date |
String(10) |
N |
入账的时间,格式"yyyyMMdd" 示例值:20140724 |
openid |
String(128) |
N |
子商户appid下用户唯一标识 |
payer_fee |
Number |
N |
该笔订单的付款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
payee_fee |
Number |
N |
该笔订单的收款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
partner_fee |
Number |
N |
该笔订单的合作方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
fee |
Number |
N |
该笔订单的手续费总和(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
7.样例
7.1 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void fastPay() throws Exception {
OnlineReqDataVo req = new OnlineReqDataVo();
String reqUrl = "https://trusteeship.ysepay.com/gateway.do";
String privateKeyFilePath = "D:\\openRSA\\hyfz_test2.pfx";
String privateKeyPassworde = "123456";
String publicKeyFilePath = "D:\\openRSA\\businessgate.cer";
String partnerId = "hyfz_test2";
String notify_url = "http://api.test.ysepay.net/atinterface/receive_return.htm";
String return_url = "http://api.test.ysepay.net/atinterface/receive_return.htm";
req.setPrivateKeyFilePath(privateKeyFilePath);
req.setPrivateKeyPassword(privateKeyPassworde);
req.setYsPublicKeyFilePath(publicKeyFilePath);
req.setReqUrl(reqUrl);
req.setNotifyUrl(notify_url);
req.setReturnUrl(return_url);
req.setPartnerId(partnerId);
Map<String,Object> bizContentMap = new HashMap<>();
bizContentMap.put("out_trade_no","20211015843192280647222");
bizContentMap.put("shopdate","20211013");
bizContentMap.put("subject","木木牛");
bizContentMap.put("total_amount","0.01");
bizContentMap.put("currency","CNY");
bizContentMap.put("seller_id","hyfz_test2");
bizContentMap.put("seller_name","银盛支付服务股份有限公司行业发展部");
bizContentMap.put("timeout_express","96h");
bizContentMap.put("extend_params",null);
bizContentMap.put("extra_common_param",null);
bizContentMap.put("business_code","01000010");
bizContentMap.put("user_id","hyfz_test2");
bizContentMap.put("protocol_no","K2021101436720150055");
bizContentMap.put("cardCvn2",null);
bizContentMap.put("cardExprDt",null);
bizContentMap.put("sub_merchant",null);
bizContentMap.put("| :-merName",null);
bizContentMap.put("| :-merShortName",null);
bizContentMap.put("| :-merAddr",null);
bizContentMap.put("| :-telephone",null);
bizContentMap.put("| :-merNo",null);
bizContentMap.put("| :-category",null);
bizContentMap.put("| :-mrchntCertId",null);
bizContentMap.put("consignee_info",null);
bizContentMap.put("| :- consigneeName",null);
bizContentMap.put("| :- consigneeAddr",null);
bizContentMap.put("| :-transportationInfo",null);
bizContentMap.put("| :- commodityName",null);
bizContentMap.put("| :- commodityNumber",null);
bizContentMap.put("| :- cross_border_info",null);
bizContentMap.put("| :-cross_border_name",null);
bizContentMap.put("| :-cross_border_idno",null);
bizContentMap.put("| :-cross_border_card_number",null);
bizContentMap.put("| :-cross_border_mobile",null);
bizContentMap.put("| :-cross_border_tag",null);
bizContentMap.put("province",null);
bizContentMap.put("city",null);
bizContentMap.put("mccs",null);
bizContentMap.put("mer_no",null);
bizContentMap.put("submer_ip",null);
bizContentMap.put("installment_req",null);
req.setParamData(bizContentMap);
logger.info("快捷协议支付请求入参为:"+ JSONObject.toJSONString(req));
String result = null;
try{
result = TrusteeshipApi.fastPay(req);
}catch (Exception e){
logger.info("快捷协议支付失败:"+e.getCause().getMessage());
e.printStackTrace();
}
}
7.2 extend_params
{
"cartTYpe": "00",
"order_mode": "01",
"seller_list": [{
"seller_id": "123"
}, {
"seller_id": "456"
}]
}
7.3 sub_merchant 说明
{
"merName": "二级商户名称",
"merShortName": "二级商户简称",
"merAddr": "二级商户地址",
"telephone": "二级商户服务电话",
"merNo": "二级商户编号",
"category": "类目",
"mrchntCertId": "身份证号"
}
7.4 consignee_info 说明
{
"consigneeName": "收货人姓名",
"consigneeAddr": "收货地址",
"transportationInfo": "物流配送信息",
"commodityName": "商品名称",
"commodityNumber": "商品数量"
}
8.附录
8.1 交易状态
枚举名称 |
枚举说明 |
WAIT_BUYER_PAY |
交易创建,等待买家付款。 |
TRADE_CLOSED |
在指定时间段内未支付时关闭的交易;客户主动关闭订单。 |
TRADE_SUCCESS |
交易成功,且可对该交易做操作,如:多级分润、退款等。 |
TRADE_PART_REFUND |
部分退款成功。 |
TRADE_ALL_REFUND |
全部退款成功。 |
WAIT_SELLER_SEND_GOODS |
买家已付款,等待卖家发货 |
WAIT_BUYER_CONFIRM_GOODS |
卖家已发货,等待买家确认 |
TRADE_FAILD |
交易失败 |
TRADE_CANCEL |
订单已撤销 |
TRADE_PROCESS |
交易正在处理中,可对该交易做查询,避免重复支付。 |
8.2 类目