tencentcloud-sdk-python-ess 3.1.141__tar.gz → 3.1.166__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/PKG-INFO +2 -2
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/setup.py +1 -1
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/__init__.py +1 -1
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/v20201111/ess_client.py +162 -16
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/v20201111/ess_client_async.py +157 -16
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/v20201111/models.py +692 -600
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud_sdk_python_ess.egg-info/PKG-INFO +2 -2
- tencentcloud_sdk_python_ess-3.1.166/tencentcloud_sdk_python_ess.egg-info/requires.txt +1 -0
- tencentcloud_sdk_python_ess-3.1.141/tencentcloud_sdk_python_ess.egg-info/requires.txt +0 -1
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/README.rst +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/setup.cfg +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/__init__.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/v20201111/__init__.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud/ess/v20201111/errorcodes.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud_sdk_python_ess.egg-info/SOURCES.txt +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud_sdk_python_ess.egg-info/dependency_links.txt +0 -0
- {tencentcloud_sdk_python_ess-3.1.141 → tencentcloud_sdk_python_ess-3.1.166}/tencentcloud_sdk_python_ess.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: tencentcloud-sdk-python-ess
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.166
|
|
4
4
|
Summary: Tencent Cloud Ess SDK for Python
|
|
5
5
|
Home-page: https://github.com/TencentCloud/tencentcloud-sdk-python
|
|
6
6
|
Author: Tencent Cloud
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 2.7
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.6
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.7
|
|
18
|
-
Requires-Dist: tencentcloud-sdk-python-common<4.0.0,>=3.1.
|
|
18
|
+
Requires-Dist: tencentcloud-sdk-python-common<4.0.0,>=3.1.166
|
|
19
19
|
|
|
20
20
|
============================
|
|
21
21
|
Tencent Cloud SDK for Python
|
|
@@ -8,7 +8,7 @@ ROOT = os.path.dirname(__file__)
|
|
|
8
8
|
|
|
9
9
|
setup(
|
|
10
10
|
name='tencentcloud-sdk-python-ess',
|
|
11
|
-
install_requires=["tencentcloud-sdk-python-common>=3.1.
|
|
11
|
+
install_requires=["tencentcloud-sdk-python-common>=3.1.166,<4.0.0"],
|
|
12
12
|
|
|
13
13
|
version=tencentcloud.__version__,
|
|
14
14
|
description='Tencent Cloud Ess SDK for Python',
|
|
@@ -90,7 +90,14 @@ class EssClient(AbstractClient):
|
|
|
90
90
|
- **可撤回合同状态**:未全部签署完成
|
|
91
91
|
- **不撤回合同状态**:已全部签署完成、已拒签、已过期、已撤回、拒绝填写、已解除等合同状态。
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
**合同额度返还规则**:
|
|
95
|
+
|
|
96
|
+
1.撤销服务按照合同份额 1:1赠送免费撤销次数。例如购买 100 份合同,赠送 100 次免费撤销额度。
|
|
97
|
+
2.仅当没有任何参与方签署过,或仅自动签署完成的合同,撤销后才会使用免费撤销额度。
|
|
98
|
+
3.当赠送的免费撤销额度使用完后,后续仍可撤销合同,但不会返还合同额度。
|
|
99
|
+
|
|
100
|
+
**注**:
|
|
94
101
|
1. 如果合同流程中的参与方均已签署完毕,则无法通过该接口撤销合同,签署完毕的合同需要双方走解除流程将合同作废,可以参考<a href="https://qian.tencent.com/developers/companyApis/operateFlows/CreateReleaseFlow" target="_blank">发起解除合同流程</a>接口。
|
|
95
102
|
|
|
96
103
|
2. 有对应合同撤销权限的人:
|
|
@@ -102,10 +109,6 @@ class EssClient(AbstractClient):
|
|
|
102
109
|
- 其它员工<font color='red'>(并已经授予撤销我发起的合同后)</font>:
|
|
103
110
|
- 撤销人与发起人<font color='red'>**不在**</font>同一个部门:<font color='red'>(确保已授予查询合同 - 企业全部合同权限)</font>
|
|
104
111
|
- 撤销人与发起人<font color='red'>**在**</font>用一个部门:<font color='red'>(确保授予查询合同 - 本部门全部合同权限 或 企业全部合同权限)</font>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
3. <font color='red'>**只有撤销没有参与方签署过或只有自动签署签署过的合同,才会返还合同额度。**</font>
|
|
108
|
-
|
|
109
112
|
4. 撤销后可以看合同PDF内容的人员: 发起方的超管, 发起方自己,发起方撤销合同的操作人员,已经签署合同、已经填写合同、邀请填写已经补充信息的参与人员, 其他参与人员看不到合同的内容。
|
|
110
113
|
|
|
111
114
|
:param request: Request instance for CancelFlow.
|
|
@@ -323,7 +326,13 @@ class EssClient(AbstractClient):
|
|
|
323
326
|
批量撤销结果可以通过接口返回的TaskId关联[批量撤销任务结果回调](https://qian.tencent.com/developers/company/callback_types_contracts_sign#%E4%B9%9D-%E6%89%B9%E9%87%8F%E6%92%A4%E9%94%80%E7%BB%93%E6%9E%9C%E5%9B%9E%E8%B0%83)或通过接口[查询批量撤销签署流程任务结果](https://qian.tencent.com/developers/companyApis/operateFlows/CreateBatchCancelFlowUrl)
|
|
324
327
|
|
|
325
328
|
|
|
326
|
-
|
|
329
|
+
**合同额度返还规则**:
|
|
330
|
+
|
|
331
|
+
1.撤销服务按照合同份额 1:1赠送免费撤销次数。例如购买 100 份合同,赠送 100 次免费撤销额度。
|
|
332
|
+
2.仅当没有任何参与方签署过,或仅自动签署完成的合同,撤销后才会使用免费撤销额度。
|
|
333
|
+
3.当赠送的免费撤销额度使用完后,后续仍可撤销合同,但不会返还合同额度。
|
|
334
|
+
|
|
335
|
+
**注**:
|
|
327
336
|
1. 如果合同流程中的参与方均已签署完毕,则无法通过该接口撤销合同,签署完毕的合同需要双方走解除流程将合同作废,可以参考<a href="https://qian.tencent.com/developers/companyApis/operateFlows/CreateReleaseFlow" target="_blank">发起解除合同流程</a>接口。
|
|
328
337
|
|
|
329
338
|
2. 有对应合同撤销权限的人:
|
|
@@ -336,9 +345,6 @@ class EssClient(AbstractClient):
|
|
|
336
345
|
- 撤销人与发起人<font color='red'>**不在**</font>同一个部门:<font color='red'>(确保已授予查询合同 - 企业全部合同权限)</font>
|
|
337
346
|
- 撤销人与发起人<font color='red'>**在**</font>用一个部门:<font color='red'>(确保授予查询合同 - 本部门全部合同权限 或 企业全部合同权限)</font>
|
|
338
347
|
|
|
339
|
-
|
|
340
|
-
3. <font color='red'>**只有撤销没有参与方签署过或只有自动签署签署过的合同,才会返还合同额度。**</font>
|
|
341
|
-
|
|
342
348
|
4. 撤销后可以看合同PDF内容的人员: 发起方的超管, 发起方自己,发起方撤销合同的操作人员,已经签署合同、已经填写合同、邀请填写已经补充信息的参与人员, 其他参与人员看不到合同的内容。
|
|
343
349
|
|
|
344
350
|
:param request: Request instance for CreateBatchCancelFlowUrl.
|
|
@@ -528,9 +534,8 @@ class EssClient(AbstractClient):
|
|
|
528
534
|
1. 该接口可生成签署人的批量、合同组签署/查看链接 。
|
|
529
535
|
2. 该签署链接**默认有效期为30分钟**,过期后将失效,如需签署可重新创建批量签署链接 。
|
|
530
536
|
3. 该接口返回的签署链接适用于APP集成的场景,支持APP打开或浏览器直接打开,**不支持微信小程序嵌入**。
|
|
531
|
-
跳转到小程序的实现,参考微信官方文档(分为<a href="https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html">全屏</a>、<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html">半屏</a>两种方式),如何配置也可以请参考: <a href="https://qian.tencent.com/developers/company/openwxminiprogram">跳转电子签小程序配置</a>。
|
|
532
537
|
4. 因h5涉及人脸身份认证能力基于慧眼人脸核身,对Android和iOS系统均有一定要求, 因此<font color='red'>App嵌入H5签署合同需要按照慧眼提供的<a href="https://cloud.tencent.com/document/product/1007/61076">慧眼人脸核身兼容性文档</a>做兼容性适配</font>。
|
|
533
|
-
5.
|
|
538
|
+
5. <font color='red'>iframe 嵌入暂不支持人脸相关操作</font>,包括设置密码等需要进行的人脸核验。
|
|
534
539
|
|
|
535
540
|
:param request: Request instance for CreateBatchQuickSignUrl.
|
|
536
541
|
:type request: :class:`tencentcloud.ess.v20201111.models.CreateBatchQuickSignUrlRequest`
|
|
@@ -1005,6 +1010,9 @@ class EssClient(AbstractClient):
|
|
|
1005
1010
|
1. `支持的文件类型有doc、docx、xls、xlsx、html、jpg、jpeg、png、bmp、txt`
|
|
1006
1011
|
2. `可通过发起合同时设置预览来检查转换文件是否达到预期效果`
|
|
1007
1012
|
|
|
1013
|
+
整体流程如下图
|
|
1014
|
+

|
|
1015
|
+
|
|
1008
1016
|
:param request: Request instance for CreateFileConvertTask.
|
|
1009
1017
|
:type request: :class:`tencentcloud.ess.v20201111.models.CreateFileConvertTaskRequest`
|
|
1010
1018
|
:rtype: :class:`tencentcloud.ess.v20201111.models.CreateFileConvertTaskResponse`
|
|
@@ -1318,9 +1326,8 @@ class EssClient(AbstractClient):
|
|
|
1318
1326
|
注意:
|
|
1319
1327
|
1. 转交的目标经办人需要已经加入企业,且完成实名。
|
|
1320
1328
|
2. 仅企业拥有`超管`、`法人`或者`合同管理员`角色的员工才有调用本接口的权限。如果使用主带子方式调用,请确保您已经加入子企业,且账号在子企业中担任任一上述角色。
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
5. 若当前经办人已签署完成,或者处于签署流程中,则不支持进行转交。
|
|
1329
|
+
5. 若原合同有填写控件,且当前经办人已经完成填写,则不支持进行转交。
|
|
1330
|
+
6. 若当前经办人已签署完成,或者处于签署流程中,或合同处于完成态(例如:签署完成,拒签,撤销,过期等),则不支持进行转交。
|
|
1324
1331
|
|
|
1325
1332
|
:param request: Request instance for CreateFlowForwards.
|
|
1326
1333
|
:type request: :class:`tencentcloud.ess.v20201111.models.CreateFlowForwardsRequest`
|
|
@@ -1620,9 +1627,8 @@ class EssClient(AbstractClient):
|
|
|
1620
1627
|
**注意**
|
|
1621
1628
|
1. 该签署链接**默认有效期为30分钟**,过期后将失效,如需签署可重新创建签署链接。
|
|
1622
1629
|
2. 该接口返回的签署链接适用于APP集成的场景,支持APP、支付宝打开或浏览器直接打开,**不支持微信小程序嵌入**。配置方式请参考:<a href="https://qian.tencent.com/developers/company/openqianh5/">跳转电子签H5</a>。
|
|
1623
|
-
如需跳转到小程序的实现,参考微信官方文档(分为<a href="https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html">全屏</a>、<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html">半屏</a>两种方式),如何配置也可以请参考: <a href="https://qian.tencent.com/developers/company/openwxminiprogram">跳转电子签小程序配置</a>。
|
|
1624
1630
|
3. 因h5涉及人脸身份认证能力基于慧眼人脸核身,对Android和iOS系统均有一定要求, 因此<font color='red'>App嵌入H5签署合同需要按照慧眼提供的<a href="https://cloud.tencent.com/document/product/1007/61076">慧眼人脸核身兼容性文档</a>做兼容性适配</font>。
|
|
1625
|
-
4.
|
|
1631
|
+
4. <font color='red'>iframe 嵌入暂不支持人脸相关操作</font>,包括设置密码等需要进行的人脸核验。
|
|
1626
1632
|
|
|
1627
1633
|
:param request: Request instance for CreateFlowSignUrl.
|
|
1628
1634
|
:type request: :class:`tencentcloud.ess.v20201111.models.CreateFlowSignUrlRequest`
|
|
@@ -2390,6 +2396,143 @@ class EssClient(AbstractClient):
|
|
|
2390
2396
|
raise TencentCloudSDKException(type(e).__name__, str(e))
|
|
2391
2397
|
|
|
2392
2398
|
|
|
2399
|
+
def CreateRequestWithEncryption(self, request):
|
|
2400
|
+
r"""该接口支持对请求内容进行加密传输。调用方需使用约定的 AES-CBC 或 SM4-CBC 算法对请求内容进行加密,并使用 HMAC-SHA256 或 HMAC-SM3 算法对 IV 和加密后的数据进行完整性校验,防止请求内容被篡改。
|
|
2401
|
+
|
|
2402
|
+

|
|
2403
|
+
|
|
2404
|
+
**请求端加密流程**
|
|
2405
|
+
1. 每次请求使用密码学安全的随机源生成 16 字节 的 IV。每次请求必须重新生成,严禁复用。
|
|
2406
|
+
2. 使用约定的 AES-CBC 或 SM4-CBC 算法对原始请求体进行加密,使用 PKCS#7 Padding。
|
|
2407
|
+
3. 将加密后的密文原始字节进行标准 Base64 编码,作为 EncryptedData 参数。
|
|
2408
|
+
4. 将 IV 原始字节进行标准 Base64 编码,作为 IV 参数。
|
|
2409
|
+
5. 对 IV 原始字节和密文原始字节直接拼接(不添加分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)
|
|
2410
|
+
6. 将 HMAC 的结果进行 标准 Base64 编码,作为 EncryptionSignature 参数。
|
|
2411
|
+
|
|
2412
|
+
**响应端解密流程**
|
|
2413
|
+
1. 先判断本接口自身是否返回外层错误,此时错误为明文(标准腾讯云错误体),有则直接失败处理。
|
|
2414
|
+
2. 分别对 IV、EncryptedData、EncryptionSignature 做标准 Base64 解码,得到原始字节。
|
|
2415
|
+
3. 将 IV 与密文原始字节直接拼接(无分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)。
|
|
2416
|
+
4. 与响应中 EncryptionSignature 解码后的字节做恒定时间比较,不一致立即失败,不得继续解密。
|
|
2417
|
+
5. 使用约定的 AES-CBC 或 SM4-CBC,以 IV 和密钥解密 EncryptedData,去除 PKCS#7 Padding 得到明文。
|
|
2418
|
+
6. 先用腾讯云标准错误体反序列化明文,判断被加密业务接口是否返回 Error。
|
|
2419
|
+
7. 无业务错误时,再用目标业务接口的响应结构体反序列化明文,取出实际业务参数。
|
|
2420
|
+
|
|
2421
|
+
**响应端错误处理**
|
|
2422
|
+
1. 外层错误(本接口本身调用失败):返回标准腾讯云错误 JSON(含 Error.Code / Error.Message),无 EncryptedData,不需要解密即可处理。
|
|
2423
|
+
2. 内层错误(业务接口执行失败):外层成功,但解密后的明文里包含 Error.Code / Error.Message,按目标业务接口的错误规范处理。
|
|
2424
|
+
|
|
2425
|
+
**处理过程示例**
|
|
2426
|
+
```
|
|
2427
|
+
# ========== 前置约定 ==========
|
|
2428
|
+
AESKey : 加密 密钥(AES 32 字节,SM4 16 字节)
|
|
2429
|
+
HMACKey : HMAC 密钥(与加密密钥需要不同)
|
|
2430
|
+
ALGO : AES-CBC 或 SM4-CBC,双方约定
|
|
2431
|
+
HMAC : ALGO == AES-CBC ? HMAC-SHA256 : HMAC-SM3
|
|
2432
|
+
|
|
2433
|
+
# ========== 请求端:加密并调用 ==========
|
|
2434
|
+
function CallWithEncryption(bizAction, bizRequestObj):
|
|
2435
|
+
# 1. 序列化业务请求
|
|
2436
|
+
plaintext = JSON.stringify(bizRequestObj)
|
|
2437
|
+
# 2. 生成 16 字节随机 IV(每次新生成,禁止复用)
|
|
2438
|
+
iv = SecureRandom(16)
|
|
2439
|
+
# 3. 对称加密(PKCS#7 Padding)
|
|
2440
|
+
ciphertext = SymmetricEncrypt(ALGO, AESKey, iv, plaintext)
|
|
2441
|
+
# 4. 计算完整性签名:HMAC(Key, IV || Ciphertext)
|
|
2442
|
+
signature = HMAC(HMACKey, concat(iv, ciphertext))
|
|
2443
|
+
# 5. 组装外层请求参数(三段均为标准 Base64)
|
|
2444
|
+
encReq = {
|
|
2445
|
+
RequestAction: bizAction,
|
|
2446
|
+
IV: Base64(iv),
|
|
2447
|
+
EncryptedData: Base64(ciphertext),
|
|
2448
|
+
EncryptionSignature: Base64(signature),
|
|
2449
|
+
}
|
|
2450
|
+
# 6. 调用 CreateRequestWithEncryption
|
|
2451
|
+
# TC3-HMAC-SHA256 鉴权由官方 SDK 自动完成
|
|
2452
|
+
encResp = CloudAPI.CreateRequestWithEncryption(encReq)
|
|
2453
|
+
# 7. 外层错误:明文,直接抛出
|
|
2454
|
+
if encResp.Error != nil:
|
|
2455
|
+
raise OuterError(encResp.Error)
|
|
2456
|
+
# 8. 解密并返回业务响应
|
|
2457
|
+
return DecryptResponse(encResp.Response)
|
|
2458
|
+
|
|
2459
|
+
# ========== 响应端:校验并解密 ==========
|
|
2460
|
+
function DecryptResponse(resp):
|
|
2461
|
+
# 1. Base64 解码
|
|
2462
|
+
ivBytes = Base64Decode(resp.IV)
|
|
2463
|
+
ctBytes = Base64Decode(resp.EncryptedData)
|
|
2464
|
+
sigBytes = Base64Decode(resp.EncryptionSignature)
|
|
2465
|
+
# 2. 重新计算 HMAC
|
|
2466
|
+
expected = HMAC(HMACKey, concat(ivBytes, ctBytes))
|
|
2467
|
+
# 3. 恒定时间比较,失败立即终止(不得继续解密)
|
|
2468
|
+
if not ConstantTimeEqual(expected, sigBytes):
|
|
2469
|
+
raise SignatureMismatch
|
|
2470
|
+
# 4. 对称解密,去除 PKCS#7 Padding
|
|
2471
|
+
plaintext = SymmetricDecrypt(ALGO, AESKey, ivBytes, ctBytes)
|
|
2472
|
+
# 5. 先按腾讯云错误体解析,判断业务是否失败
|
|
2473
|
+
bizErr = TryParseTencentCloudError(plaintext)
|
|
2474
|
+
if bizErr != nil:
|
|
2475
|
+
raise BusinessError(bizErr)
|
|
2476
|
+
# 6. 按目标业务接口的响应结构反序列化
|
|
2477
|
+
return JSON.parse(plaintext, BizResponseSchema)
|
|
2478
|
+
```
|
|
2479
|
+
|
|
2480
|
+
**AES-CBC 示例**
|
|
2481
|
+
以下示例参数及结果可用于验证 AES-CBC 加密和 HMAC-SHA256 签名算法的实现是否正确。
|
|
2482
|
+
|
|
2483
|
+
加密密钥:AES-CBC-Key-1234
|
|
2484
|
+
签名密钥:AES-HMAC-Key-123
|
|
2485
|
+
IV:1234567890abcdef
|
|
2486
|
+
请求内容:{"Request": "This is a test."}
|
|
2487
|
+
|
|
2488
|
+
最终请求参数:
|
|
2489
|
+
```
|
|
2490
|
+
{
|
|
2491
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2492
|
+
"IV": "MTIzNDU2Nzg5MGFiY2RlZg==",
|
|
2493
|
+
"EncryptedData": "Iqp2W1jislwMNmE7bH9dKZZiMQsfkAPyvAAqDFRnWLw=",
|
|
2494
|
+
"EncryptionSignature": "4TT3PUCZgZT7YmEPtXDm5PDcM6xT7FoYHfMW8xunB5I="
|
|
2495
|
+
}
|
|
2496
|
+
```
|
|
2497
|
+
|
|
2498
|
+
**SM4-CBC 示例**
|
|
2499
|
+
以下示例参数及结果可用于验证 SM4-CBC 加密和 HMAC-SM4 签名算法的实现是否正确。
|
|
2500
|
+
|
|
2501
|
+
加密密钥:SM4-CBC-Key-1234
|
|
2502
|
+
签名密钥:SM4-HMAC-Key-123
|
|
2503
|
+
IV:fedcba0987654321
|
|
2504
|
+
请求内容:{"Request": "This is a test."}
|
|
2505
|
+
|
|
2506
|
+
最终请求参数:
|
|
2507
|
+
```
|
|
2508
|
+
{
|
|
2509
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2510
|
+
"IV": "ZmVkY2JhMDk4NzY1NDMyMQ==",
|
|
2511
|
+
"EncryptedData": "GwUovQhNUPaUnVM/UDXMtPOYTpTSi2B1oyZDFbyyvns=",
|
|
2512
|
+
"EncryptionSignature": "nHB/v/AvOaDCQ66esFNnp12lHKcGkwaLGid0Warl/KE="
|
|
2513
|
+
}
|
|
2514
|
+
```
|
|
2515
|
+
|
|
2516
|
+
:param request: Request instance for CreateRequestWithEncryption.
|
|
2517
|
+
:type request: :class:`tencentcloud.ess.v20201111.models.CreateRequestWithEncryptionRequest`
|
|
2518
|
+
:rtype: :class:`tencentcloud.ess.v20201111.models.CreateRequestWithEncryptionResponse`
|
|
2519
|
+
|
|
2520
|
+
"""
|
|
2521
|
+
try:
|
|
2522
|
+
params = request._serialize()
|
|
2523
|
+
headers = request.headers
|
|
2524
|
+
body = self.call("CreateRequestWithEncryption", params, headers=headers)
|
|
2525
|
+
response = json.loads(body)
|
|
2526
|
+
model = models.CreateRequestWithEncryptionResponse()
|
|
2527
|
+
model._deserialize(response["Response"])
|
|
2528
|
+
return model
|
|
2529
|
+
except Exception as e:
|
|
2530
|
+
if isinstance(e, TencentCloudSDKException):
|
|
2531
|
+
raise
|
|
2532
|
+
else:
|
|
2533
|
+
raise TencentCloudSDKException(type(e).__name__, str(e))
|
|
2534
|
+
|
|
2535
|
+
|
|
2393
2536
|
def CreateRiskIdentificationTaskFeedback(self, request):
|
|
2394
2537
|
r"""此接口(CreateRiskIdentificationTaskFeedback)用于创建合同审查任务结果反馈。
|
|
2395
2538
|
|
|
@@ -3374,6 +3517,9 @@ class EssClient(AbstractClient):
|
|
|
3374
3517
|
1. `大文件转换所需的时间可能会比较长`
|
|
3375
3518
|
2. `本接口返回的文件资源ID就是PDF资源ID,可以直接用于【用PDF文件创建签署流程】接口发起合同。`
|
|
3376
3519
|
|
|
3520
|
+
整体流程如下图
|
|
3521
|
+

|
|
3522
|
+
|
|
3377
3523
|
:param request: Request instance for DescribeFileConvertTask.
|
|
3378
3524
|
:type request: :class:`tencentcloud.ess.v20201111.models.DescribeFileConvertTaskRequest`
|
|
3379
3525
|
:rtype: :class:`tencentcloud.ess.v20201111.models.DescribeFileConvertTaskResponse`
|
|
@@ -84,7 +84,14 @@ class EssClient(AbstractClient):
|
|
|
84
84
|
- **可撤回合同状态**:未全部签署完成
|
|
85
85
|
- **不撤回合同状态**:已全部签署完成、已拒签、已过期、已撤回、拒绝填写、已解除等合同状态。
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
|
|
88
|
+
**合同额度返还规则**:
|
|
89
|
+
|
|
90
|
+
1.撤销服务按照合同份额 1:1赠送免费撤销次数。例如购买 100 份合同,赠送 100 次免费撤销额度。
|
|
91
|
+
2.仅当没有任何参与方签署过,或仅自动签署完成的合同,撤销后才会使用免费撤销额度。
|
|
92
|
+
3.当赠送的免费撤销额度使用完后,后续仍可撤销合同,但不会返还合同额度。
|
|
93
|
+
|
|
94
|
+
**注**:
|
|
88
95
|
1. 如果合同流程中的参与方均已签署完毕,则无法通过该接口撤销合同,签署完毕的合同需要双方走解除流程将合同作废,可以参考<a href="https://qian.tencent.com/developers/companyApis/operateFlows/CreateReleaseFlow" target="_blank">发起解除合同流程</a>接口。
|
|
89
96
|
|
|
90
97
|
2. 有对应合同撤销权限的人:
|
|
@@ -96,10 +103,6 @@ class EssClient(AbstractClient):
|
|
|
96
103
|
- 其它员工<font color='red'>(并已经授予撤销我发起的合同后)</font>:
|
|
97
104
|
- 撤销人与发起人<font color='red'>**不在**</font>同一个部门:<font color='red'>(确保已授予查询合同 - 企业全部合同权限)</font>
|
|
98
105
|
- 撤销人与发起人<font color='red'>**在**</font>用一个部门:<font color='red'>(确保授予查询合同 - 本部门全部合同权限 或 企业全部合同权限)</font>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
3. <font color='red'>**只有撤销没有参与方签署过或只有自动签署签署过的合同,才会返还合同额度。**</font>
|
|
102
|
-
|
|
103
106
|
4. 撤销后可以看合同PDF内容的人员: 发起方的超管, 发起方自己,发起方撤销合同的操作人员,已经签署合同、已经填写合同、邀请填写已经补充信息的参与人员, 其他参与人员看不到合同的内容。
|
|
104
107
|
"""
|
|
105
108
|
|
|
@@ -282,7 +285,13 @@ class EssClient(AbstractClient):
|
|
|
282
285
|
批量撤销结果可以通过接口返回的TaskId关联[批量撤销任务结果回调](https://qian.tencent.com/developers/company/callback_types_contracts_sign#%E4%B9%9D-%E6%89%B9%E9%87%8F%E6%92%A4%E9%94%80%E7%BB%93%E6%9E%9C%E5%9B%9E%E8%B0%83)或通过接口[查询批量撤销签署流程任务结果](https://qian.tencent.com/developers/companyApis/operateFlows/CreateBatchCancelFlowUrl)
|
|
283
286
|
|
|
284
287
|
|
|
285
|
-
|
|
288
|
+
**合同额度返还规则**:
|
|
289
|
+
|
|
290
|
+
1.撤销服务按照合同份额 1:1赠送免费撤销次数。例如购买 100 份合同,赠送 100 次免费撤销额度。
|
|
291
|
+
2.仅当没有任何参与方签署过,或仅自动签署完成的合同,撤销后才会使用免费撤销额度。
|
|
292
|
+
3.当赠送的免费撤销额度使用完后,后续仍可撤销合同,但不会返还合同额度。
|
|
293
|
+
|
|
294
|
+
**注**:
|
|
286
295
|
1. 如果合同流程中的参与方均已签署完毕,则无法通过该接口撤销合同,签署完毕的合同需要双方走解除流程将合同作废,可以参考<a href="https://qian.tencent.com/developers/companyApis/operateFlows/CreateReleaseFlow" target="_blank">发起解除合同流程</a>接口。
|
|
287
296
|
|
|
288
297
|
2. 有对应合同撤销权限的人:
|
|
@@ -295,9 +304,6 @@ class EssClient(AbstractClient):
|
|
|
295
304
|
- 撤销人与发起人<font color='red'>**不在**</font>同一个部门:<font color='red'>(确保已授予查询合同 - 企业全部合同权限)</font>
|
|
296
305
|
- 撤销人与发起人<font color='red'>**在**</font>用一个部门:<font color='red'>(确保授予查询合同 - 本部门全部合同权限 或 企业全部合同权限)</font>
|
|
297
306
|
|
|
298
|
-
|
|
299
|
-
3. <font color='red'>**只有撤销没有参与方签署过或只有自动签署签署过的合同,才会返还合同额度。**</font>
|
|
300
|
-
|
|
301
307
|
4. 撤销后可以看合同PDF内容的人员: 发起方的超管, 发起方自己,发起方撤销合同的操作人员,已经签署合同、已经填写合同、邀请填写已经补充信息的参与人员, 其他参与人员看不到合同的内容。
|
|
302
308
|
"""
|
|
303
309
|
|
|
@@ -457,9 +463,8 @@ class EssClient(AbstractClient):
|
|
|
457
463
|
1. 该接口可生成签署人的批量、合同组签署/查看链接 。
|
|
458
464
|
2. 该签署链接**默认有效期为30分钟**,过期后将失效,如需签署可重新创建批量签署链接 。
|
|
459
465
|
3. 该接口返回的签署链接适用于APP集成的场景,支持APP打开或浏览器直接打开,**不支持微信小程序嵌入**。
|
|
460
|
-
跳转到小程序的实现,参考微信官方文档(分为<a href="https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html">全屏</a>、<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html">半屏</a>两种方式),如何配置也可以请参考: <a href="https://qian.tencent.com/developers/company/openwxminiprogram">跳转电子签小程序配置</a>。
|
|
461
466
|
4. 因h5涉及人脸身份认证能力基于慧眼人脸核身,对Android和iOS系统均有一定要求, 因此<font color='red'>App嵌入H5签署合同需要按照慧眼提供的<a href="https://cloud.tencent.com/document/product/1007/61076">慧眼人脸核身兼容性文档</a>做兼容性适配</font>。
|
|
462
|
-
5.
|
|
467
|
+
5. <font color='red'>iframe 嵌入暂不支持人脸相关操作</font>,包括设置密码等需要进行的人脸核验。
|
|
463
468
|
"""
|
|
464
469
|
|
|
465
470
|
kwargs = {}
|
|
@@ -858,6 +863,9 @@ class EssClient(AbstractClient):
|
|
|
858
863
|
注:
|
|
859
864
|
1. `支持的文件类型有doc、docx、xls、xlsx、html、jpg、jpeg、png、bmp、txt`
|
|
860
865
|
2. `可通过发起合同时设置预览来检查转换文件是否达到预期效果`
|
|
866
|
+
|
|
867
|
+
整体流程如下图
|
|
868
|
+

|
|
861
869
|
"""
|
|
862
870
|
|
|
863
871
|
kwargs = {}
|
|
@@ -1137,9 +1145,8 @@ class EssClient(AbstractClient):
|
|
|
1137
1145
|
注意:
|
|
1138
1146
|
1. 转交的目标经办人需要已经加入企业,且完成实名。
|
|
1139
1147
|
2. 仅企业拥有`超管`、`法人`或者`合同管理员`角色的员工才有调用本接口的权限。如果使用主带子方式调用,请确保您已经加入子企业,且账号在子企业中担任任一上述角色。
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
5. 若当前经办人已签署完成,或者处于签署流程中,则不支持进行转交。
|
|
1148
|
+
5. 若原合同有填写控件,且当前经办人已经完成填写,则不支持进行转交。
|
|
1149
|
+
6. 若当前经办人已签署完成,或者处于签署流程中,或合同处于完成态(例如:签署完成,拒签,撤销,过期等),则不支持进行转交。
|
|
1143
1150
|
"""
|
|
1144
1151
|
|
|
1145
1152
|
kwargs = {}
|
|
@@ -1404,9 +1411,8 @@ class EssClient(AbstractClient):
|
|
|
1404
1411
|
**注意**
|
|
1405
1412
|
1. 该签署链接**默认有效期为30分钟**,过期后将失效,如需签署可重新创建签署链接。
|
|
1406
1413
|
2. 该接口返回的签署链接适用于APP集成的场景,支持APP、支付宝打开或浏览器直接打开,**不支持微信小程序嵌入**。配置方式请参考:<a href="https://qian.tencent.com/developers/company/openqianh5/">跳转电子签H5</a>。
|
|
1407
|
-
如需跳转到小程序的实现,参考微信官方文档(分为<a href="https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.html">全屏</a>、<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html">半屏</a>两种方式),如何配置也可以请参考: <a href="https://qian.tencent.com/developers/company/openwxminiprogram">跳转电子签小程序配置</a>。
|
|
1408
1414
|
3. 因h5涉及人脸身份认证能力基于慧眼人脸核身,对Android和iOS系统均有一定要求, 因此<font color='red'>App嵌入H5签署合同需要按照慧眼提供的<a href="https://cloud.tencent.com/document/product/1007/61076">慧眼人脸核身兼容性文档</a>做兼容性适配</font>。
|
|
1409
|
-
4.
|
|
1415
|
+
4. <font color='red'>iframe 嵌入暂不支持人脸相关操作</font>,包括设置密码等需要进行的人脸核验。
|
|
1410
1416
|
"""
|
|
1411
1417
|
|
|
1412
1418
|
kwargs = {}
|
|
@@ -2049,6 +2055,138 @@ class EssClient(AbstractClient):
|
|
|
2049
2055
|
|
|
2050
2056
|
return await self.call_and_deserialize(**kwargs)
|
|
2051
2057
|
|
|
2058
|
+
async def CreateRequestWithEncryption(
|
|
2059
|
+
self,
|
|
2060
|
+
request: models.CreateRequestWithEncryptionRequest,
|
|
2061
|
+
opts: Dict = None,
|
|
2062
|
+
) -> models.CreateRequestWithEncryptionResponse:
|
|
2063
|
+
"""
|
|
2064
|
+
该接口支持对请求内容进行加密传输。调用方需使用约定的 AES-CBC 或 SM4-CBC 算法对请求内容进行加密,并使用 HMAC-SHA256 或 HMAC-SM3 算法对 IV 和加密后的数据进行完整性校验,防止请求内容被篡改。
|
|
2065
|
+
|
|
2066
|
+

|
|
2067
|
+
|
|
2068
|
+
**请求端加密流程**
|
|
2069
|
+
1. 每次请求使用密码学安全的随机源生成 16 字节 的 IV。每次请求必须重新生成,严禁复用。
|
|
2070
|
+
2. 使用约定的 AES-CBC 或 SM4-CBC 算法对原始请求体进行加密,使用 PKCS#7 Padding。
|
|
2071
|
+
3. 将加密后的密文原始字节进行标准 Base64 编码,作为 EncryptedData 参数。
|
|
2072
|
+
4. 将 IV 原始字节进行标准 Base64 编码,作为 IV 参数。
|
|
2073
|
+
5. 对 IV 原始字节和密文原始字节直接拼接(不添加分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)
|
|
2074
|
+
6. 将 HMAC 的结果进行 标准 Base64 编码,作为 EncryptionSignature 参数。
|
|
2075
|
+
|
|
2076
|
+
**响应端解密流程**
|
|
2077
|
+
1. 先判断本接口自身是否返回外层错误,此时错误为明文(标准腾讯云错误体),有则直接失败处理。
|
|
2078
|
+
2. 分别对 IV、EncryptedData、EncryptionSignature 做标准 Base64 解码,得到原始字节。
|
|
2079
|
+
3. 将 IV 与密文原始字节直接拼接(无分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)。
|
|
2080
|
+
4. 与响应中 EncryptionSignature 解码后的字节做恒定时间比较,不一致立即失败,不得继续解密。
|
|
2081
|
+
5. 使用约定的 AES-CBC 或 SM4-CBC,以 IV 和密钥解密 EncryptedData,去除 PKCS#7 Padding 得到明文。
|
|
2082
|
+
6. 先用腾讯云标准错误体反序列化明文,判断被加密业务接口是否返回 Error。
|
|
2083
|
+
7. 无业务错误时,再用目标业务接口的响应结构体反序列化明文,取出实际业务参数。
|
|
2084
|
+
|
|
2085
|
+
**响应端错误处理**
|
|
2086
|
+
1. 外层错误(本接口本身调用失败):返回标准腾讯云错误 JSON(含 Error.Code / Error.Message),无 EncryptedData,不需要解密即可处理。
|
|
2087
|
+
2. 内层错误(业务接口执行失败):外层成功,但解密后的明文里包含 Error.Code / Error.Message,按目标业务接口的错误规范处理。
|
|
2088
|
+
|
|
2089
|
+
**处理过程示例**
|
|
2090
|
+
```
|
|
2091
|
+
# ========== 前置约定 ==========
|
|
2092
|
+
AESKey : 加密 密钥(AES 32 字节,SM4 16 字节)
|
|
2093
|
+
HMACKey : HMAC 密钥(与加密密钥需要不同)
|
|
2094
|
+
ALGO : AES-CBC 或 SM4-CBC,双方约定
|
|
2095
|
+
HMAC : ALGO == AES-CBC ? HMAC-SHA256 : HMAC-SM3
|
|
2096
|
+
|
|
2097
|
+
# ========== 请求端:加密并调用 ==========
|
|
2098
|
+
function CallWithEncryption(bizAction, bizRequestObj):
|
|
2099
|
+
# 1. 序列化业务请求
|
|
2100
|
+
plaintext = JSON.stringify(bizRequestObj)
|
|
2101
|
+
# 2. 生成 16 字节随机 IV(每次新生成,禁止复用)
|
|
2102
|
+
iv = SecureRandom(16)
|
|
2103
|
+
# 3. 对称加密(PKCS#7 Padding)
|
|
2104
|
+
ciphertext = SymmetricEncrypt(ALGO, AESKey, iv, plaintext)
|
|
2105
|
+
# 4. 计算完整性签名:HMAC(Key, IV || Ciphertext)
|
|
2106
|
+
signature = HMAC(HMACKey, concat(iv, ciphertext))
|
|
2107
|
+
# 5. 组装外层请求参数(三段均为标准 Base64)
|
|
2108
|
+
encReq = {
|
|
2109
|
+
RequestAction: bizAction,
|
|
2110
|
+
IV: Base64(iv),
|
|
2111
|
+
EncryptedData: Base64(ciphertext),
|
|
2112
|
+
EncryptionSignature: Base64(signature),
|
|
2113
|
+
}
|
|
2114
|
+
# 6. 调用 CreateRequestWithEncryption
|
|
2115
|
+
# TC3-HMAC-SHA256 鉴权由官方 SDK 自动完成
|
|
2116
|
+
encResp = CloudAPI.CreateRequestWithEncryption(encReq)
|
|
2117
|
+
# 7. 外层错误:明文,直接抛出
|
|
2118
|
+
if encResp.Error != nil:
|
|
2119
|
+
raise OuterError(encResp.Error)
|
|
2120
|
+
# 8. 解密并返回业务响应
|
|
2121
|
+
return DecryptResponse(encResp.Response)
|
|
2122
|
+
|
|
2123
|
+
# ========== 响应端:校验并解密 ==========
|
|
2124
|
+
function DecryptResponse(resp):
|
|
2125
|
+
# 1. Base64 解码
|
|
2126
|
+
ivBytes = Base64Decode(resp.IV)
|
|
2127
|
+
ctBytes = Base64Decode(resp.EncryptedData)
|
|
2128
|
+
sigBytes = Base64Decode(resp.EncryptionSignature)
|
|
2129
|
+
# 2. 重新计算 HMAC
|
|
2130
|
+
expected = HMAC(HMACKey, concat(ivBytes, ctBytes))
|
|
2131
|
+
# 3. 恒定时间比较,失败立即终止(不得继续解密)
|
|
2132
|
+
if not ConstantTimeEqual(expected, sigBytes):
|
|
2133
|
+
raise SignatureMismatch
|
|
2134
|
+
# 4. 对称解密,去除 PKCS#7 Padding
|
|
2135
|
+
plaintext = SymmetricDecrypt(ALGO, AESKey, ivBytes, ctBytes)
|
|
2136
|
+
# 5. 先按腾讯云错误体解析,判断业务是否失败
|
|
2137
|
+
bizErr = TryParseTencentCloudError(plaintext)
|
|
2138
|
+
if bizErr != nil:
|
|
2139
|
+
raise BusinessError(bizErr)
|
|
2140
|
+
# 6. 按目标业务接口的响应结构反序列化
|
|
2141
|
+
return JSON.parse(plaintext, BizResponseSchema)
|
|
2142
|
+
```
|
|
2143
|
+
|
|
2144
|
+
**AES-CBC 示例**
|
|
2145
|
+
以下示例参数及结果可用于验证 AES-CBC 加密和 HMAC-SHA256 签名算法的实现是否正确。
|
|
2146
|
+
|
|
2147
|
+
加密密钥:AES-CBC-Key-1234
|
|
2148
|
+
签名密钥:AES-HMAC-Key-123
|
|
2149
|
+
IV:1234567890abcdef
|
|
2150
|
+
请求内容:{"Request": "This is a test."}
|
|
2151
|
+
|
|
2152
|
+
最终请求参数:
|
|
2153
|
+
```
|
|
2154
|
+
{
|
|
2155
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2156
|
+
"IV": "MTIzNDU2Nzg5MGFiY2RlZg==",
|
|
2157
|
+
"EncryptedData": "Iqp2W1jislwMNmE7bH9dKZZiMQsfkAPyvAAqDFRnWLw=",
|
|
2158
|
+
"EncryptionSignature": "4TT3PUCZgZT7YmEPtXDm5PDcM6xT7FoYHfMW8xunB5I="
|
|
2159
|
+
}
|
|
2160
|
+
```
|
|
2161
|
+
|
|
2162
|
+
**SM4-CBC 示例**
|
|
2163
|
+
以下示例参数及结果可用于验证 SM4-CBC 加密和 HMAC-SM4 签名算法的实现是否正确。
|
|
2164
|
+
|
|
2165
|
+
加密密钥:SM4-CBC-Key-1234
|
|
2166
|
+
签名密钥:SM4-HMAC-Key-123
|
|
2167
|
+
IV:fedcba0987654321
|
|
2168
|
+
请求内容:{"Request": "This is a test."}
|
|
2169
|
+
|
|
2170
|
+
最终请求参数:
|
|
2171
|
+
```
|
|
2172
|
+
{
|
|
2173
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2174
|
+
"IV": "ZmVkY2JhMDk4NzY1NDMyMQ==",
|
|
2175
|
+
"EncryptedData": "GwUovQhNUPaUnVM/UDXMtPOYTpTSi2B1oyZDFbyyvns=",
|
|
2176
|
+
"EncryptionSignature": "nHB/v/AvOaDCQ66esFNnp12lHKcGkwaLGid0Warl/KE="
|
|
2177
|
+
}
|
|
2178
|
+
```
|
|
2179
|
+
"""
|
|
2180
|
+
|
|
2181
|
+
kwargs = {}
|
|
2182
|
+
kwargs["action"] = "CreateRequestWithEncryption"
|
|
2183
|
+
kwargs["params"] = request._serialize()
|
|
2184
|
+
kwargs["resp_cls"] = models.CreateRequestWithEncryptionResponse
|
|
2185
|
+
kwargs["headers"] = request.headers
|
|
2186
|
+
kwargs["opts"] = opts or {}
|
|
2187
|
+
|
|
2188
|
+
return await self.call_and_deserialize(**kwargs)
|
|
2189
|
+
|
|
2052
2190
|
async def CreateRiskIdentificationTaskFeedback(
|
|
2053
2191
|
self,
|
|
2054
2192
|
request: models.CreateRiskIdentificationTaskFeedbackRequest,
|
|
@@ -2852,6 +2990,9 @@ class EssClient(AbstractClient):
|
|
|
2852
2990
|
注:
|
|
2853
2991
|
1. `大文件转换所需的时间可能会比较长`
|
|
2854
2992
|
2. `本接口返回的文件资源ID就是PDF资源ID,可以直接用于【用PDF文件创建签署流程】接口发起合同。`
|
|
2993
|
+
|
|
2994
|
+
整体流程如下图
|
|
2995
|
+

|
|
2855
2996
|
"""
|
|
2856
2997
|
|
|
2857
2998
|
kwargs = {}
|