# dss-java-sdk **Repository Path**: fadada-cloud/dss-java-sdk ## Basic Information - **Project Name**: dss-java-sdk - **Description**: Fadada DSS Java SDK - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: 1.3.2 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-07-18 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 法大大 DSS Java SDK 说明 ## 简介 法大大数字签名套件(专属版)(Digital Signature Suite),简称 DSS。DSS 定位为电子签章工具,旨在为客户提供电子签名开放服务能力,帮助客户通过接口灵活实现各种业务目标。 DSS通过API与EUI(可集成页面)的形式为客户提供电子签相关产品集成服务。通过与企业的各种数字化业务系统深度集成,实现合同签署由纸质签署到线上签署的数字化转型,从而帮助企业签约提效、降低合同管理成本,为企业的签署业务保驾护航。 法大大 DSS Java SDK 是一个用于与法大大数字签名套件(DSS)进行快速集成的开发工具包。 ## 依赖环境 - **JDK 版本**:1.8 或以上 - **构建工具**:Maven 3.x - **依赖库**: - `com.google.code.gson:gson` - `org.slf4j:slf4j-reload4j` - `org.bouncycastle:bcprov-jdk18on`(用于 SM 加密算法支持) ## 安装说明 ### Maven 引入 在您的 `pom.xml` 文件中添加以下依赖: ```xml io.gitee.fadada-cloud dss-java-sdk 1.3.2-8 org.slf4j slf4j-reload4j 2.0.17 org.bouncycastle bcpkix-jdk18on 1.82 com.google.code.gson gson 2.13.2 ``` ### 手动安装 您也可以将 SDK 的 JAR 包手动安装到本地 Maven 仓库: ```bash Maven中央仓库地址:https://central.sonatype.com/artifact/io.gitee.fadada-cloud/dss-java-sdk 直接引入Jar(上传到本地私有仓库),下载发行版(选择最新版下载): https://gitee.com/fadada-cloud/dss-java-sdk/releases ``` ## 初始化 SDK 客户端 在调用任何 API 之前,您需要先初始化 SDK 客户端: ```java // DSS API地址,具体项目经理提供为准,参数做成配置项可进行配置 private static final String host = "https://dss-uat.fadada.com"; // DSS API应用ID,具体项目经理提供为准,参数做成配置项可进行配置 private static final String appId = "123456"; // DSS API应用秘钥,具体项目经理提供为准,参数做成配置项可进行配置 private static final String appSecret = "lqdn***w3u5rQCLznHz******hs8Es"; // 初始化 DssApiSdkFactory.init(host, appId, appSecret); // 当有明确的传输安全要求时,可使用加密方式初始化(SM4、AES、SM2、RSA),两种初始化方式二选一 // rsaDssPublicKey(公钥)、rsaPrivateKey(私钥),参数做成配置项可进行配置 // 公私钥生成详见接口文档:https://dss.fadada.com/docs/doc-6762321(按文档生成配置后,还找项目经理将appId设置成支持数据传输加密模式) // DssApiSdkFactory.init(host, appId, appSecret, "SM4", rsaDssPublicKey, rsaPrivateKey); ``` ## 业务方法调用示例 基于DSS接口的灵活组装调用,可充分满足业务场景的签署需求,并能确保良好的用户体验,这里展示最小对接示例。 ![image.png](https://cdn.fadada.com/dist/static/c/44/20250723151057_097cac6a-228a-4ff4-a269-4e505ffb8747.png) ### 1. 申请证书 参考接口文档:https://dss.fadada.com/docs/doc-6424695 ```java // 从 DssApiSdkFactory 中获取 ZxcaApiClient 实例,用于调用豸信CA相关接口 ZxcaApiClient zxcaApiClient = DssApiSdkFactory.zxcaApiClient; // 创建个人证书申请请求对象 RaCertApplyPersonRequest raCertApplyPersonRequest = new RaCertApplyPersonRequest(); // 设置申请人真实姓名 raCertApplyPersonRequest.setRealName("张三"); // 设置申请人证件类型,此处为身份证 raCertApplyPersonRequest.setIdCertType("identity_card"); // 设置申请人身份证号码 raCertApplyPersonRequest.setIdCertNo("110101199003076666"); // 豸信CA配置的认证方案ID,为空时使用默认方案,配置多个方案时可通过该参数指定,建议将该参数作为配置项进行配置 raCertApplyPersonRequest.setPlanId("1928260135212888064"); // 调用 ZxcaApiClient 的 raCertApplyPerson 方法发起个人证书申请请求,并获取响应结果 DssResponse certApplyInfoResponseDssResponse = zxcaApiClient.raCertApplyPerson(raCertApplyPersonRequest); // 判断证书申请是否成功 if (certApplyInfoResponseDssResponse.isSuccess()) { // 若申请成功,从响应结果中获取证书申请响应对象 CertApplyInfoResponse certApplyInfoResponse = certApplyInfoResponseDssResponse.getData(); // 打印个人证书编号,用于后续签署时使用 System.out.println("个人证书编号:" + certApplyInfoResponse.getRsaCertInfo().getCertificateId()); } else { // 若申请失败,打印失败信息 System.out.println("证书申请失败:" + certApplyInfoResponseDssResponse.getMessage()); } ``` ### 2. 制作印章 参考接口文档:https://dss.fadada.com/docs/doc-5322939 ```java // 从 DssApiSdkFactory 中获取 SealApiClient 实例,用于调用印章相关接口 SealApiClient sealApiClient = DssApiSdkFactory.sealApiClient; // 创建个人印章创建请求对象 SealCreateRequest sealRequest = new SealCreateRequest(); // 设置印章显示的文本内容 sealRequest.setSealText("张三"); // 设置印章的样式,此处为rectangle_frame(矩形带框)样式 sealRequest.setSealStyle("rectangle_frame"); // 设置印章盖章规格,签署时印章盖章的尺寸(单位:毫米mm) sealRequest.setSealSize("rectangle_30_16"); // 设置印章颜色,默认红色,遵循RGB16 进制颜色码,如#FFFFFF sealRequest.setSealColor("#FFFFFF"); // 调用 SealApiClient 的 createPerson 方法发起创建个人印章请求,并获取响应结果 DssResponse response = sealApiClient.createPerson(sealRequest); // 判断个人印章创建是否成功 if (response.isSuccess()) { // 若创建成功,从响应结果中获取印章样式信息响应对象 SealStyleInfoResponse sealStyleInfoResponse = response.getData(); // 打印创建成功的个人印章ID,用于后续签署时使用 System.out.println("个人印章ID:" + sealStyleInfoResponse.getSealId()); } else { // 若创建失败,打印失败信息 System.out.println("制作个人印章失败:" + response.getMessage()); } ``` ### 3. 文件上传 参考接口文档:https://dss.fadada.com/docs/doc-6465577 ```java // 从 DssApiSdkFactory 中获取 FileTransferClient 实例,用于调用文件传输相关接口 FileTransferClient fileTransferClient = DssApiSdkFactory.fileTransferClient; // 创建文件上传请求对象 FileUploadRequest request = new FileUploadRequest(); // 设置要上传的文件名称 request.setFileName("d.pdf"); // 设置要上传的文件,Demo使用本地文件路径,实际按照业务需求选择文件流或Url上传 request.setFile(new FileItem("C:\\temp\\d.pdf")); // 调用 FileTransferClient 的 filePreUpload 方法发起文件预上传请求,并获取响应结果 DssResponse response = fileTransferClient.filePreUpload(request); // 判断文件预上传是否成功 if (response.isSuccess()) { // 若上传成功,从响应结果中获取文件信息响应对象 FileGetFileInfoResponse fileGetFileInfoResponse = response.getData(); // 打印上传成功后的文件ID,用于后续签署时使用 System.out.println("文件上传ID:" + fileGetFileInfoResponse.getFileId()); } else { // 若上传失败,打印失败信息 System.out.println("文件上传失败:" + response.getMessage()); } ``` ### 4. 文件签署 ```java // 从 DssApiSdkFactory 中获取 FileSignClient 实例,用于调用文件签署相关接口 FileSignClient fileSignClient = DssApiSdkFactory.fileSignClient; // 创建文件签署请求对象 FileSignSignRequest fileSignSignRequest = new FileSignSignRequest(); // 设置业务自定义签署交易号,确保唯一性,用于后续查询签署状态等操作 fileSignSignRequest.setTransactionId("lqdnQUZw3u5rQCLznHz7fEvuzdjhs8Es"); // 设置文件ID,为上传文件接口返回的文件ID fileSignSignRequest.setFileId("492338925252648960_cpdf"); // 创建签章信息列表 List sealInfos = new ArrayList<>(); // 创建一个签章信息对象 DocSignSealInfo sealInfo = new DocSignSealInfo(); // 设置签章对应的证书ID,为申请证书接口返回的证书ID sealInfo.setCertificateId("492056864220815360"); // 设置印章ID,为制作印章接口返回的印章ID sealInfo.setSealId("478516737198579712"); // 设置签署规则类型为指定位置签署 sealInfo.setRuleType(SignRuleTypeEnum.LOCATION_SIGN.getReadValue()); // 创建一个定位坐标对象 LocateCoordinate locateCoordinate = new LocateCoordinate(); // 设置签章所在的页码 locateCoordinate.setPageNum(1); // 设置签章在页面上的 X 坐标 locateCoordinate.setX(100.0); // 设置签章在页面上的 Y 坐标 locateCoordinate.setY(200.0); // 将定位坐标添加到签章信息对象中 sealInfo.setLocateCoordinates(Arrays.asList(locateCoordinate)); // 将签章信息添加到签章信息列表中 sealInfos.add(sealInfo); // 将签章信息列表设置到文件签署请求对象中 fileSignSignRequest.setSealInfos(sealInfos); // 调用文件签署接口发起文件签署请求,并获取响应结果 DssResponse fileSignSignResponseDssResponse = fileSignClient.fileSignSign(fileSignSignRequest); // 判断文件签署是否成功 if (fileSignSignResponseDssResponse.isSuccess()) { // 若签署成功,从响应结果中获取文件签署响应对象 FileSignSignResponse fileSignSignResponse = fileSignSignResponseDssResponse.getData(); // 打印签署成功后的文件 URL System.out.println("文件签署成功文件url:" + fileSignSignResponse.getFileUrl()); } else { // 若签署失败,打印失败信息 System.out.println("文件签署失败:" + fileSignSignResponseDssResponse.getMessage()); } ``` ### 5. 申请出证报告 参考接口文档:https://dss.fadada.com/docs/doc-5322935 ```java // 从 DssApiSdkFactory 中获取 ReportClient 实例,用于调用报告出证相关接口 ReportClient reportClient = DssApiSdkFactory.reportClient; // 创建报告出证申请请求对象 ReportApplyRequest reportApplyRequest = new ReportApplyRequest(); // 设置需要出证的文件 ID,该 ID 是文件签署成功的文件唯一标识 reportApplyRequest.setFileId("492338925252648960_cpdf"); // 设置业务侧自定义的出证申请编号 reportApplyRequest.setOutApplyNo("oyqyMGDaDCmffYf6"); // 设置报告类型,此处指定为fddEleDataValid(《法大大电子数据验证报告》) reportApplyRequest.setReportType("fddEleDataValid"); // 调用 ReportClient 的 apply 方法发起报告出证申请请求,并获取响应结果 DssResponse reportApplyResponse = reportClient.apply(reportApplyRequest); // 判断报告出证申请是否成功 if (reportApplyResponse.isSuccess()) { // 若申请成功,从响应结果中获取报告出证申请响应对象 ReportApplyResponse reportApplyResponseData = reportApplyResponse.getData(); // 打印出证申请的批次号,可用于后续查询出证状态 System.out.println("出证申请批次号:" + reportApplyResponseData.getApplyBatchNo()); } else { // 若申请失败,打印失败信息 System.out.println("出证申请失败:" + reportApplyResponse.getMessage()); } ```