java使用e签宝实现合同文件签名盖章

过程细节比较多,官网写得也不太明白,上面只是写了大概步骤,不懂的可以私聊

注意:测试沙箱环境时合同模板,模板上设置的填写表单(也就是控件)只能用官方提供的接口创建

         切换正式后,可直接使用官网上手动创建的模板,因为代码创建的模板控件位置不好计算;最好使用手动在平台上创建的,创建后点击设置进入,右侧可查看模板ID,再根据模板ID查询控件相关信息,填充控件内容即可发起签署

第一步:登录e签宝官网,注册,进入开发者控制条,添加应用,获取应用ID,应用secert

   https://open.esign.cn/my-apps/home

第二步:下载java dome, 我选择的是(1、OAuth2.0鉴权方式)

第三步:将dome解压,直接放入项目使用,替换dome中这个文件下为你的应用id和secert

dome测试整个流程为类:OneStepStart ,从创建模板到到签署完成,在这里测试即可

第四步:这里主要是描述一下操作流程

      使用沙箱测试,不能直接使用在官网上创建的模板,切换到正式环境后才能使用

     测试时,只能根据接口创建模板

    沙箱测试流程:创建模板,添加模板控件,赋值到控件上(控件的意思:文档上你自己需要填写内容的文本框称为控件),创建签署账号,一件发起签署,

                             签署成功异步通知回调,调用接口归档当前这一单(必须归档后才能查看你签署的文件)

public static void main(String[] args) {
        try {
            LOGGER.info("-------------1.--------获取token start------------------------------");
            TokenHelper.getTokenData();

            String filePath = "D:/files/aoduo_xy.pdf";
            //创建模板 templateId -> 1e6b5e0118c049dfb54b8ff82746f678
            LOGGER.info("-------------2.--------沙箱环境必须创建-创建模板------生产环境直接登录e签宝后台查询模板ID即可或通过接口获取------------------------");
            /*JSONObject file = FileTemplateHelper.createTemplateByUpload(filePath, "aoduo_xy_3.pdf");
            System.out.println("创建模板返回参数:"+file.toString());*/

            LOGGER.info("--------------3.-------上传创建的模板------------------------------");
            /*String uploadUrl=file.getString("uploadUrl");
            FileTemplateHelper.streamUpload(filePath, uploadUrl);*/

            LOGGER.info("---------------------模板上传状态查询------------------------------");
            /*JSONObject template = FileTemplateHelper.getUploadFileStatus( file.getString("templateId"));
            System.out.println("模板上传状态返回参数:"+template.toString());*/

            LOGGER.info("---------------------查询模板详情------------------------------");
            /*JSONObject jsonObject = FileTemplateHelper.qryComponents("1e6b5e0118c049dfb54b8ff82746f678");
            System.out.println(jsonObject);*/

            LOGGER.info("-------------4.--------添加模板控件------------------------------");
            /*String templateId="1e6b5e0118c049dfb54b8ff82746f678";
            List<String> res = FileTemplateHelper.addComponents(templateId);
            System.out.println("添加模板控件返回信息:"+res.toString());*/

            LOGGER.info("---------------------查询e签宝官网模板信息,获取模板ID------------------------------");
            /*JSONObject jsonObject = FileTemplateHelper.qryFlowTemplates(1,10);
            System.out.println(jsonObject);*/


            LOGGER.info("---------------------根据模板ID填充模板控件内容------------------------------");
            Map<String,String> simpleFormFields=new HashMap<>();
            //控件ID
            simpleFormFields.put("cc44677e2f21402c8aa818a95eb60ab4","江苏天***");
            simpleFormFields.put("72123d1c7b3e47dfbc43a1f5b987dc24","江苏省连云港市海州****");
            simpleFormFields.put("6e2bfe7b3f9e4e6fa02234c90744fe2e","浙江省******");
            JSONObject jsonObject = FileTemplateHelper.createByTemplate("奥朵平台","1e6b5e0118c049dfb54b8ff82746f678",simpleFormFields);
            System.out.println("根据模板ID填充模板控件内容: "+jsonObject);

            LOGGER.info("---------------------创建个人账号start-------------------------------");
            JSONObject personAcctJson = AccountHelper.createPersonAcct("1586****4743", "何**", null, "52200520001001****", "1586****743", null);
            String acctId = personAcctJson.getString("accountId");
            System.out.println("acctId: "+acctId);

            LOGGER.info("---------------------一步发起签署start---------------------------------");
            String fileId=jsonObject.getString("fileId");
            String fileName = "奥朵云运动户外供应链平台商家入驻协议.pdf";
            JSONObject flowJson = SignHelper.oneStepFlow(null, fileId, fileName, acctId);
            String flowId = flowJson.getString("flowId");

            LOGGER.info("---------------------签署流程开启 start-----------------------------");
            SignHelper.startSignFlow(flowId);

//			LOGGER.info("---------------------签署完成后,通知回调,平台方进行签署流程归档 start-----------------------------");
			SignHelper.archiveSignFlow(flowId);
//			
//			LOGGER.info("---------------------归档后,获取文件下载地址 start-----------------------------");
//			SignHelper.downloadFlowDoc(flowId);

        }catch (Exception e){
            e.printStackTrace();
        }
    }

