# 设置扫码交易费率和权限
1、修订记录
| 修订记录 | 日期 | 说明 | 作者 |
|---|---|---|---|
| 1.0 | 2021.11.10 | 初稿 | 薛晨 |
2、业务说明
(1)接口说明
本接口的费率设置成功后,商户的资金到账为T+1到账,如遇法定节假日顺延结算。 注意:如果不设置交易能走通,但是银盛的保底收费高。
3、请求地址
| 环境 | HTTPS请求地址 |
|---|---|
| 测试环境 | https://appdev.ysepay.com/saas/orgScan/onlineTrading |
| 正式环境 | https://ouser.ysepay.com:6443/saas/orgScan/onlineTrading |
4、请求参数说明
4.1、公共请求参数
| 参数 | 类型(长度) | 必填 | 参数说明 |
|---|---|---|---|
| ver | String(3) | Y | 版本号 固定值1.0 |
| src | String(50) | Y | 由银盛生成的接入机构号,请联系银盛客户经理获取。示例值:ORG20210427160753 |
| msgCode | String(20) | Y | 接口代码 固定值Merchant |
| method | String(30) | Y | 接口方法 固定值onlineTrading |
| signType | String(10) | Y | 报文签名算法,RSA、SM 注:应监管要求签名算法变更为国密,新接入商户请选择SM |
| charset | String(10) | Y | 字符集 固定值UTF-8 |
| reqFlowId | String(20) | Y | 请求流水号 示例值:202110011944011101 注:该字段不参与签名 |
| signValue | String | Y | 签名串,请参考"签名样例以及demo下载" |
| data | String | Y | 业务参数(加密成密文字符串) |
4.2、业务请求参数
data加密前的json数据明文字符串
参数 类型(长度) 必填 参数说明 mercId String(20) Y 银盛商户号 示例:826690041210008 accOrgNo String(50) Y 接入机构号 示例:ORG20210927162704 scanServiceOpen String(50) Y 交易权限 开通权限多个用, 隔开。 1-微信小程序支付 2-微信公众号支付(新) 3-微信反扫 4-支付宝正扫 5-支付宝反扫 6-支付宝生活号(原服务窗) 7-银联正扫 8-银联反扫 9-行业码; 示例值:"1,3,4,5" easyFeeBean String Y 费率信息 费率信息(json 数据 key:easyFeeBean)
参数 类型(长度) 必填 参数说明 rscanWxFeeType String(1) Y 微信费率类型 1-百分比,2-固定金额;示例值:1 rscanWxFeeRate String(50) N 微信费率% rscanWxFeeType为百分比时必填,示例值:0.3 表示 0.003 rscanWxFeeNum String Y 微信费率金额 单位:分 rscanWxFeeType为百分比时为封底金额,示例值:封底0.01元,填写1; rscanWxFeeType为固定金额时为固定金额,示例值:固定金额0.5元,填写50 rscanAliFeeType String(50) Y 支付宝费率类型 1-百分比,2-固定金额;示例值:1 rscanAliFeeRate String(50) N 支付宝费率% rscanWxFeeType为百分比时必填,示例值:0.3 表示 0.003 rscanAliFeeNum String(50) Y 支付宝费率金额 单位:分 rscanAliFeeType为百分比时为封底金额,示例值:封底0.01元,填写1; rscanAliFeeType为固定金额时为固定金额,示例值:固定金额0.5元,填写50 rscanDebitType1 String(50) Y 银联借记卡一档费率类型 1-百分比,2-固定金额;示例值:1 rscanDebitNum1 String(50) Y 银联借记卡一档金额 rscanDebitType1为百分比时为借记卡一档费率,示例值:0.3 表示 0.003, rscanDebitType1为固定金额时为固定金额 单位分,示例值:固定金额0.5元,填写50 rscanDebitMin1 String(50) N 银联借记卡一档金额封底金额 单位:分 rscanDebitType1为百分比必填,示例值:封底0.01元,填写1 rscanDebitMax1 String(50) N 银联借记卡一档金额封顶金额 单位:分 rscanDebitType1为百分比必填,示例值:封顶9.99元,填写999 rscanDebitType2 String(50) Y 银联借记卡二档费率类型 1-百分比 2-固定金额;示例值:1 rscanDebitNum2 String(50) Y 银联借记卡二档金额 rscanDebitType2为百分比时为借记卡二档费率,示例 0.3表示0.003 , rscanDebitType2为固定金额时为固定金额 单位:分,示例值:固定金额0.5元,填写50 rscanDebitMin2 String(50) N 银联借记卡二档金额封底金额 单位:分, rscanDebitType2为百分比时必填,示例值:封底0.01元,填写1 rscanDebitMax2 String(50) N 银联借记卡二档金额封顶金额 单位:分, rscanDebitType2为百分比时必填,示例值:封顶9.99元,填写999 rscanCreditType1 String(50) Y 银联贷记卡一档费率类型 1-百分比 2-固定金额;示例值:1 rscanCreditNum1 String(50) Y 银联贷记卡一档金额 rscanCreditType1为百分比时为贷记卡一档费率,示例值:0.3 表示 0.003, rscanCreditType1为固定金额时为固定金额 单位:分,示例值:固定金额0.01元,填写1 rscanCreditMin1 String(50) N 银联贷记卡一档金额封底金额 单位:分, rscanCreditType1为百分比必填,示例值:封底0.01元,填写1 rscanCreditType2 String(50) Y 银联贷记卡二档费类型 1-百分比 2-固定金额;示例值:1 rscanCreditNum2 String(50) Y 银联贷记卡二档金额 rscanCreditType2为百分时为贷记卡二档费率,示例值:0.3 表示 0.003, rscanCreditType2为固定金额时为固定金额 单位:分,示例值:固定金额0.01元,填写 rscanCreditMin2 String(50) N 银联贷记卡二档金额封底金额 单位:分, rscanCreditType2为百分比必填,示例值:封底0.01元,填写1
5、响应参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据同步回执给商户。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
5.1、公共响应参数
| 参数 | 类型(字节长度) | 必填 | 参数说明 |
|---|---|---|---|
| ver | String(3) | Y | 版本号 固定值1.0 |
| src | String(50) | Y | 由银盛生成的接入机构号,请联系银盛客户经理获取。示例值:ORG20210427160753 |
| msgCode | String(20) | Y | 接口代码 固定值Merchant |
| method | String(30) | Y | 接口方法 固定值onlineTrading |
| signType | String(10) | Y | 报文签名算法,RSA、SM 注:应监管要求签名算法变更为国密,新接入商户请选择SM |
| charset | String(10) | Y | 字符集 固定值UTF-8 |
| reqFlowId | String(20) | Y | 请求流水号 示例值:202110011944011101 注:该字段不参与签名 |
| signValue | String | Y | 签名串,请参考"签名样例以及demo下载" |
| data | String | Y | 业务参数(JSON数据) |
5.2、业务响应参数
data(JSON数据)
| 参数 | 类型(字节长度) | 必填 | 参数说明 |
|---|---|---|---|
| code | String(2) | Y | 返回码 00-成功; 50-超时; 99-失败 |
| note | String(100) | Y | 返回码说明 |
6、样例
public String onlineTrading() throws Exception {
/** 1、组装请求参数*/
//接入机构号: 入网申请后发放
String src = "ORG20210927162704";
Map<String, String> params = new HashMap<String, String>();
params.put("ver", "1.0");
params.put("src", src);
params.put("msgCode", "Merchant");
params.put("method", "onlineTrading");
params.put("signType", "RSA");
params.put("charset", "UTF-8");
/** 2.业务参数赋值: 业务参数说明详细见接口文档*/
/** -----------组装业务参数开始 设置为null相当于map里面没有put这个参数,只是做参数的参考,具体按自己业务设置对应字段的值-------------*/
Map<String,Object> paramsMap = new HashMap<>();
paramsMap.put("mercId","826690041210008");//银盛商户号
paramsMap.put("accOrgNo","ORG20210927162704");//接入机构号
paramsMap.put("scanServiceOpen","1,3,4,5");//交易权限1微信小程序支付2微信公众号支付(新)3微信反扫4支付宝正扫5支付宝反扫6支付宝服务商7银联正扫8银联反扫9行业码开通权限多个用,隔开。如(1,3,5)
//组装费率参数
Map<String,Object> easyFeeBeanMap = new HashMap<>();
easyFeeBeanMap.put("rscanWxFeeType","1");//微信费率类型(1百分比,2固定金额)
easyFeeBeanMap.put("rscanWxFeeRate","0.55");//微信费率% -- rscanWxFeeType为1时必填
easyFeeBeanMap.put("rscanWxFeeNum","1");//微信金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanAliFeeType","1");//支付宝费率类型(1百分比,2固定金额)
easyFeeBeanMap.put("rscanAliFeeRate","0.55");//支付宝费率% -- rscanAliFeeType为1时必填
easyFeeBeanMap.put("rscanAliFeeNum","1");//支付宝金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanDebitType1","1");//银联借记卡一档费率类型(1百分比,2固定金额)
easyFeeBeanMap.put("rscanDebitNum1","0.55");//银联借记卡一档金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanDebitMin1","0.1");//银联借记卡一档金额(百分比时为封底金额--rscanDebitType1为1必填)
easyFeeBeanMap.put("rscanDebitMax1","10");//银联借记卡一档金额(百分比时为封顶金额--rscanDebitType1为1必填)
easyFeeBeanMap.put("rscanDebitType2","1");//银联借记卡二档费率类型(1百分比 2固定金额)
easyFeeBeanMap.put("rscanDebitNum2","0.55");//银联借记卡二档金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanDebitMin2","0.1");//银联借记卡二档金额(百分比时为封底金额-- rscanDebitType2为1必填)
easyFeeBeanMap.put("rscanDebitMax2","10");//银联借记卡二档金额(百分比时为封顶金额-- rscanDebitType2为1必填)
easyFeeBeanMap.put("rscanCreditType1","1");//银联贷记卡一档费率类型(1百分比 2固定金额)
easyFeeBeanMap.put("rscanCreditNum1","0.55");//银联贷记卡一档金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanCreditMin1","0.1");//银联贷记卡一档金额(rscanCreditType1为1必填)
easyFeeBeanMap.put("rscanCreditType2","1");//银联贷记卡二档费类型(1百分比 2固定金额)
easyFeeBeanMap.put("rscanCreditNum2","0.55");//银联贷记卡二档金额(百分比时候为封底金额,固定金额时为固定金额)
easyFeeBeanMap.put("rscanCreditMin2","1");//银联贷记卡二档金额(rscanCreditType2为1必填)
//设置费率参数
paramsMap.put("easyFeeBean",easyFeeBeanMap);
/** 3.业务参数加密: 业务参数说明详细见接口文档*/
//加密密钥aeskey: 加密密钥证书入网申请后发放
String aesKey = "A81F41DE7406CC1566579A751D93CA7A";
String addMercData = JSONObject.toJSONString(paramsMap);
String creData = DesUtil.encryptExtraData(aesKey, "UTF-8", addMercData);
logger.info("ScanMercApi-invalidSign-AesData:"+creData);
params.put("data", creData);
/**4、对数据进行加签,并存入请求数据*/
//客户端私钥证书路径: 证书在入网流程中自己申请的
String privateKeyFilePath = "D:/datas/yulong_666.pfx";
//客户端私钥密钥: 私钥密钥在入网流程中自己申请私钥证书时填写的
String privateKeyPassword = "123456";
//请求流水号: 根据自己要求生成,生成有意义的请求流水号
String reqFlowId = String.valueOf(System.currentTimeMillis());
String sign = YsfSignUtil.sign(params, privateKeyFilePath, privateKeyPassword);
logger.info("ScanMercApi-onlineTrading-signData:"+sign);
params.put("signValue", sign);
params.put("reqFlowId", reqFlowId);
/**5、发送请求*/
//扫码服务商“商户资料变更”修改地址,具体以文档为准
String reqUrl = "http://orgmerc.ysepay.com:8880/saas/orgScan/onlineTrading";
String result = HttpClientUtil.sendPostJson(reqUrl,JSONObject.toJSONString(params));
logger.info("ScanMercApi-invalidSign-resultData:"+result);
/**6、结果验签*/
//银盛公钥证书路径: 证书入网申请后发放
String ysPublicKeyFilePath = "D:/datas/businessgate.cer";
JSONObject jsonObject = JSONObject.parseObject(result);
// 加签值
String sinaValue = jsonObject.getString("signValue");
// 加签内容
String respData = jsonObject.getString("data");
Map<String, String> dataMap = null;
if(!StringUtil.isEmpty(respData)){
dataMap = JSONObject.parseObject(respData,Map.class);
}
boolean flag = YsfSignUtil.rsaCheckContent(dataMap,sinaValue,ysPublicKeyFilePath);
if(!flag){
throw new Exception("check sign error");
}
return result;
}