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("15868164743", "何旭", null, "522425200010017893", "15868164743", 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("15868164743", "何旭", null, "522425200010017893", "15868164743", 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();
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414558.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】面试手撕防抖

引入 防抖可是前端面试时最频繁考察的知识点了&#xff0c;首先&#xff0c;我们先了解防抖的概念是什么。咳咳。&#x1f440; 防抖&#xff1a; 首先它是常见的性能优化技术&#xff0c;主要用于处理频繁触发的浏览器事件&#xff0c;如窗口大小变化、滚动事件、输入框内容…

神经网络结构搜索(NAS)

华为诺亚AI系统工程实验室主任刘文志解读如何使用AutoML预测基站流量 - 知乎讲师介绍&#xff1a;刘文志&#xff08;花名风辰&#xff09;&#xff0c;华为诺亚AI系统工程实验室主任&#xff0c;异构并行计算专家&#xff0c;毕业于中国科学院研究生院&#xff0c;闻名于并行计…

2024Java大厂面试集合,java面试题库及答案

前言 Spring 也算有多年的历史了&#xff0c;已成为Java应用程序开发框架的事实标准。在如此悠久的历史背景下&#xff0c;有人可能会认为Spring放慢了脚步&#xff0c;躺在了自己的荣誉簿上&#xff0c;再也做不出什么新鲜的东西&#xff0c;或者是让人激动的东西。甚至有人说…

Django配置静态文件

Django配置静态文件 目录 Django配置静态文件静态文件配置调用方法 一般我们将html文件都放在默认templates目录下 静态文件放在static目录下 static目录大致分为 js文件夹css文件夹img文件夹plugins文件夹 在浏览器输入url能够看到对应的静态资源&#xff0c;如果看不到说明…

【Maven】Maven 基础教程(一):基础介绍、开发环境配置

Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置 1.Maven 是什么1.1 构建1.2 依赖 2.Maven 开发环境配置2.1 下载安装2.2 指定本地仓库2.3 配置阿里云提供的镜像仓库2.4 配置基础 JDK 版本2.5 配置环境变量 1.Maven 是什么 Maven 是 Apache 软件…

网安入门18-XSS(靶场实战)

HTML实体化编码 为了避免 XSS 攻击&#xff0c;会将<>编码为<与>&#xff0c;这些就是 HTML 实体编码。 编码前编码后不可分的空格 < (小于符号)< > (大于符号)> & (与符号)&amp;″ (双引号)&quot;’ (单引号)&apos;© (版权符…

栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 首先回顾一下栈的性质&#xff1a; 栈的存储数据的原则是“后入先出”&#xff0c; 先入的在栈底&#xff0c; 后入的在栈顶。 弹出数据时在栈顶弹出。 开始实现栈的接口 栈的所有函数接口 //栈的初始化 void StackInit(Stack* pst); //入栈…

Monkey测试必现ANR问题分析与解决

AAA项目Monkey测试必现ANR问题分析 【摘要】ANR(Application Not responding)&#xff0c;是指应用程序未响应&#xff0c;Android系统对于一些事件需要在一定的时间范围内完成&#xff0c;如果超过预定时间能未能得到有效响应或者响应时间过长&#xff0c;比如输入事件5s内未…

大模型日报|今日必读的7篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.Sora综述&#xff1a;大型视觉模型的背景、技术、局限和机遇 Sora 是 OpenAI 于 2024 年 2 月发布的文生视频人工智能&#xff08;AI&#xff09;模型。经过训练&#xff0c;Sora 能根据文字说明生成逼真或富有想象…

2.27数据结构

1.链队 //link_que.c #include "link_que.h"//创建链队 Q_p create_que() {Q_p q (Q_p)malloc(sizeof(Q));if(qNULL){printf("空间申请失败\n");return NULL;}node_p L(node_p)malloc(sizeof(node));if(LNULL){printf("申请空间失败\n");return…

一周学会Django5 Python Web开发-Django5列表视图ListView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计27条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Java毕业设计-基于springboot开发的冬奥会科普平台系统-毕业论文+PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、登录注册2、系统功能模块3、管理员功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的冬奥会科普平台系统…

CrossOver2024软件虚拟机下载及使用方法教程步骤

CrossOver的使用方法相对简单&#xff0c;以下是详细的步骤&#xff1a; 下载与安装&#xff1a;首先&#xff0c;您需要从CrossOver的官方网站下载适合您操作系统&#xff08;Mac OS或Linux&#xff09;的软件版本。下载完成后&#xff0c;解压文件并按照提示进行安装。安装过…

强大的Docker入门知识

目录 一、Docker简介 1.1、Docker是 1.2、Docker通常会在以下情况下使用&#xff1a; 1.3、Docker和VMware区别 1.4、Docker 的优点 二、环境配置 2.1、代码操作 2.2、效果演示 2.3、配置镜像仓库 开始配置 三、基本命令 3.1、Docker基本命令 3.2、Docker镜像常用…

高并发数据采集:Ebay商家信息多进程爬虫的进阶实践

背景 Ebay作为全球最大的电子商务平台之一&#xff0c;其商家信息包含丰富的市场洞察。然而&#xff0c;要高效获取这些信息&#xff0c;就需要利用先进的技术手段。本文将深入探讨如何通过并发加速技术&#xff0c;实现Ebay商家信息多进程爬虫的最佳实践方法&#xff0c;并附…

分布式存储 ZBS 的 RoCE 技术支持与大数据应用场景性能评测

作者&#xff1a;深耕行业的 SmartX 金融团队 闫海涛 在《解决 SAN 交换机“卡脖子”并升级存储架构&#xff1f;一文解析 RoCE 与相关存储方案趋势》文章中&#xff0c;我们分析了如何利用支持 RoCE 技术的分布式存储&#xff0c;同步实现 IT 基础架构的信创转型与架构升级&a…

Linux中 LVM 逻辑盘卷管理

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— LVM 代表逻辑卷管理器&#xff0c;它是一种用于 Linux 和类 Unix 操作系统的磁盘管理和存储技术。LVM 允许用…

Linux终端中的VI/VIM编辑器详细说明

vi/vim —— 终端中的编辑器 目标 vi/vim 简介打开和新建文件三种工作模式常用命令分屏命令常用命令速查图 01. vi 简介 vi 或 vim 是一个强大的文本编辑器&#xff0c;它最初是由 vi 的作者布莱姆米勒开发的&#xff0c;后来由吉多范罗苏姆及其团队进行了扩展和维护&#…

opencascade c#例程解析

1.编译 将msvc.bat文件拖入vs2022的x64 native tools&#xff0c;即可 2.about.xaml <Windowxmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"x:Class"IE_WPF_WinForms…

Linux之定时任务02

一、什么是crond Linux 中 crond 就是定时任务&#xff0c;即根据 crond 指定的时间&#xff0c;由系统按指定的时间&#xff0c;周期性&#xff0c;自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务&#xff0c;如果有且符合触发条件&#xff0c;…