线上流程:直接在官网上获取模板ID,根据接口查询模板控件信息(控件的意思:文档上你自己需要填写内容的文本框称为控件),填充控件内容,发起签署,回调通知处理你自己的业务逻辑,归档(必须归档后才能查看你签署的文件)

线上模板制作如下,创建好,点击左侧设置进入后可以查看模板ID

以下代码是直接使用e签宝的模版,具体设置的流程

 public static void main(String[] args) {
        try {
            LOGGER.info("-------------1.--------获取token start------------------------------");
            TokenHelper.getTokenData();


            LOGGER.info("-------------2--------查询e签宝官网模板信息,获取模板ID------或直接登录平台:https://web.esign.cn/templates-manage/manage,查看文档获取:https://open.esign.cn/doc/opendoc/saas_api/gl4g37 ------------------------");
            JSONObject jsonObject2 = FileTemplateHelper.qryFlowTemplates(1,10);
            System.out.println(jsonObject2);

            LOGGER.info("-------------3.-------根据模板ID,查询模板详情------------------------------");
            JSONObject jsonObject3 = FileTemplateHelper.qryComponents("1e6b5e0118c049dfb54b8ff82746f678");
            System.out.println(jsonObject3);

            LOGGER.info("--------------4.-------根据模板ID填充模板控件内容------------------------------");
            Map<String,String> simpleFormFields=new HashMap<>();
            //控件ID
            simpleFormFields.put("cc44677e2f21402c8aa818a95eb60ab4","江**");
            simpleFormFields.put("72123d1c7b3e47dfbc43a1f5b987dc24","江苏省连云港市***");
            simpleFormFields.put("6e2bfe7b3f9e4e6fa02234c90744fe2e","浙江省杭州市临平**");
            JSONObject jsonObject = FileTemplateHelper.createByTemplate("奥朵平台","1e6b5e0118c049dfb54b8ff82746f678",simpleFormFields);
            System.out.println("根据模板ID填充模板控件内容: "+jsonObject);

            LOGGER.info("--------------5.-------创建个人账号start-------------------------------");
            JSONObject personAcctJson = AccountHelper.createPersonAcct("1586****743", "何*", null, "522***200******7893", "158****743", null);
            String acctId = personAcctJson.getString("accountId");
            System.out.println("acctId: "+acctId);

            LOGGER.info("----------------7.-----一步发起签署start---------------------------------");
            String fileId=jsonObject.getString("fileId");
            String fileName = "奥朵云运动户外供应链平台商家入驻协议.pdf";
            JSONObject flowJson = SignHelper.oneStepFlow(null, fileId, fileName, acctId);
            String flowId = flowJson.getString("flowId");

            LOGGER.info("----------------8.-----签署流程开启 start-----------------------------");
            SignHelper.startSignFlow(flowId);

            LOGGER.info("----------------9.-----异步通知处理业务-----------------------------");
            
            
            LOGGER.info("----------------10.-----通知成功后调用归档接口进行归档,才可下载签署文档-----------------------------");

        }catch (Exception e){
            e.printStackTrace();
        }
    }

