授权签使用说明
目录
- 员工只有被赋予授权签权限,才能编辑授权签模板,并且通过接口发起授权签。
- 使用授权签时,经办人默认为发起人,且不能更改。例如接口中指定了其他人做授权签,发起后经办人仍然为发起人。
- 一旦设置了授权签,那么填写控件仅能由发起方在发起时进行填写,不能分配给签署方填写。签署人信息控件仍然可以使用,但只有等待对应签署方确认后,才会完成授权签。
一. 企业开通授权签开通
- 登录 腾讯电子签控制台 ,在控制台依次点击更多 -> 签约管理 -> 高级签署能力,找到企业授权签署服务。超管/法人可以直接单击开通进行操作,非超管/法人需要申请高级签署能力 > 企业授权签署的权限才能进行服务的开通和管理。


- 需要本企业的超级管理员用微信来扫描弹窗中的二维码,到微信小程序签署《腾讯电子签“授权签”功能开通知情同意书》。

- 本企业的超级管理员在微信小程序查看并签署《腾讯电子签“授权签”功能开通知情同意书》。
| 查看 | 签署 | |
|---|---|---|
![]() | > | ![]() |
- 《腾讯电子签“授权签”功能开通知情同意书》签署完成后,控制台显示本企业授权签已开通,可以单击管理。

二. 本方企业授权签
本企业授权签授权
入口:登录 腾讯电子签网页端工作台首页,单击更多 > 签约管理 > 高级签署能力 > 管理 > 本企业授权签授权。可以选择那些模板本企业是授权签(具体的配置过程可以参考视频创建授权签模板和开通授权签或者下面的用模板发起授权签合同),也可以配置哪些员工可以发起授权签的合同。

可以对本企业进行如下操作:
- 添加/取消授权签模板:用添加授权签的模板发起合同,我方企业将以授权签完成签署
选择模板。

设置授权签印章。

查看结果。

- 添加/取消员工授权签授权:只有拥有授权签授权的员工,才可以发起授权签的合同,或是在模板管理中配置为授权签的模板。
单击员工授权

选择需要授权的员工并确定即可完成授权。

员工授权签 PIN 码设置/重置
员工 PIN 码用于通过自建应用 API 接口以该员工为经办人发起授权签合同(在网页端、小程序端发起授权签合同无需输入 PIN 码)。
操作路径:进入 腾讯电子签网页端,单击更多 > 高级签署能力 > 企业授权签署,在列表中找到员工 PIN 码设置。

- 未设置时单击设置,在弹窗中单击确认,系统生成 32 位 PIN 码并仅当次展示,单击复制并妥善保存。
- 已设置后仅保留重置入口。PIN 码不支持查看,遗忘请直接重置:单击重置,在确认弹窗中单击确定,新 PIN 码仅当次展示,请立即复制保存。
注意:重置后旧 PIN 码立即失效,进行中、未签署的合同将失效,请谨慎操作。
1. 使用文件发起
请先阅读 通过文件发起签署流程 的步骤和参数,可以观看1.上传用于合同发起的PDF文件代码编写示例和
2.用PDF文件创建签署流程编写示例两个视频教程快速上手完成上述步骤后,我们直接使用 通过文件发起签署流程 接口发起本方企业的授权签的合同,为方便描述我们将接口入参以 json 格式进行展示:
{
"Operator": {
"UserId": "yDw6yUUgyg3c753gUx4GQptwsiPEXZNn"
},
"FlowName": "西红柿采购合同(20240807)",
"Approvers": [
{
"ApproverType": 8,
"OrganizationName": "典子谦示例企业",
"PinCode":"签署校验码" ,
"SignComponents": [
{
"ComponentType": "SIGN_SEAL",
"ComponentHeight": 40,
"ComponentWidth": 112,
"ComponentPage": 1,
"ComponentPosX": 250,
"ComponentPosY": 450,
"ComponentValue": "yDwi8UUckpo5bobhUEHGtMNustt61Dce"
}
]
}
],
"FileIds": [
"yDCHNUUckpauk4nsUuGS8n5wk5WSg6Fh"
]
}
参数填入规范见文档 通过文件发起签署流程 ,请参照文档阅读下面的内容,此处传值仅为参照,实际使用时请替换为真实数据!
- UserId 为发起方经办人的用户 ID,访问 腾讯电子签控制台 获取。
- FlowName 合同流程的名称。
- Approvers 指定签署方信息,此处样例场景为本企业员工授权Pin码签。
- ApproverType 填 8,即本企业员工授权Pin码签,指定后签署人默认为经办人。
- 如果是发起本企业的授权签,无需传 ApproverName 和 ApproverMobile,OrganizationName 传本企业的名称,合同的发起员工(经办人)即为本企业授权签的签署人。即使传了 ApproverName、ApproverMobile 也不生效,仍会用本企业发起方经办人来填充签署人。
- PinCode 为签署校验码,计算方式:HMAC_SHA256(SHA256(本企业员工授权的 PIN 码), 合同名称)
- SignComponents 指定签署控件的位置和内容,此处样例场景为单个印章。
- ComponentType 填入 SIGN_SEAL,即印章类型。
- ComponentPage 为控件所在页面编号,此处设置为 1。
- ComponentPosX、ComponentPosY、ComponentHeight、ComponentWidth 为印章控件的坐标和大小,定位方式请参见 签署方信息说明。
- ComponentValue 填入前面步骤获取到的印章 ID,合同发起后会在对应位置进行授权签章。
- FileIds 目前均为单文件发起,此处填入前面上传文件获取的 PDF 文件编号 ID。
在使用 CreateFlowByFiles 接口发起合同后,会根据上传的 PDF 文件生成合同,并自动在指定的区域内完成授权签章。
上述示例签署的效果

