tencentcloud-sdk-python-ess 3.1.164__tar.gz → 3.1.169__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.164 → tencentcloud_sdk_python_ess-3.1.169}/PKG-INFO +2 -2
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/setup.py +1 -1
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/__init__.py +1 -1
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/v20201111/ess_client.py +206 -104
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/v20201111/ess_client_async.py +201 -104
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/v20201111/models.py +195 -84
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud_sdk_python_ess.egg-info/PKG-INFO +2 -2
- tencentcloud_sdk_python_ess-3.1.169/tencentcloud_sdk_python_ess.egg-info/requires.txt +1 -0
- tencentcloud_sdk_python_ess-3.1.164/tencentcloud_sdk_python_ess.egg-info/requires.txt +0 -1
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/README.rst +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/setup.cfg +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/__init__.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/v20201111/__init__.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud/ess/v20201111/errorcodes.py +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud_sdk_python_ess.egg-info/SOURCES.txt +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/tencentcloud_sdk_python_ess.egg-info/dependency_links.txt +0 -0
- {tencentcloud_sdk_python_ess-3.1.164 → tencentcloud_sdk_python_ess-3.1.169}/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.169
|
|
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.169
|
|
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.169,<4.0.0"],
|
|
12
12
|
|
|
13
13
|
version=tencentcloud.__version__,
|
|
14
14
|
description='Tencent Cloud Ess SDK for Python',
|
|
@@ -755,49 +755,43 @@ class EssClient(AbstractClient):
|
|
|
755
755
|
|
|
756
756
|
|
|
757
757
|
def CreateDocument(self, request):
|
|
758
|
-
r"""
|
|
758
|
+
r"""本接口用于基于**模板**创建合同的电子文档,并填充模板中由发起方补充的信息(归属发起方填写控件)。
|
|
759
759
|
|
|
760
|
-
###
|
|
761
|
-
该接口需要给对应的流程指定一个模板id,并且填充该模板中需要补充的信息。需要配置<a href="https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow" target="_blank">创建签署流程</a>和<a href="https://qian.tencent.com/developers/companyApis/startFlows/StartFlow" target="_blank">发起签署流程</a>接口使用。具体逻辑可以参考下图:
|
|
760
|
+
### 1.1 调用流程
|
|
762
761
|
|
|
763
|
-
|
|
762
|
+
本接口需指定一个模板 ID,并填充该模板中需补充的信息。它需要与<a href="https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow" target="_blank">创建签署流程</a>和<a href="https://qian.tencent.com/developers/companyApis/startFlows/StartFlow" target="_blank">发起签署流程</a>接口配合使用,完整调用顺序如下:
|
|
763
|
+

