跳到主要内容

发起签署流程

使用模版发起流程

控制台创建模版之后,可以使用DescribeTemplates查询模块列表,然后用CreateFlowsByTemplates发起合同。

获取到flowid后,放入CreateSignUrls,获取到电子签小程序的url。可以使用此链接跳转到小程序进行签署。

使用文件发起流程

通过UploadFiles上传文件,使用ChannelCreateFlowByFiles发起合同。

获取到flowid后,放入CreateSignUrls,获取到电子签小程序的url。可以使用此链接跳转到小程序进行签署。

签署方说明

签署方分类

签署方分为下面三类:

参与方类型必传字段说明
个人Name、Mobile个人参与方,目前签署控件只支持:
SIGN_SIGNATURE:手写签名
SIGN_DATE:签署日期
企业签署方Name、Mobile、OrganizationName企业参与方,其中:
OrganizationName:为签署方在工商注册的企业名称
支持的签署控件:
SIGN_SIGNATURE:手写签名
SIGN_SEAL:签署印章
SIGN_DATE:签署日期
企业静默签署方 \ 此签署方由系统自动完成签署。
  • 无需指定参与人信息,签署人信息默认为发起人(Operator)的信息
  • 必须为 SIGN_SEAL 类型的控件指定印章 ID(控件的 ComponentValue 字段)
  • 不能指定 SIGN_SIGNATURE 类型的签署控件,因为系统无法进行手写签名
  • 模板发起合同签署方参数

    参数说明

    下面给出了不同类型的合同签署方的参数:


    # 个人类型
    {
    "RecipientId": "xxxxx", // 模板中对应签署人的 RecipientId 信息
    "ApproverType": "PERSON",
    "Name": "张三",
    "Mobile": "13000000000"
    }

    # 静默签署方
    { // 无需传递签署人信息,内部直接使用发起时Agent中的操作人作为静默签署人
    "RecipientId": "xxxxx", // 模板中对应签署人的 RecipientId 信息
    "ApproverType": "ORGANIZATION"
    }

    # 渠道子客员工
    {
    "OpenId": "employee_open_id",
    "RecipientId": "xxxxx", // 模板中对应签署人的 RecipientId 信息
    "OrganizationOpenId":"org_open_id",
    "OrganizationName": "测试企业",
    "ApproverType": "ORGANIZATION"
    }

    # 渠道外企业签署方
    {
    "NotChannelOrganization": true, // 声明是渠道外的企业
    "OrganizationName": "测试企业",
    "RecipientId": "xxxxx", // 模板中对应签署人的 RecipientId 信息
    "ApproverType": "ORGANIZATION",
    "Name": "张三",
    "Mobile": "13000000000"
    }

    获取 RecipientId 的方法

    RecipientId 可由模板中的 Recipients 数组中获取:

    "Recipients": [
    {
    "RecipientId": "yDxj5UUgydjmlo9dUuO4zjECPLh3sviC",
    "RecipientType": "ENTERPRISE",
    "RoleName": "企业签署方", // 在控制台创建模板时可自行指定
    ...
    },
    {
    "RecipientId": "yDxj5UUgydjmlox6UuO4zjEyRdyOzcD5",
    "RecipientType": "PERSON",
    "RoleName": "个人签署方", // 在控制台创建模板时可自行指定
    ...
    }
    ]

    其中,RoleName 可以在创建模板时自行指定,用于判断签署方:

    img

    注:对于CreateFlowsByTemplates(模板发起合同)接口:

    单B、单C、B2C 场景,可以 “不” 传递模板信息中对应签署人的 RecipientId 信息,我们内部帮您自动推断签署人和模板中控件的绑定关系;

    例如 B2C 场景:

    "FlowApprovers": [
    {
    "ApproverType": "PERSON",
    "Name": "张三",
    "Mobile": "13000000000"
    },
    {
    "OpenId": "employee_open_id",
    "OrganizationOpenId":"org_open_id",
    "OrganizationName": "测试企业",
    "ApproverType": "ORGANIZATION"
    }
    ]

    文件发起合同签署方参数

    参数说明

    下面给出了不同类型的合同签署方的参数:

    # 个人类型
    {
    "Name": "张三",
    "Mobile": "13000000000",
    "ApproverType": "PERSON",
    "SignComponents": [
    {
    "ComponentPosY": 260,
    "ComponentWidth": 100,
    "FileIndex": 0,
    "ComponentType": "SIGN_SIGNATURE",
    "ComponentPage": 1,
    "ComponentPosX": 160,
    "ComponentHeight": 100
    }
    ]
    }

    # 静默签署方
    {
    "OrganizationName": "测试企业",
    "ApproverType": "ENTERPRISESERVER",
    "SignComponents": [
    {
    "ComponentPosY": 260,
    "ComponentWidth": 100,
    "FileIndex": 0,
    "ComponentType": "SIGN_SEAL",
    "ComponentPage": 1,
    "ComponentPosX": 160,
    "ComponentHeight": 100,
    "ComponentValue": "<SealId>" // 静默签署使用的印章Id
    }
    ]
    }

    # 渠道子客员工
    {
    "OrganizationName": "测试企业",
    "OrganizationOpenId": "org_open_id",
    "OpenId": "employee_open_id",
    "ApproverType": "ORGANIZATION",
    "SignComponents": [
    {
    "ComponentPosY": 260,
    "ComponentWidth": 100,
    "FileIndex": 0,
    "ComponentType": "SIGN_SEAL",
    "ComponentPage": 1,
    "ComponentPosX": 160,
    "ComponentHeight": 100
    }
    ]
    }

    # 渠道外企业签署方
    {
    "NotChannelOrganization": true, // 声明是渠道外的企业
    "OrganizationName": "渠道外企业名称",
    "Name": "张三",
    "Mobile": "13000000000",
    "ApproverType": "ORGANIZATION",
    "SignComponents": [
    {
    "ComponentPosY": 260,
    "ComponentWidth": 100,
    "FileIndex": 0,
    "ComponentType": "SIGN_SEAL",
    "ComponentPage": 1,
    "ComponentPosX": 160,
    "ComponentHeight": 100
    }
    ]
    }

    为签署方指定签署控件

    签署控件是绑定在签署人上的,通过 ApproverInfo 中的 SignComponents 字段指定:

    img

    使用示例如下所示:

    {
    # 填充控件内容
    "ComponentType": "SIGN_SEAL", // 填充印章类型
    "ComponentValue": "<seal_id/>", // sealid 从控制台获取,或者由印章回调回去
    }

    控件在PDF上的定位方式可以有三种:

    ​ ● 绝对定位方式;

    ​ ● 表单域(FIELD)定位方式;

    ​ ● 关键字(KEYWORD)定位方式;

    为发起方指定填写控件

    填写控件是在发起时用于填充合同内容的,通过 Components 字段指定:

    img

    使用示例如下所示:

    {
    # 填充控件内容
    "ComponentType": "TEXT", // 填充控件类型
    "ComponentValue": "需要填充的文本内容", // 填充控件内容

    # 控件定位方式
    "FileIndex": 0,
    "ComponentPage": 1,
    "ComponentPosX": 160,
    "ComponentHeight": 100,
    "ComponentPosY": 260,
    "ComponentWidth": 100
    }

    填充控件主要包括 "填充控件内容" 以及 "控件定位方式" 两个部分;

    ​ ● 填充控件内容: ​ ○ ComponentType:填充控件类型,如:TEXT - 普通文本控件、MULTI_LINE_TEXT - 多行文本控件等; ​ ○ ComponentValue:填充控件内容,即控件取值;

    ​ ● 控件定位方式:见下文;

    Component三种定位方式说明

    ​ 1、 绝对定位方式:

    {
    "FileIndex": 0,
    "ComponentType": "SIGN_SIGNATURE",
    "ComponentPosX": 160,
    "ComponentPosY": 260,
    "ComponentWidth": 100,
    "ComponentHeight": 100,
    "ComponentPage": 1
    }

    直接指定控件在PDF中的X、Y绝对位置;

    关于如何计算PDF控件可以参考 后续章节-计算签署坐标

    ​ 2、 表单域(FIELD)定位方式:

    关于表单域的基础知识和操作可以参考官方文档-表单域基础知识

    {
    "GenerateMode": "FIELD",
    "ComponentName": "seal",
    "FileIndex": 0,
    "ComponentType": "SIGN_SEAL"
    }

    通过Adobe等PDF编辑工具创建表单域,随后指定表单域的对应名称,即可指定对应控件;控件的大小即为表单域的大小;

    img

    上图中的 seal 即对应了输入参数中的 seal 参数;

    ​ 3、 关键字(KEYWORD)定位方式:

    {
    "GenerateMode": "KEYWORD",
    "ComponentId": "Test",
    "FileIndex": 0,
    "ComponentType": "SIGN_SEAL",
    "ComponentWidth": 100,
    "ComponentHeight": 100,
    "OffsetX": 100.5,
    "OffsetY": 200.5,
    "KeywordOrder":"Positive",
    "KeywordPage":1,
    "RelativeLocation":"Middle",
    "KeywordIndexes":[0,2]
    }

    通过指定PDF文件中的关键字(如:"甲方")来对签署控件进行定位;如果关键字存在多个, 会将多个值同时填充。

    GenerateMode:"KEYWORD"表明使用关键字进行定位。

    KeywordOrder指定关键字排序规则,Positive-正序,Reverse-倒序。传入Positive时会根据关键字在PDF文件内的顺序进行排列。在指定KeywordIndexes时,0代表在PDF内查找内容时,查找到的第一个关键字。传入Reverse时会根据关键字在PDF文件内的反序进行排列。在指定KeywordIndexes时,0代表在PDF内查找内容时,查找到的最后一个关键字。

    KeywordPage指定关键字页码,可选参数,指定页码后,将只在指定的页码内查找关键字,非该页码的关键字将不会查询出来。不指定关键字页码时可以不传值。

    RelativeLocation关键字位置模式,Middle-居中,Below-正下方,Right-正右方,LowerRight-右上角,UpperRight-右下角。示例:如果设置Middle的关键字盖章,则印章的中心会和关键字的中心重合,如果设置Below,则印章在关键字的正下方。具体的位置示例可参考下图:

    img

    KeywordIndexes关键字索引,可选参数,如果一个关键字在PDF文件中存在多个,可以通过关键字索引指定使用第几个关键字作为最后的结果,可指定多个索引。示例[0,2],说明使用PDF文件内第1个和第3个关键字位置。

    同时,可以指定 OffsetX、OffsetY 参数来调整控件的相对位置;

    如未指定控件大小,即为关键字所对应控件的大小;

    img

    如上图中的 Test 即对应上面入参中的 Test 参数。

    关键字定位注意事项

    ​ 1、 使用关键字进行定位时会进行全文匹配,所有具有关键字的位置均会被匹配上。如果需要指定第几个关键字,可以配合KeywordOrder、KeywordIndexes属性使用

    ​ 2、 使用关键字功能时,需要配置KeywordOrder和RelativeLocation属性

    ​ 3、 无法使用跨行的内容作为关键字进行定位

    您可以结合您自己的使用场景来使用不同的定位方式。

    计算签署坐标

    在合同签署阶段,需确认三要素,方可对一份合同内的具体位置进行签署: ●签署文件 ●签署控件所在的文件页码 ●控件左上角的点的坐标 ComponentPosX 和 ComponentPosY。

    本章节将着重讲解第三步,如何对PDF签署坐标进行计算。

    坐标计算方式:

    开发人员

    推荐使用PDF开源SDK,解析签署坐标,推荐的PDF开源SDK包括: https://github.com/itext/itext7 https://github.com/apache/pdfbox https://github.com/LibrePDF/OpenPDF https://github.com/mozilla/pdf.js 提示:可以通过解析签署关键字,获取签署坐标。

    非开发人员

    推荐使用PDF编辑器,包括: adobe官方编辑器 https://acrobat.adobe.com/cn/zh-Hans/acrobat.html 国产福昕编辑器 https://www.foxitsoftware.cn/

    Adobe编辑器:

    首先: 然后: 查看属性,位置: 单位选择“点”,此时下方位置显示坐标值,注意此坐标值以页面左下角为原点,需要转换成以页面左上角为原点,转换方法: ComponentPosX = 左对齐坐标140.7288 ComponentPosY = 页面高度 - 上对齐坐标616.8359

    页面高度如何获取?可先将控件移至页面顶部,此时上对齐坐标值即为页面高度。