2. 使用模板发起
这部分的流程可以参考 通过模板发起签署流程 和 1. 创建授权签模板和开通授权签 和 2.用模板创建发起合同这两个视频教程。
用模板发起本方企业授权签的合同
在完成控制台操作后,我们使用编辑好的模板进行接口调用,请先阅读 通过模板发起签署流程 了解调用流程。
- 使用 创建签署流程(CreateFlow)接口创建流程,为方便描述我们将接口入参以 json 格式进行展示:
入参
{
"Operator": {
"UserId": "yDw6yUUgyg3c753gUx4GQptwsiPEXZNn"
},
"FlowName": "本企业自己的授权签合同",
"Approvers": [
{
"ApproverType": 8,
"OrganizationName": "典子谦示例企业",
"PinCode":"签署校验码"
}
]
}
出参
{
"Response": {
"FlowId": "yDCH5UUckpaxf0usUx6PWABEtVMWDyvw",
"RequestId": "634e1f42-9f15-4d19-8deb-d98de28f0208"
}
}
参数填入规范见文档 创建签署流程,请参照文档阅读下面的内容,此处传值仅为参照,实际使用时请替换为真实数据!
- UserId 为发起方经办人的用户 ID,访问 腾讯电子签控制台 获取。
- FlowName 合同流程的名称。
- Approvers 指定签署方信息,此处样例场景为单方本企业员工授权PIN码签。
- ApproverType 填 8,即本企业员工方授权PIN码签,指定后签署人默认为经办人。
- 如果是发起本企业的授权签,无需传 ApproverName 和 ApproverMobile,OrganizationName 传本企业的名称,合同的发起员工(经办人)即为本企业授权签的签署人。即使传了 ApproverName、ApproverMobile 也不生效,仍会用本企业发起方经办人来填充签署人。
- FlowId(出参) 生成的合同流程的ID。
- 使用 创建电子文档(CreateDocument)接口创建电子文档,为方便描述我们将接口入参以 json 格式进行展示:
入参
{
"Operator": {
"UserId": "yDw6yUUgyg3c753gUx4GQptwsiPEXZNn"
},
"TemplateId": "yDCH5UUckpaxxaxpUu5tLT689GBGERRf",
"FlowId": "yDCH5UUckpaxf0usUx6PWABEtVMWDyvw",
"FileNames": [
"西红柿购买.PDF"
]
}
出参
{
"Response": {
"DocumentId": "yDCH5UUckpaxf0ujUx6PWABSBzR636VJ",
"PreviewFileUrl": "",
"Approvers": [
{
"SignId": "yDCH5UUckpaxf0uqUx6PWABw4ZPJiyMt",
"RecipientId": "yDCH5UUckpaxf5x0Ux6PWABRVIkk4CW0",
"ApproverRoleName": "典子谦示例企业"
}
],
"RequestId": "f8860a89-6a69-4cd3-97bc-aa297411be12"
}
}
参数填入规范见文档 创建电子文档,请参照文档阅读下面的内容,此处传值仅为参照,实际使用时请替换为真实数据!
- UserId 为发起方经办人的用户 ID,访问 腾讯电子签控制台 获取,和上一步接口传入保持一致。
- FileNames 为文档名,目前影响使用,传入任意值即可。
- FlowId 指定合同编号,由上一步返回。
- TemplateId 指定模板 ID,由控制台操作步骤获取。
- 使用 发起流程(StartFlow)接口发起流程,为方便描述我们将接口入参以 json 格式进行展示:
入参
{
"Operator": {
"UserId": "yDw6yUUgyg3c753gUx4GQptwsiPEXZNn"
},
"FlowId": "yDCH5UUckpaxf0usUx6PWABEtVMWDyvw"
}
出参
{
"Response": {
"Status": "START",
"RequestId": "762c44c7-8384-442d-9931-046118e35808"
}
}
参数填入规范见文档 发起流程,请参照文档阅读下面的内容,此处传值仅为参照,实际使用时请替换为真实数据!
- UserId 为 发起方经办人的用户 ID,访问 腾讯电子签控制台 获取,和上一步接口传入保持一致。
- FlowId 指定合同编号,和上一步接口传入保持一致。
- 在发起签署流程之前,建议等待 PDF合成完成的回调,因为合成过程可能会耗费秒级别的时间。
完成上述步骤后,会根据创建的模板生成合同,并自动在指定的区域内完成授权签章。
上述示例签署的效果

