电子合同下载

1、修订记录

修订记录 日期 说明 作者
1.0 2021.11.10 初稿 薛晨

2、业务说明

(1)接口说明

通过该接口下载已签约的电子合同

3、请求地址

环境 HTTPS请求地址
测试环境 https://appdev.ysepay.com/saas/orgSign/downSign
正式环境 https://ouser.ysepay.com:6443/saas/orgSign/downSign

4、请求参数说明

4.1、公共请求参数

参数 类型(长度) 必填 参数说明
ver String(3) Y 版本号 固定值1.0
src String(50) Y 由银盛生成的接入机构号,请联系银盛客户经理获取。示例值:ORG20210427160753
msgCode String(20) Y 接口代码 固定值Merchant
method String(30) Y 接口方法 固定值downSign
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、样例

public void downSign(HttpServletResponse res) 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", "downSign");
        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);
        logger.info("ScanMercApi-invalidSign-signData:"+sign);
        params.put("signValue", sign);
        params.put("reqFlowId", reqFlowId);

        /*5、发送请求*/
        //扫码服务商“商户资料变更”修改地址,具体以文档为准
        String reqUrl = "http://orgmerc.ysepay.com:8880/saas/orgSign/invalidSign";
        InputStream in = null;
        OutputStream out = null;
        //自己controller接口的HttpServletResponse,通过这个将文件输出到浏览器下载,这个是模拟调用设置为null,需要换为你自己的实例
        //HttpServletResponse res = null;
        try{
            byte[] result = HttpClientUtil.sendPostDownFile(reqUrl,JSONObject.toJSONString(params));
            //通过字节输入流读取返回的字节
            in = new ByteArrayInputStream(result);
            // 设置下载文件的mineType,告诉浏览器下载文件类型
            res.setContentType("application/octet-stream");
            // 设置一个响应头,无论是否被浏览器解析,都下载,文件名称可以自己定义
            String fileName = URLEncoder.encode("电子合同.zip", "UTF-8");
            res.setHeader("Content-disposition", "attachment; filename="+fileName);
            // 将要下载的文件内容通过输出流写到浏览器
            out = res.getOutputStream();
            int len = 0;
            byte[] buffer = new byte[1024];
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        }catch (Exception e){
            logger.info("扫码服务商-电子合同下载-失败:"+e.getCause().getMessage());
            throw e;
            //根据自己要求处理进件失败的业务逻辑
        }
    }

results matching ""

    No results matching ""