电子合同作废
1、修订记录
修订记录 |
日期 |
说明 |
作者 |
1.0 |
2021.11.10 |
初稿 |
薛晨 |
2、业务说明
(1)接口说明
商户未签约电子合同前,调用此接口作废电子合同。 注:未签约的状态包含0-申请中 1-待签署时
3、请求地址
4、请求参数说明
4.1、公共请求参数
参数 |
类型(长度) |
必填 |
参数说明 |
ver |
String(3) |
Y |
版本号 固定值1.0 |
src |
String(50) |
Y |
由银盛生成的接入机构号,请联系银盛客户经理获取。示例值:ORG20210427160753 |
msgCode |
String(20) |
Y |
接口代码 固定值Merchant |
method |
String(30) |
Y |
接口方法 固定值invalidSign |
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 |
业务参数(des加密成密文字符串) |
4.2、业务请求参数
data加密前的json数据明文字符串
参数 |
类型(长度) |
必填 |
参数说明 |
sysSignFlowId |
String(50) |
Y |
合作方系统签约流水,商户审核、重发签约短信接口返回签约流水 |
5、响应参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据同步回执给商户。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
5.1、公共响应参数
参数 |
类型(长度) |
必填 |
参数说明 |
ver |
String(3) |
Y |
版本号 固定值1.0 |
src |
String(50) |
Y |
由银盛生成的接入机构号,请联系银盛客户经理获取。示例值:ORG20210427160753 |
msgCode |
String(20) |
Y |
接口代码 固定值Merchant |
method |
String(30) |
Y |
接口方法 固定值invalidSign |
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数据)
参数 |
类型(字节长度) |
必填 |
参数说明 |
sysSignFlowId |
String(32) |
N |
合作方系统签约流水,成功时返回 |
code |
String(2) |
Y |
返回码 00-成功; 50-超时; 99-失败 |
note |
String(100) |
Y |
返回码说明 |
6、样例
public String invalidSign() 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", "invalidSign");
params.put("signType", "RSA");
params.put("charset", "UTF-8");
/** 2.业务参数赋值: 业务参数说明详细见接口文档*/
/** -----------组装业务参数开始 设置为null相当于map里面没有put这个参数,只是做参数的参考,具体按自己业务设置对应字段的值-------------*/
Map<String,Object> dateParams = new HashMap<>();
dateParams.put("sysSignFlowId","MAN202109280009848");
/** 3.业务参数加密: 业务参数说明详细见接口文档*/
//加密密钥aeskey: 加密密钥证书入网申请后发放
String aesKey = "A81F41DE7406CC1566579A751D93CA7A";
String addMercData = JSONObject.toJSONString(dateParams);
String creData = DesUtil.encryptExtraData(aesKey, "UTF-8", addMercData);
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);
params.put("signValue", sign);
params.put("reqFlowId", reqFlowId);
/**5、发送请求*/
//扫码服务商“商户资料变更”修改地址,具体以文档为准
String reqUrl = "http://orgmerc.ysepay.com:8880/saas/orgSign/invalidSign";
String result = HttpClientUtil.sendPostJson(reqUrl,JSONObject.toJSONString(params));
/*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;
}