3. 嵌入页面发起
通过在嵌入页面发起CreatePrepareFlow接口指定本方ApproverType=8设置本企业员工授权PIN码签。
示例:
{
"Operator": {
"UserId": "yDxxxxxxxxxxxxxxxxxxxxxxxxxxxxYj"
},
"Unordered": true,
"FlowName": "嵌入式合同-本方授权签",
"ResourceId": "yDxxxxxxxxxxxxxxxxxxxxxxxxxxxx6d",
"ResourceType": 2,
"FlowType": "1",
"Approvers": [
{
"ApproverType": 8,
"OrganizationName": "张三示例企业",
"PinCode":"签署校验码"
}
]
}
- ApproverType 填 8,即本企业员工授权PIN码签
- OrganizationName 填本方企业名称

三. 合作方(他方)企业授权签
合作方企业授权签是指非发起方企业签署时不手动进入签署页面进行签署操作,由腾讯电子签负责自动给合同进行盖章动作。
授权签是指 B 企业(授权方)授权 A 企业(被授权方)使用其印章签署合同。A 企业发起合同时,需输入 B 企业设置的 PIN 码进行验证;验证通过后,合同进入 B 企业签署环节时,将直接使用授权印章完成签署,无需 B 企业另行操作。
要发起合作方授权签的合同,前提是需要得到合作方的授权。腾讯电子签提供了两种授权方式,详细说明及操作请参见企业合作方授权。
说明:企业合作方授权只能由法人/超管来进行操作,具有签约管理 > 高级签署能力 > 企业授权签署权限的员工只能进行本企业授权签授权管理。
1. 邀请合作方给我授权(仅支持固定模板)
入口
我方登录控制台进行如下操作

选择模板。

选择签署方。

生成邀请链接。

说明:
- 将授权签邀请链接发给企业不同的合作方进行授权,合作方需要超管才可以进行授权操作。
- 邀请链接有效期为一个月。
合作方打开链接授权

查看授权记录

说明:
授权方可以随时取消授权,或重新授权印章。
接口发起
如果是这种方式的授权,可通过被授权模版发起合同,API调用整体流程和普通的模版发起相同,只需要在CreateFlow时,将合作方的
ApproverType指定为3(授权签),示例:"Approvers": [{
"ApproverType": 9,
"OrganizationName": "张三示例企业",
"PinCode":"签署校验码"
}]- ApproverType 填 9,即合作方企业授权PIN码签。
- OrganizationName 合作方企业的名字 (不是发起方企业名字)
- ApproverName,ApproverMobile等员工信息不用传,会拉取合作方企业的授权人作为对方授权签的签署人。即使传了也不生效,仍会用合作方给我们授权签授权的授权人来授权签。
- PinCode 为签署校验码,计算方式:HMAC_SHA256(SHA256(合作方企业授权的 PIN 码), 合同名称)
2. 让合作方主动给我授权
需要合同方企业登录控制台进行操作
入口