|
|
764
764
|
|
|
765
|
+
### 1.2 发起方填写控件
|
|
765
766
|
|
|
766
|
-
|
|
767
|
-
模板中配置的<font color="red">发起人填充控件</font>可以通过本接口的**FormFields数组**字段填充。
|
|
768
|
-
|
|
769
|
-
**<font color="red">填充填写控件需要进行Pdf合成工作,文档合成完成后会收到[合同文档合成完成回调](https://qian.tencent.com/developers/company/callback_types_contracts_sign#%E4%B9%9D-%E5%90%88%E5%90%8C%E6%96%87%E6%A1%A3%E5%90%88%E6%88%90%E5%AE%8C%E6%88%90%E5%9B%9E%E8%B0%83),建议在收到此回调后再调用 [StartFlow](https://qian.tencent.com/developers/companyApis/startFlows/StartFlow) 接口。</font>**
|
|
767
|
+
模板中配置的<font color="red">发起人填充控件</font>,可通过本接口的 **FormFields 数组**字段填充。
|
|
770
768
|
|
|
771
769
|

|
|
772
770
|
|
|
773
|
-
|
|
774
|
-
|
|
771
|
+
填充的传参示例如下(以 ComponentName 匹配模板中的控件名):
|
|
772
|
+
|
|
773
|
+
```json
|
|
774
|
+
[
|
|
775
|
+
{ "ComponentName": "项目的名字", "ComponentValue": "休闲山庄" },
|
|
776
|
+
{ "ComponentName": "项目的地址", "ComponentValue": "凤凰山北侧" },
|
|
777
|
+
{ "ComponentName": "范围", "ComponentValue": "凤凰山至107国道" },
|
|
778
|
+
{ "ComponentName": "面积", "ComponentValue": "100亩" },
|
|
779
|
+
{ "ComponentName": "基本情况", "ComponentValue": "完好" },
|
|
780
|
+
{ "ComponentName": "用途", "ComponentValue": "经营农家乐" }
|
|
781
|
+
]
|
|
775
782
|
```
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
"ComponentValue": "休闲山庄"
|
|
779
|
-
}, {
|
|
780
|
-
"ComponentName": "项目的地址",
|
|
781
|
-
"ComponentValue": "凤凰山北侧",
|
|
782
|
-
}, {
|
|
783
|
-
"ComponentName": "范围",
|
|
784
|
-
"ComponentValue": "凤凰山至107国道",
|
|
785
|
-
}, {
|
|
786
|
-
"ComponentName": "面积",
|
|
787
|
-
"ComponentValue": "100亩",
|
|
788
|
-
}, {
|
|
789
|
-
"ComponentName": "基本情况",
|
|
790
|
-
"ComponentValue": "完好",
|
|
791
|
-
}, , {
|
|
792
|
-
"ComponentName": "用途",
|
|
793
|
-
"ComponentValue": "经营农家乐",
|
|
794
|
-
}
|
|
795
|
-
]
|
|
796
|
-
```
|
|
797
|
-
合成后合同样子示例
|
|
783
|
+
|
|
784
|
+
合成后的合同样例:
|
|
798
785
|
|
|
799
786
|

|
|
800
787
|
|
|
788
|
+
### 1.3 注意事项
|
|
789
|
+
|
|
790
|
+
- 本接口<font color="red">只能填充分配给发起方的填写控件</font>,不能填充分配给签署方的签署控件。
|
|
791
|
+
- <font color="red">若使用预览方式(`NeedPreview=true`),预览确认无误后,需用同样的参数再次调用本接口</font>(`NeedPreview=false`),并使用新调用返回的 `FlowId` 去调用 <a href="https://qian.tencent.com/developers/companyApis/startFlows/StartFlow" target="_blank">StartFlow</a>发起签署。预览模式返回的 `FlowId` 为临时 ID,不能用于发起。
|
|
792
|
+
- 只要存在发起方的填写控件,填充时会触发 PDF 合成工作,文档合成完成后会收到[合同文档合成完成回调](https://qian.tencent.com/developers/company/callback_types_contracts_sign#%E4%B9%9D-%E5%90%88%E5%90%8C%E6%96%87%E6%A1%A3%E5%90%88%E6%88%90%E5%AE%8C%E6%88%90%E5%9B%9E%E8%B0%83)。<font color="red">一定要等待该回调(或等待数秒)后再调用 [StartFlow](https://qian.tencent.com/developers/companyApis/startFlows/StartFlow) 接口发起签署</font>,以确保文档已合成完毕。
|
|
793
|
+
- 调用本接口(CreateDocument)成功后,请**在 5 分钟内调用 [StartFlow](https://qian.tencent.com/developers/companyApis/startFlows/StartFlow) 启动合同**,不要长时间暂存仅调用了 CreateDocument 而未发起的合同;否则会导致该合同长时间后无法再启动,且合同额度不再返还。
|
|
794
|
+
|
|
801
795
|
:param request: Request instance for CreateDocument.
|
|
802
796
|
:type request: :class:`tencentcloud.ess.v20201111.models.CreateDocumentRequest`
|
|
803
797
|
:rtype: :class:`tencentcloud.ess.v20201111.models.CreateDocumentResponse`
|
|
@@ -1060,40 +1054,26 @@ class EssClient(AbstractClient):
|
|
|
1060
1054
|
|
|
1061
1055
|
def CreateFlow(self, request):
|
|
1062
1056
|
r"""通过模板创建签署流程<br/>
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
</tr>
|
|
1084
|
-
<tr>
|
|
1085
|
-
<td>个人(自然人)签署</td>
|
|
1086
|
-
<td>个人的真实名字、个人的触达手机号、个人的身份证(证件号非必传)</td>
|
|
1087
|
-
</tr>
|
|
1088
|
-
</tbody>
|
|
1089
|
-
</table>
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
注:配合<a href="https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument" target="_blank">创建电子文档</a>和<a href="https://qian.tencent.com/developers/companyApis/startFlows/StartFlow" target="_blank">发起签署流程</a>接口使用。整体的逻辑如下图
|
|
1093
|
-
|
|
1094
|
-

|
|
1095
|
-
|
|
1096
|
-
注:**静默(自动)签署不支持合同签署方存在填写**功能
|
|
1057
|
+
适用场景:在标准制式的合同场景中,可通过提前预制好模板文件,每次使用这个配置好的模板,补充合同内容信息及签署信息生成电子合同。
|
|
1058
|
+
## 1.1 传参方式指引
|
|
1059
|
+
|
|
1060
|
+
| 签署方类型 | ApproverType | 需要提前准备的信息 | 对应 Approvers 关键字段 |
|
|
1061
|
+
|------|------|------|------|
|
|
1062
|
+
| 本企业员工(未认证加入) | 0 | 签署企业名、员工真实姓名、员工触达手机号、证件号(非必传) | OrganizationName + ApproverName + ApproverMobile |
|
|
1063
|
+
| 本企业员工(已认证加入) | 0 | 签署企业名、员工在电子签平台的 ID(UserId) | OrganizationName + UserId |
|
|
1064
|
+
| 他方企业员工 | 0 | 签署企业名、员工真实姓名、员工触达手机号、证件号(非必传) | OrganizationName + ApproverName + ApproverMobile |
|
|
1065
|
+
| 个人(自然人) | 1 | 个人真实姓名、个人触达手机号、身份证号(非必传) | ApproverName + ApproverMobile |
|
|
1066
|
+
|
|
1067
|
+
## 1.2 接口调用流程
|
|
1068
|
+
此接口需<font color="red">配合<a href="https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument" target="_blank">创建电子文档</a>和<a href="https://qian.tencent.com/developers/companyApis/startFlows/StartFlow" target="_blank">发起签署流程</a>接口使用</font> 。整体的逻辑如下图
|
|
1069
|
+
|
|
1070
|
+

|
|
1071
|
+
|
|
1072
|
+
## 1.3 注意事项
|
|
1073
|
+
- 合同<font color="red">发起后就会扣减合同的额度</font> , 只有撤销没有参与方签署过或只有自动签署签署过的合同,且<font color="red">有撤销合同额度</font>的情形下,才会返还合同额度。(**过期,拒签,签署完成,解除完成等状态不会返还额度**)。具体可以参考[合同撤销返还额度说明](https://qian.tencent.com/developers/company/contract_cancel_quota)。
|
|
1074
|
+
- 支持的证件类型可以参考[支持的证件类型](https://qian.tencent.com/developers/company/id_card_support)。
|
|
1075
|
+
- 合同发起方需要【组织管理】->【角色管理】中拥有<font color="red">接口发起合同</font>的权限
|
|
1076
|
+

|
|
1097
1077
|
<br>
|
|
1098
1078
|
|
|
1099
1079
|
<font color="red">相关视频指引</font> <br>
|
|
@@ -1224,43 +1204,26 @@ class EssClient(AbstractClient):
|
|
|
1224
1204
|
r"""此接口(CreateFlowByFiles)用来通过上传后的pdf资源编号来创建待签署的合同流程。<br/>
|
|
1225
1205
|
适用场景:适用非制式的合同文件签署。一般开发者自己有完整的签署文件,可以通过该接口传入完整的PDF文件及流程信息生成待签署的合同流程。<br/>
|
|
1226
1206
|
|
|
1227
|
-
|
|
1228
|
-
<thead>
|
|
1229
|
-
<tr>
|
|
1230
|
-
<th>签署人类别</th>
|
|
1231
|
-
<th>需要提前准备的信息</th>
|
|
1232
|
-
</tr>
|
|
1233
|
-
</thead>
|
|
1234
|
-
<tbody>
|
|
1235
|
-
<tr>
|
|
1236
|
-
<td>自己企业的员工签署(未认证加入或已认证加入)</td>
|
|
1237
|
-
<td>签署企业的名字、员工的真实名字、员工的触达手机号、员工的证件号(证件号非必传)</td>
|
|
1238
|
-
</tr>
|
|
1239
|
-
<tr>
|
|
1240
|
-
<td>自己企业的员工签署(已认证加入)</td>
|
|
1241
|
-
<td>签署企业的名字、员工在电子签平台的ID(UserId)</td>
|
|
1242
|
-
</tr>
|
|
1243
|
-
<tr>
|
|
1244
|
-
<td>其他企业的员工签署</td>
|
|
1245
|
-
<td>签署企业的名字、员工的真实名字、员工的触达手机号、员工的证件号(证件号非必传)</td>
|
|
1246
|
-
</tr>
|
|
1247
|
-
<tr>
|
|
1248
|
-
<td>个人(自然人)签署</td>
|
|
1249
|
-
<td>个人的真实名字、个人的触达手机号、个人的身份证(证件号非必传)</td>
|
|
1250
|
-
</tr>
|
|
1251
|
-
</tbody>
|
|
1252
|
-
</table>
|
|
1207
|
+
## 传参方式指引
|
|
1253
1208
|
|
|
1209
|
+
| 签署方类型 | ApproverType | 需要提前准备的信息 | 对应 Approvers 关键字段 |
|
|
1210
|
+
|------|------|------|------|
|
|
1211
|
+
| 本企业员工(未认证加入) | 0 | 签署企业名、员工真实姓名、员工触达手机号、证件号(非必传) | OrganizationName + ApproverName + ApproverMobile |
|
|
1212
|
+
| 本企业员工(已认证加入) | 0 | 签署企业名、员工在电子签平台的 ID(UserId) | OrganizationName + UserId |
|
|
1213
|
+
| 他方企业员工 | 0 | 签署企业名、员工真实姓名、员工触达手机号、证件号(非必传) | OrganizationName + ApproverName + ApproverMobile |
|
|
1214
|
+
| 个人(自然人) | 1 | 个人真实姓名、个人触达手机号、身份证号(非必传) | ApproverName + ApproverMobile |
|
|
1254
1215
|
|
|
1255
1216
|
|
|
1256
|
-
该接口需要依赖[上传文件](https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles)接口生成pdf资源编号(FileIds)进行使用。(如果非pdf文件需要调用[创建文件转换任务](https://qian.tencent.com/developers/companyApis/templatesAndFiles/
|
|
1217
|
+
该接口需要依赖[上传文件](https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles)接口生成pdf资源编号(FileIds)进行使用。(如果非pdf文件需要调用[创建文件转换任务](https://qian.tencent.com/developers/companyApis/templatesAndFiles/DescribeFileConvertTask)接口转换成pdf资源)<br/>
|
|
1257
1218
|
|
|
1258
|
-
|
|
1259
|
-

|
|
1260
1221
|
|
|
1261
1222
|
注:
|
|
1262
|
-
-
|
|
1263
|
-
-
|
|
1223
|
+
- 合同<font color="red">发起后就会扣减合同的额度</font> , 只有撤销没有参与方签署过或只有自动签署签署过的合同,且<font color="red">有撤销合同额度</font>的情形下,才会返还合同额度。(**过期,拒签,签署完成,解除完成等状态不会返还额度**)。具体可以参考[合同撤销返还额度说明](https://qian.tencent.com/developers/company/contract_cancel_quota)。
|
|
1224
|
+
- 支持的证件类型可以参考[支持的证件类型](https://qian.tencent.com/developers/company/id_card_support)。
|
|
1225
|
+
- 合同发起方需要【组织管理】->【角色管理】中拥有<font color="red">接口发起合同</font>的权限
|
|
1226
|
+

|
|
1264
1227
|
|
|
1265
1228
|
|
|
1266
1229
|
<font color="red">相关视频指引</font> <br>
|
|
@@ -2396,6 +2359,145 @@ class EssClient(AbstractClient):
|
|
|
2396
2359
|
raise TencentCloudSDKException(type(e).__name__, str(e))
|
|
2397
2360
|
|
|
2398
2361
|
|
|
2362
|
+
def CreateRequestWithEncryption(self, request):
|
|
2363
|
+
r"""该接口支持对请求内容进行加密传输。调用方需使用约定的 AES-CBC 或 SM4-CBC 算法对请求内容进行加密,并使用 HMAC-SHA256 或 HMAC-SM3 算法对 IV 和加密后的数据进行完整性校验,防止请求内容被篡改。
|
|
2364
|
+
|
|
2365
|
+

|
|
2366
|
+
|
|
2367
|
+
**请求端加密流程**
|
|
2368
|
+
1. 每次请求使用密码学安全的随机源生成 16 字节 的 IV。每次请求必须重新生成,严禁复用。
|
|
2369
|
+
2. 使用约定的 AES-CBC 或 SM4-CBC 算法对原始请求体进行加密,使用 PKCS#7 Padding。
|
|
2370
|
+
3. 将加密后的密文原始字节进行标准 Base64 编码,作为 EncryptedData 参数。
|
|
2371
|
+
4. 将 IV 原始字节进行标准 Base64 编码,作为 IV 参数。
|
|
2372
|
+
5. 对 IV 原始字节和密文原始字节直接拼接(不添加分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)
|
|
2373
|
+
6. 将 HMAC 的结果进行 标准 Base64 编码,作为 EncryptionSignature 参数。
|
|
2374
|
+
|
|
2375
|
+
**响应端解密流程**
|
|
2376
|
+
1. 先判断本接口自身是否返回外层错误,此时错误为明文(标准腾讯云错误体),有则直接失败处理。
|
|
2377
|
+
2. 分别对 IV、EncryptedData、EncryptionSignature 做标准 Base64 解码,得到原始字节。
|
|
2378
|
+
3. 将 IV 与密文原始字节直接拼接(无分隔符),计算 HMAC-SHA256 或 HMAC-SM4:HMAC(Key, IVBytes || CiphertextBytes)。
|
|
2379
|
+
4. 与响应中 EncryptionSignature 解码后的字节做恒定时间比较,不一致立即失败,不得继续解密。
|
|
2380
|
+
5. 使用约定的 AES-CBC 或 SM4-CBC,以 IV 和密钥解密 EncryptedData,去除 PKCS#7 Padding 得到明文。
|
|
2381
|
+
6. 先用腾讯云标准错误体反序列化明文,判断被加密业务接口是否返回 Error。
|
|
2382
|
+
7. 无业务错误时,再用目标业务接口的响应结构体反序列化明文,取出实际业务参数。
|
|
2383
|
+
|
|
2384
|
+
**响应端错误处理**
|
|
2385
|
+
1. 外层错误(本接口本身调用失败):返回标准腾讯云错误 JSON(含 Error.Code / Error.Message),无 EncryptedData,不需要解密即可处理。
|
|
2386
|
+
2. 内层错误(业务接口执行失败):外层成功,但解密后的明文里包含 Error.Code / Error.Message,按目标业务接口的错误规范处理。
|
|
2387
|
+
|
|
2388
|
+
**处理过程示例**
|
|
2389
|
+
```
|
|
2390
|
+
# ========== 前置约定 ==========
|
|
2391
|
+
AESKey : 加密 密钥(AES 32 字节,SM4 16 字节)
|
|
2392
|
+
HMACKey : HMAC 密钥(与加密密钥需要不同)
|
|
2393
|
+
ALGO : AES-CBC 或 SM4-CBC,双方约定
|
|
2394
|
+
HMAC : ALGO == AES-CBC ? HMAC-SHA256 : HMAC-SM3
|
|
2395
|
+
|
|
2396
|
+
# ========== 请求端:加密并调用 ==========
|
|
2397
|
+
function CallWithEncryption(bizAction, bizRequestObj):
|
|
2398
|
+
# 1. 序列化业务请求
|
|
2399
|
+
plaintext = JSON.stringify(bizRequestObj)
|
|
2400
|
+
# 2. 生成 16 字节随机 IV(每次新生成,禁止复用)
|
|
2401
|
+
iv = SecureRandom(16)
|
|
2402
|
+
# 3. 对称加密(PKCS#7 Padding)
|
|
2403
|
+
ciphertext = SymmetricEncrypt(ALGO, AESKey, iv, plaintext)
|
|
2404
|
+
# 4. 计算完整性签名:HMAC(Key, IV || Ciphertext)
|
|
2405
|
+
signature = HMAC(HMACKey, concat(iv, ciphertext))
|
|
2406
|
+
# 5. 组装外层请求参数
|
|
2407
|
+
encReq = {
|
|
2408
|
+
RequestAction: bizAction,
|
|
2409
|
+
IV: Base64(iv),
|
|
2410
|
+
EncryptedData: Base64(ciphertext),
|
|
2411
|
+
EncryptionSignature: Base64(signature),
|
|
2412
|
+
}
|
|
2413
|
+
# 6. 调用 CreateRequestWithEncryption
|
|
2414
|
+
# TC3-HMAC-SHA256 鉴权由官方 SDK 自动完成
|
|
2415
|
+
encResp = CloudAPI.CreateRequestWithEncryption(encReq)
|
|
2416
|
+
# 7. 外层错误:明文,直接抛出
|
|
2417
|
+
if encResp.Error != nil:
|
|
2418
|
+
raise OuterError(encResp.Error)
|
|
2419
|
+
# 8. 解密并返回业务响应
|
|
2420
|
+
return DecryptResponse(encResp.Response)
|
|
2421
|
+
|
|
2422
|
+
# ========== 响应端:校验并解密 ==========
|
|
2423
|
+
function DecryptResponse(resp):
|
|
2424
|
+
# 1. Base64 解码
|
|
2425
|
+
ivBytes = Base64Decode(resp.IV)
|
|
2426
|
+
ctBytes = Base64Decode(resp.EncryptedData)
|
|
2427
|
+
sigBytes = Base64Decode(resp.EncryptionSignature)
|
|
2428
|
+
# 2. 重新计算 HMAC
|
|
2429
|
+
expected = HMAC(HMACKey, concat(ivBytes, ctBytes))
|
|
2430
|
+
# 3. 恒定时间比较,失败立即终止(不得继续解密)
|
|
2431
|
+
if not ConstantTimeEqual(expected, sigBytes):
|
|
2432
|
+
raise SignatureMismatch
|
|
2433
|
+
# 4. 对称解密,去除 PKCS#7 Padding
|
|
2434
|
+
plaintext = SymmetricDecrypt(ALGO, AESKey, ivBytes, ctBytes)
|
|
2435
|
+
# 5. 先按腾讯云错误体解析,判断业务是否失败
|
|
2436
|
+
bizErr = TryParseTencentCloudError(plaintext)
|
|
2437
|
+
if bizErr != nil:
|
|
2438
|
+
raise BusinessError(bizErr)
|
|
2439
|
+
# 6. 按目标业务接口的响应结构反序列化
|
|
2440
|
+
return JSON.parse(plaintext, BizResponseSchema)
|
|
2441
|
+
```
|
|
2442
|
+
|
|
2443
|
+
**AES-CBC 示例**
|
|
2444
|
+
|
|
2445
|
+
以下示例参数及结果可用于验证 AES-CBC 加密和 HMAC-SHA256 签名算法的实现是否正确。
|
|
2446
|
+
|
|
2447
|
+
加密密钥:AES-CBC-Key-1234
|
|
2448
|
+
签名密钥:AES-HMAC-Key-123
|
|
2449
|
+
IV:1234567890abcdef
|
|
2450
|
+
请求内容:{"Request": "This is a test."}
|
|
2451
|
+
|
|
2452
|
+
最终请求参数:
|
|
2453
|
+
```
|
|
2454
|
+
{
|
|
2455
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2456
|
+
"IV": "MTIzNDU2Nzg5MGFiY2RlZg==",
|
|
2457
|
+
"EncryptedData": "Iqp2W1jislwMNmE7bH9dKZZiMQsfkAPyvAAqDFRnWLw=",
|
|
2458
|
+
"EncryptionSignature": "4TT3PUCZgZT7YmEPtXDm5PDcM6xT7FoYHfMW8xunB5I="
|
|
2459
|
+
}
|
|
2460
|
+
```
|
|
2461
|
+
|
|
2462
|
+
**SM4-CBC 示例**
|
|
2463
|
+
|
|
2464
|
+
以下示例参数及结果可用于验证 SM4-CBC 加密和 HMAC-SM4 签名算法的实现是否正确。
|
|
2465
|
+
|
|
2466
|
+
加密密钥:SM4-CBC-Key-1234
|
|
2467
|
+
签名密钥:SM4-HMAC-Key-123
|
|
2468
|
+
IV:fedcba0987654321
|
|
2469
|
+
请求内容:{"Request": "This is a test."}
|
|
2470
|
+
|
|
2471
|
+
最终请求参数:
|
|
2472
|
+
```
|
|
2473
|
+
{
|
|
2474
|
+
"RequestAction": "DescribeFlowComponents",
|
|
2475
|
+
"IV": "ZmVkY2JhMDk4NzY1NDMyMQ==",
|
|
2476
|
+
"EncryptedData": "GwUovQhNUPaUnVM/UDXMtPOYTpTSi2B1oyZDFbyyvns=",
|
|
2477
|
+
"EncryptionSignature": "nHB/v/AvOaDCQ66esFNnp12lHKcGkwaLGid0Warl/KE="
|
|
2478
|
+
}
|
|
2479
|
+
```
|
|
2480
|
+
|
|
2481
|
+
:param request: Request instance for CreateRequestWithEncryption.
|
|
2482
|
+
:type request: :class:`tencentcloud.ess.v20201111.models.CreateRequestWithEncryptionRequest`
|
|
2483
|
+
:rtype: :class:`tencentcloud.ess.v20201111.models.CreateRequestWithEncryptionResponse`
|
|
2484
|
+
|
|
2485
|
+
"""
|
|
2486
|
+
try:
|
|
2487
|
+
params = request._serialize()
|
|
2488
|
+
headers = request.headers
|
|
2489
|
+
body = self.call("CreateRequestWithEncryption", params, headers=headers)
|
|
2490
|
+
response = json.loads(body)
|
|
2491
|
+
model = models.CreateRequestWithEncryptionResponse()
|
|
2492
|
+
model._deserialize(response["Response"])
|
|
2493
|
+
return model
|
|
2494
|
+
except Exception as e:
|
|
2495
|
+
if isinstance(e, TencentCloudSDKException):
|
|
2496
|
+
raise
|
|
2497
|
+
else:
|
|
2498
|
+
raise TencentCloudSDKException(type(e).__name__, str(e))
|
|
2499
|
+
|
|
2500
|
+
|
|
2399
2501
|
def CreateRiskIdentificationTaskFeedback(self, request):
|
|
2400
2502
|
r"""此接口(CreateRiskIdentificationTaskFeedback)用于创建合同审查任务结果反馈。
|
|
2401
2503
|
|
|
@@ -4608,16 +4710,16 @@ class EssClient(AbstractClient):
|
|
|
4608
4710
|
|
|
4609
4711
|
def StartFlow(self, request):
|
|
4610
4712
|
r"""此接口用于启动流程。它是模板发起合同的最后一步。
|
|
4611
|
-
在[创建签署流程](https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow)和[创建电子文档](https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument)之后,用于开始整个合同流程, 推进流程进入到签署环节。
|
|
4612
4713
|
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
注:
|
|
4616
|
-
1.<font color="red">合同发起后就会扣减合同的额度</font>, 只有撤销没有参与方签署过或只有自动签署签署过的合同,才会返还合同额度。(过期,拒签,签署完成,解除完成等状态不会返还额度)
|
|
4714
|
+
## 1.1 接口调用流程
|
|
4715
|
+
在[创建签署流程](https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow)和[创建电子文档](https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument)之后,用于开始整个合同流程, 推进流程进入到签署环节。
|
|
4617
4716
|
|
|
4618
|
-
|
|
4717
|
+

|
|
4619
4718
|
|
|
4620
|
-
|
|
4719
|
+
### 1.2 注意事项
|
|
4720
|
+
- 合同<font color="red">发起后就会扣减合同的额度</font> , 只有撤销没有参与方签署过或只有自动签署签署过的合同,且<font color="red">有撤销合同额度</font>的情形下,才会返还合同额度。(**过期,拒签,签署完成,解除完成等状态不会返还额度**)。具体可以参考[合同撤销返还额度说明](https://qian.tencent.com/developers/company/contract_cancel_quota)。
|
|
4721
|
+
- 只要存在填写控件,填充时会触发 PDF 合成工作,文档合成完成后会收到[合同文档合成完成回调](https://qian.tencent.com/developers/company/callback_types_contracts_sign#%E4%B9%9D-%E5%90%88%E5%90%8C%E6%96%87%E6%A1%A3%E5%90%88%E6%88%90%E5%AE%8C%E6%88%90%E5%9B%9E%E8%B0%83)。**一定要等待该回调(或等待数秒)后再调用 [StartFlow](https://qian.tencent.com/developers/companyApis/startFlows/StartFlow) 接口发起签署**,以确保文档已合成完毕。,尤其是当模板中存在动态表格等复杂填写控件时,因为合成过程可能会耗费秒级别的时间。
|
|
4722
|
+
- 调用 [CreateDocument](https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument) 成功后,请<font color="red">在 5 分钟内调用本接口(StartFlow)启动合同</font> ,不要长时间暂存仅调用了 CreateDocument 而未发起的合同;否则会导致该合同长时间后无法再启动,且合同额度不再返还。
|
|
4621
4723
|
|
|
4622
4724
|
:param request: Request instance for StartFlow.
|
|
4623
4725
|
:type request: :class:`tencentcloud.ess.v20201111.models.StartFlowRequest`
|