快捷协议支付短信确认
1.修订记录
版本 |
日期 |
说明 |
作者 |
V0.1 |
2018/5/28 |
新接口参数定义 |
邓文泉 |
V0.2 |
2021/08/24 |
分期交易返回分期信息 |
王晶 |
V0.3 |
2021/12/27 |
支持国密 |
王晶 |
V0.4 |
2023/02/15 |
响应参数新增sub_msg响应信息 |
林竞 |
2.业务说明
(1)场景说明
用户签约成功后,通过该接口可以创建无卡快捷订单及明细登记 协议快捷支付流程: 1、协议签约接口签约; 2、协议签约后,会收到短信验证码,再调用协议签约确认接口进行确认; 3、协议签约确认完成后,调用创建无卡快捷订单及明细登记接口订单创建; 4、创建无卡快捷订单及明细登记后,会收到短信验证码,调用确认协议快捷支付短信接口进行确认支付; 5、如果没有收到协议快捷短信验证码,调用重新获取协议快捷支付短信接口再发送短信验证码进行确认支付;
(2)接口说明
1、快捷协议支付短信确认
3.请求地址
4.参数说明
4.1公共请求参数
参数 |
类型(长度) |
Y |
参数说明 |
method |
String(128) |
Y |
接口名称 固定值 ysepay.trusteeship.fastPay.confirm |
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编码 |
version |
String(3) |
Y |
接口版本3.0 当前版本 3.0 |
biz_content |
String |
Y |
业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 |
4.2 业务请求参数
参数名biz_content,值为一个json格式对象,下面列表描述json对象的值
参数 |
类型(字节长度) |
必填 |
参数说明 |
paysn |
String |
Y |
支付流水 示例值:2013102500025604 |
mobile_verify_code |
String |
Y |
验证码 示例值:101098 |
5.响应参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据同步回执给商户。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
5.1 公共响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign |
String |
Y |
签名字符串,Base64编码 |
ysepay_trusteeship_fastPay_confirm_response |
String |
Y |
业务响应参数的集合,最大长度不限 |
5.2 业务响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
code |
String |
Y |
响应代码 |
msg |
String |
Y |
响应代码描述 |
trade_status |
String(2) |
Y |
状态 示例值:附录8.2 |
trade_no |
String |
Y |
银盛交易流水号 示例值:68431922806471166 |
out_trade_no |
String(1,32) |
Y |
商户系统生成的订单号 |
total_amount |
Number |
N |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
account_date |
String(19) |
N |
入账日期,格式"yyyyMMdd" 示例值:20140724 |
installment_resp |
InstallmentResp |
N |
分期响应信息 |
mer_discount_fee |
Double |
N |
商户贴息手续费 示例值:1.00 |
sub_msg |
String(50) |
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],精确到小数点后两位。 示例值:100 |
trade_no |
String(30) |
N |
该交易在银盛支付系统中的交易流水号。 |
trade_status |
String |
Y |
交易目前所处的状态。成功状态的值: TRADE_SUCCESS\ |
TRADE_CLOSED 示例值:附录9.2 |
account_date |
String(10) |
N |
入账的时间,格式"yyyyMMdd" 示例值:20140724 |
openid |
String(128) |
N |
子商户appid下用户唯一标识 |
payer_fee |
Number |
N |
该笔订单的付款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。示例值:1.00 |
payee_fee |
Number |
N |
该笔订单的收款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。示例值:1.00 |
partner_fee |
Number |
N |
该笔订单的合作方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。示例值:1.00 |
fee |
Number |
N |
该笔订单的手续费总和(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。示例值:1.00 |
7.样例
7.1 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void fastPayConfirm() 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("paysn","2013102500025604");
bizContentMap.put("mobile_verify_code","101098");
req.setParamData(bizContentMap);
logger.info("短信确认支付请求入参为:"+ JSONObject.toJSONString(req));
String result = null;
try{
result = TrusteeshipApi.fastPayConfirm(req);
}catch (Exception e){
logger.info("短信确认支付失败:"+e.getCause().getMessage());
e.printStackTrace();
}
8.附录
8.1 业务错误码
错误码 |
错误描述 |
解决方案 |
ACQ.SYSTEM_ERROR |
接口返回错误 |
请立即调用查询订单API,查询当前订单的状态,并根据订单状态决定下一步的操作 |
ACQ.INVALID_PARAMETER |
参数无效 |
检查请求参数,修改后重新发起请求 |
ACQ.ACCESS_FORBIDDEN |
无权限使用接口 |
联系银盛市场人员进行签约 |
ACQ.EXIST_FORBIDDEN_WORD |
订单信息中包含违禁词 |
修改订单信息后,重新发起请求 |
ACQ.TOTAL_FEE_EXCEED |
订单总金额超过限额 |
修改订单金额再发起请求 |
ACQ.CONTEXT_INCONSISTENT |
交易信息被篡改 |
更换商家订单号后,重新发起请求 |
ACQ.TRADE_HAS_SUCCESS |
交易已被支付 |
确认该笔交易信息是否为当前买家的,如果是则认为交易付款成功,如果不是则更换商家订单号后,重新发起请求 |
ACQ.TRADE_HAS_CLOSE |
交易已经关闭 |
更换商家订单号后,重新发起请求 |
ACQ.BUYER_SELLER_EQUAL |
买卖家不能相同 |
更换买家重新付款 |
ACQ.TRADE_BUYER_NOT_MATCH |
交易买家不匹配 |
更换商家订单号后,重新发起请求 |
ACQ.BUYER_ENABLE_STATUS_FORBID |
买家状态非法 |
用户联系银盛客服,确认买家状态为什么非法 |
ACQ.SELLER_BEEN_BLOCKED |
商家账号被冻结 |
联系银盛客服,解冻账号 |
ACQ.ERROR_BUYER_CERTIFY_LEVEL_LIMIT |
买家未通过人行认证 |
让用户联系银盛客服并更换其它付款方式 |
ACQ.QUERY_NO_RECORD |
暂未查询到交易,请检查订单号/流水号后重试 |
该状态为未知状态,请勿当成失败状态处理 检查传入的订单号是否正确,修改后重新发起请求或继续查询 |
ACQ.CUSTID_NO_MATCH |
发起方客户号不匹配 |
8.2 交易状态
枚举名称 |
枚举说明 |
WAIT_BUYER_PAY |
交易创建,等待买家付款。 |
TRADE_CLOSED |
在指定时间段内未支付时关闭的交易;客户主动关闭订单。 |
TRADE_SUCCESS |
交易成功,且可对该交易做操作,如:多级分润、退款等。 |
TRADE_PART_REFUND |
部分退款成功。 |
TRADE_ALL_REFUND |
全部退款成功。 |
WAIT_SELLER_SEND_GOODS |
买家已付款,等待卖家发货 |
WAIT_BUYER_CONFIRM_GOODS |
卖家已发货,等待买家确认 |