说明:
- 这种方式需要需要先联系电子签客户经理完成开白操作,开白成功后交由合作方完成授权签授权,支持授权多个印章。
- 之后被授权企业可以通过模版、上传文件或嵌入页面发起合同,无需指定授权签印章,会按照授权印章列表中的 【公章、合同专用章、其他】的优先级自动选择印章 。
- API调用整体流程不变,只需要在签署方结构体中稍做改变。
- 被授权方也可以通过接口生成邀请授权链接给到授权方操作,接口中可以指定需要被授权印章的类型(可指定多种),详情请参见 创建他方“授权签”授权链接(CreatePartnerAutoSignAuthUrl)。
- 合作(授权)方登录 腾讯电子签网页端,单击更多 > 高级签署能力 > 企业授权签署 > 管理 > 我给合作方的授权 > 给合作方授权。

- 填写被授权企业的电子签账号,选择用于授权签的企业电子印章。

- 被授权方接口发起他方授权签合同。
注意:接口发起他方授权签合同,需先联系腾讯电子签运营开通此能力,会对您的企业信息、与授权方企业关系、业务场景进行审核。
接口发起
- 模版发起(CreateFlow)
签署方示例:
"Approvers": [{
"ApproverType":9,
"OrganizationName": "张三示例企业",
"PinCode":"签署校验码"
}
]
- ApproverType 填 9,即合作方企业授权PIN码签。
- OrganizationName 合作方企业的名字 (不是发起方企业名字)
- ApproverName,ApproverMobile等员工信息不用传,会用合作方企业授权人来填充。即使传了也不生效,仍会用合作方给我们授权签授权的授权人来授权签。
- 印章为授权时选择的印章(按公章、合同专用章、其他章的优先级自动选择)
- 文件发起(CreateFlowByFiles)
签署方示例:
"Approvers": [{
"ApproverType": 9,
"OrganizationName": "张三示例企业",
"PinCode":"签署校验码",
"SignComponents":[{
"ComponentPosX": 160,
"ComponentPosY": 260,
"ComponentWidth": 100,
"ComponentHeight": 100,
"ComponentType": "SIGN_SEAL",
"ComponentPage": 1,
"ComponentExtra": "{\"ComponentTypeLimit\":[\"PERSONNEL\",\"FINANCE\"]}"
}]
}
- ApproverType 填 9,即合作方企业授权PIN码签。
- OrganizationName 合作方企业的名字 (不是发起方企业名字)
- ApproverName,ApproverMobile等员工信息不用传,会用合作方企业授权人来填充。即使传了也不生效,仍会用合作方给我们授权签授权的授权人来授权签。
- 印章为授权时选择的印章(按公章、合同专用章、其他章的优先级自动选择,可通过ComponentExtra指定印章类型)
- 嵌入页面发起(CreatePrepareFlow)
通过在嵌入页面发起接口指定他方企业ApproverType=9,在预发起页面中选择他方已经授权的授权签印章即可。
示例:
{
"Operator": {
"UserId": "yDxxxxxxxxxxxxxxxxxxxxxxxxxxxxYj"
},
"Unordered": true,
"FlowName": "嵌入式合同-他方授权签",
"ResourceId": "yDxxxxxxxxxxxxxxxxxxxxxxxxxxxx6d",
"ResourceType": 2,
"FlowType": "1",
"Approvers": [
{
"ApproverType": 9,
"OrganizationName": "李四示例企业",
"PinCode":"签署校验码"
}
]
}
- ApproverType 填 9,即合作方企业授权PIN码签
- OrganizationName 填他方企业名称

3. 设置/重置授权 PIN 码
授权 PIN 码由授权方企业的法人或超管设置,用于被授权方通过 API 接口发起授权签合同时校验。同一合作方企业的所有授权(按模板、按印章)共用 1 个 PIN 码。
操作路径:登录腾讯电子签网页端,单击更多 > 高级签署能力 > 企业授权签署 > 管理,在企业合作方授权 > 我给合作方授权列表中找到目标企业。

- 单击该企业的 设置 PIN 码(未设置时)或 重置 PIN 码(已设置时)。
在确认弹窗中单击确定,成功弹窗当次展示 PIN 码,单击复制保存并提供给被授权方。

- 多个企业需重置时,勾选企业后单击列表上方批量重置 PIN 码,生成 1 个新 PIN 码复用到所选企业。
注意:PIN 码由系统生成(32 位字母数字组合),不支持自定义和查看,遗忘请重置;重置后旧 PIN 码立即失效,使用该 PIN 码进行中、未签署的合同将失效。
四. 集团企业员工授权
说明:集团企业员工授权只能由法人/超管来进行操作,具有签约管理 > 高级签署能力 > 企业授权签署权限的员工只能进行本企业授权签授权管理。
在集团管理模式下,主企业需代子企业发起合同,并可以授权签,那需要子企业对主企业员工进行授权,授权记录将在此展示。

PIN 码认证令牌计算规则
当使用 PIN 码授权签进行身份验证时,需要按以下规则生成 PinCode。
计算公式
PinCode = HEX(HMAC_SHA256(HEX(SHA256(对方授权的 PIN 码)),(合同名称)))
| 参数 | 说明 |
|---|---|
| PinCode | PIN 码认证令牌,用于校验签署方的 PIN 码身份凭证。 |
| 对方授权的 PIN 码 | 企业员工、合作方企业、他方个人授权的 PIN 码 |
| 合同名称 | 签署流程名称,即FlowName |
| SHA256(对方授权的 PIN 码) | 对 对方授权的 PIN 码 进行 SHA-256 摘要计算后的结果,将十六进制字符串作为 HMAC-SHA256 的密钥。 |
| HMAC_SHA256(key, message) | 使用 HMAC-SHA256 算法计算签名。本接口中,key = HEX(SHA256(对方授权的 PIN 码)),message = 合同名称。 |
计算代码示例
Java(JDK 8 及以上)
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public final class PinCodeUtil {
private static final String HMAC_SHA256 = "HmacSHA256";
private PinCodeUtil() {
}
/**
* 计算 PinCode。
*
* @param pin 对方授权的 PIN 码
* @param flowName 合同名称
* @return 64 位小写十六进制字符串
*/
public static String calculate(String pin, String flowName) {
if (pin == null || flowName == null) {
throw new IllegalArgumentException("pin、flowName 均不能为 null");
}
return hmacSha256Hex(sha256Hex(pin), flowName);
}
private static String sha256Hex(String plainText) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
return toHex(digest.digest(plainText.getBytes(StandardCharsets.UTF_8)));
} catch (Exception e) {
throw new IllegalStateException("SHA-256 计算失败", e);
}
}
private static String hmacSha256Hex(String key, String message) {
try {
Mac mac = Mac.getInstance(HMAC_SHA256);
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
mac.init(new SecretKeySpec(keyBytes, HMAC_SHA256));
return toHex(mac.doFinal(message.getBytes(StandardCharsets.UTF_8)));
} catch (Exception e) {
throw new IllegalStateException("HMAC-SHA256 计算失败", e);
}
}
private static String toHex(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xff);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
}
调用方式:String pinCode = PinCodeUtil.calculate("123456", "劳动合同-张三")
Go
package pincode
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
// CalculatePinCode 计算 PinCode。
// pin 为对方授权的 PIN 码,flowName 为合同名称,返回 64 位小写十六进制字符串。
func CalculatePinCode(pin, flowName string) string {
return hmacSha256Hex(sha256Hex(pin), flowName)
}
func sha256Hex(plainText string) string {
sum := sha256.Sum256([]byte(plainText))
return hex.EncodeToString(sum[:])
}
func hmacSha256Hex(key, message string) string {
mac := hmac.New(sha256.New, []byte(key))
mac.Write([]byte(message))
return hex.EncodeToString(mac.Sum(nil))
}
调用方式:pinCode := pincode.CalculatePinCode("123456", "劳动合同-张三")
Python(3.x)
import hashlib
import hmac
def calculate_pin_code(pin: str, flow_name: str) -> str:
"""计算 PinCode,返回 64 位小写十六进制字符串。
:param pin: 对方授权的 PIN 码
:param flow_name: 合同名称
"""
if pin is None or flow_name is None:
raise ValueError("pin、flow_name 均不能为 None")
key = hashlib.sha256(pin.encode("utf-8")).hexdigest()
return hmac.new(key.encode("utf-8"), flow_name.encode("utf-8"), hashlib.sha256).hexdigest()
调用方式:pin_code = calculate_pin_code("123456", "劳动合同-张三")