### 实现Java应用中集成e进行电子签名盖章 为了在Java应用程序中集成e实现电子签名盖章功能,需遵循特定的工作流来完成整个过程。此工作流涉及几个关键步骤,包括但不限于获取模板ID、查询并填充模板中的控件信息以及发起署请求。 #### 获取依赖库 首先,在`pom.xml`文件中加入必要的依赖项以支持操作所需的API调用和其他辅助工具: ```xml <dependencies> <!-- e SDK --> <dependency> <groupId>com.esign</groupId> <artifactId>e-sign-sdk-java</artifactId> <version>LATEST_VERSION</version> </dependency> <!-- Bouncy Castle 加密库用于处理数字证书和签名 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.70</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-ext-jdk15on</artifactId> <version>1.70</version> </dependency> </dependencies> ``` 这些依赖项确保了能够有效地管理和验证数字签名,并且可以与e的服务端口无缝对接[^1]。 #### 初始化客户端实例 创建一个EsignClient对象以便于后续的操作,比如发送HTTP请求给e服务器。通常情况下,这一步骤会涉及到设置访问凭证(Access Key ID 和 Secret Access Key)以及其他配置选项。 ```java import com.esign.sdk.EsignClient; public class ESignDemo { private static final String ACCESS_KEY_ID = "your_access_key_id"; private static final String SECRET_ACCESS_KEY = "your_secret_access_key"; public static void main(String[] args) throws Exception { EsignClient client = new EsignClient(ACCESS_KEY_ID, SECRET_ACCESS_KEY); // 继续执行其他操作... } } ``` #### 查询模板详情 利用之前初始化好的client对象去调用相应的API方法来检索指定模板的信息,特别是其中定义的各种控件及其属性。这部分对于理解文档结构至关重要,因为之后的数据填充正是基于这些元数据来进行的。 ```java // 假设已经获得了有效的templateId String templateId = "example_template_id"; Map<String, Object> response = client.getTemplateInfo(templateId); System.out.println(response); // 输出模板的具体信息供调试使用 ``` 一旦得到了关于各个字段位置的知识,则可以根据实际需求向它们赋值。 #### 设置控件内容并提交署申请 当所有必填项都已准备好后,就可以准备构建最终要传递给e系统的JSON格式的消息体了。这里需要注意的是,除了基本的身份认证外,还需要指明具体的署方式——即是由个人还是企业作为主体来进行字/盖章;另外就是明确指出哪些地方应该放置印章图像等细节问题。 ```json { "templateId": "example_template_id", "formFieldValues": [ {"fieldName":"name","fieldValue":"张三"}, {"fieldName":"date","fieldValue":"2023-10-09"} ], "sealPosition": [{"x": 100,"y": 200}] } ``` 最后一步便是正式发出署指令,等待对方确认回执后再做进一步的动作,如下载已完成版本的PDF文件存档保存起来。 ```java response = client.createSealRequest( templateId, formFieldValuesJsonArray, sealPositionsList ); if (response.containsKey("success") && Boolean.TRUE.equals(response.get("success"))) { System.out.println("署成功!"); } else { System.err.println("署失败:" + response.toString()); } ``` 以上就是在Java环境中借助第三方服务提供商e实施自动化电子约的一个简化版流程概述[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hexu_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值