@@ -5,10 +5,12 @@ from django_logit import logit |
||
5 | 5 |
from django_response import response |
6 | 6 |
from TimeConvert import TimeConvert as tc |
7 | 7 |
|
8 |
+from account.models import LensmanInfo |
|
8 | 9 |
from apps.contract.models import LensmanContributionContractInfo |
9 | 10 |
from apps.lensman.activity.models import LensmanContributionActivityIncomeExpensesInfo |
10 |
-from account.models import LensmanInfo |
|
11 | 11 |
from member.models import MemberActivityContributionInfo |
12 |
+from utils.tencentcloud.ess import (create_document, create_flow, create_scheme_url, start_flow, |
|
13 |
+ test_upload_document_files, upload_document_files) |
|
12 | 14 |
|
13 | 15 |
|
14 | 16 |
@logit(res=True) |
@@ -25,7 +27,7 @@ def get_contribtion_contract_api(request): |
||
25 | 27 |
|
26 | 28 |
file_ids = upload_contribution_images(contribtuon_id) |
27 | 29 |
|
28 |
- operator = { |
|
30 |
+ operator = { |
|
29 | 31 |
"UserId": settings.CONTRACT_LENSMAN_CONTRIBUTION_OPERATOR_ID |
30 | 32 |
} |
31 | 33 |
|
@@ -38,8 +40,8 @@ def get_contribtion_contract_api(request): |
||
38 | 40 |
contract.document_id = document_id |
39 | 41 |
contract.save() |
40 | 42 |
|
41 |
- # TODO : 发起签署流程 |
|
42 |
- start_contribution_contract_flow(flow_id, operator) |
|
43 |
+ # 发起签署流程 |
|
44 |
+ flow_status = start_contribution_contract_flow(flow_id, operator) |
|
43 | 45 |
|
44 | 46 |
scheme_url = get_contribtion_contract_sign_mppath(operator, lensman, flow_id) |
45 | 47 |
|
@@ -50,35 +52,48 @@ def get_contribtion_contract_api(request): |
||
50 | 52 |
|
51 | 53 |
|
52 | 54 |
def upload_contribution_images(contribtuon_id): |
53 |
- # TODO : 上传MemberActivityContributionInfo图片 https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles |
|
55 |
+ # 上传MemberActivityContributionInfo图片 https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles |
|
54 | 56 |
|
55 | 57 |
contribtuon = MemberActivityContributionInfo.objects.get(contribtuon_id=contribtuon_id) |
56 | 58 |
|
57 |
- # 返回图片的 file_ids |
|
58 |
- return [] |
|
59 |
+ # TODO: 从 MemberActivityContributionInfo 生成 files 对象 |
|
60 |
+ files = [ |
|
61 |
+ { |
|
62 |
+ "FileBody": "文件base64编码,不含逗号前字符,即data:image/png;base64,", |
|
63 |
+ "FileName": "test.png" |
|
64 |
+ } |
|
65 |
+ ] |
|
66 |
+ file_type = 'png' |
|
67 |
+ # upload_files_result = upload_document_files(files, file_type=file_type) |
|
68 |
+ upload_files_result = test_upload_document_files(files, file_type=file_type) |
|
69 |
+ file_ids = upload_files_result.get('FileIds', []) |
|
70 |
+ |
|
71 |
+ return file_ids |
|
59 | 72 |
|
60 | 73 |
|
61 | 74 |
def create_contribution_contract_flow(lensman, Operator): |
62 |
- # TODO : 创建签署流程 https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow |
|
75 |
+ # 创建签署流程 https://qian.tencent.com/developers/companyApis/startFlows/CreateFlow |
|
63 | 76 |
|
64 | 77 |
# 创建签署流程参数 Operator |
65 | 78 |
FlowName = lensman.identity_card_name + "的投稿合同" + tc.local_string(format='%Y%m%d') |
66 | 79 |
FlowType = '活动投稿授权书' |
67 | 80 |
Approvers = [{ |
68 |
- "ApproverType": "1", |
|
69 |
- "Required": "true", |
|
70 |
- "NotifyType": "none", |
|
71 |
- "ApproverMobile": lensman.phone, |
|
72 |
- "ApproverName": lensman.identity_card_name, |
|
73 |
- "ApproverIdCardNumber": lensman.identity_card_number, |
|
74 |
- }] |
|
81 |
+ "ApproverType": 1, |
|
82 |
+ "Required": True, |
|
83 |
+ "NotifyType": None, |
|
84 |
+ "ApproverMobile": lensman.phone, |
|
85 |
+ "ApproverName": lensman.identity_card_name, |
|
86 |
+ "ApproverIdCardType": "ID_CARD", |
|
87 |
+ "ApproverIdCardNumber": lensman.identity_card_number, |
|
88 |
+ }] |
|
89 |
+ create_flow_result = create_flow(flow_name=FlowName, flow_type=FlowType, approvers=Approvers) |
|
90 |
+ flow_id = create_flow_result.get('FlowId') |
|
75 | 91 |
|
76 |
- # 创建签署流程返回值 FlowId |
|
77 |
- return '' |
|
92 |
+ return flow_id |
|
78 | 93 |
|
79 | 94 |
|
80 | 95 |
def create_contribution_contract_document(lensman, contribtuon_id, file_ids, FlowId, Operator): |
81 |
- # TODO : 创建电子签文档 https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument |
|
96 |
+ # 创建电子签文档 https://qian.tencent.com/developers/companyApis/startFlows/CreateDocument |
|
82 | 97 |
|
83 | 98 |
income = LensmanContributionActivityIncomeExpensesInfo.objects.get(contribtuon_id=contribtuon_id, lensman_id=lensman.lensman_id) |
84 | 99 |
|
@@ -86,51 +101,46 @@ def create_contribution_contract_document(lensman, contribtuon_id, file_ids, Flo |
||
86 | 101 |
TemplateId = settings.CONTRACT_LENSMAN_CONTRIBUTION_TEMPLATE_ID |
87 | 102 |
|
88 | 103 |
FormFields = [{ |
89 |
- "ComponentName": "ComponentId_0", |
|
104 |
+ "ComponentId": "ComponentId_0", |
|
90 | 105 |
"ComponentValue": lensman.identity_card_name |
91 | 106 |
}, { |
92 |
- "ComponentName": "ComponentId_1", |
|
107 |
+ "ComponentId": "ComponentId_1", |
|
93 | 108 |
"ComponentValue": lensman.identity_card_number, |
94 | 109 |
}, { |
95 |
- "ComponentName": "ComponentId_2", |
|
96 |
- "ComponentValue": income.amount, |
|
110 |
+ "ComponentId": "ComponentId_2", |
|
111 |
+ "ComponentValue": str(income.amount), |
|
97 | 112 |
}, { |
98 |
- "ComponentName": "ComponentId_3", |
|
113 |
+ "ComponentId": "ComponentId_3", |
|
99 | 114 |
"ComponentValue": "", |
100 | 115 |
}] |
101 | 116 |
|
102 | 117 |
for i, file_id in enumerate(file_ids): |
103 | 118 |
FormFields.append({ |
104 |
- "ComponentName": "ComponentId_" + str(37 + i), |
|
119 |
+ "ComponentId": "ComponentId_" + str(37 + i), |
|
105 | 120 |
"ComponentValue": file_id, |
106 | 121 |
}) |
122 |
+ create_document_result = create_document(flow_id=FlowId, form_fields=FormFields) |
|
123 |
+ document_id = create_document_result.get('DocumentId') |
|
107 | 124 |
|
108 |
- # 返回创建电子文档 DocumentId |
|
109 |
- return '', FormFields |
|
125 |
+ return document_id, FormFields |
|
110 | 126 |
|
111 | 127 |
|
112 | 128 |
def start_contribution_contract_flow(FlowId, Operator): |
113 |
- # TODO : 发起签署流程 https://qian.tencent.com/developers/companyApis/startFlows/StartFlow |
|
129 |
+ # 发起签署流程 https://qian.tencent.com/developers/companyApis/startFlows/StartFlow |
|
114 | 130 |
|
115 |
- # 发起签署流程参数 Operator FlowId |
|
131 |
+ start_flow_result = start_flow(flow_id=FlowId) |
|
132 |
+ flow_status = start_flow_result.get('Status') |
|
116 | 133 |
|
117 |
- # |
|
118 |
- return '' |
|
134 |
+ return flow_status |
|
119 | 135 |
|
120 | 136 |
|
121 | 137 |
def get_contribtion_contract_sign_mppath(Operator, lensman, FlowId): |
122 |
- # TODO : 获取签署链接 https://qian.tencent.com/developers/companyApis/startFlows/CreateSchemeUrl |
|
123 |
- |
|
124 |
- Name = lensman.identity_card_name |
|
125 |
- Mobile = lensman.phone |
|
126 |
- IdCardType = 'ID_CARD' |
|
127 |
- IdCardNumber = lensman.identity_card_number |
|
128 |
- EndPoint = 'APP' |
|
129 |
- PathType = '1' #腾讯电子签小程序流程合同的详情页 |
|
130 |
- AutoJumpBack = 'true' #签署完成会自动跳转回来 |
|
131 |
- |
|
132 |
- # 返回 SchemeUrl |
|
133 |
- return '' |
|
138 |
+ # 获取签署链接 https://qian.tencent.com/developers/companyApis/startFlows/CreateSchemeUrl |
|
139 |
+ |
|
140 |
+ create_scheme_url_result = create_scheme_url(flow_id=FlowId, name=lensman.identity_card_name, mobile=lensman.phone, card_type='ID_CARD', card_number=lensman.identity_card_number) |
|
141 |
+ scheme_url = create_scheme_url_result.get('SchemeUrl') |
|
142 |
+ |
|
143 |
+ return scheme_url |
|
134 | 144 |
|
135 | 145 |
|
136 | 146 |
@logit(res=True) |
@@ -237,12 +237,22 @@ MEMBER_CARD_ID_HANYUAN = '' |
||
237 | 237 |
|
238 | 238 |
# 腾讯云 |
239 | 239 |
TENCENTCLOUD = { |
240 |
- 'default': { |
|
240 |
+ 'faceid': { |
|
241 | 241 |
'appid': '', |
242 | 242 |
'secret_id': '', |
243 | 243 |
'secret_key': '', |
244 | 244 |
'merchant_id': '', |
245 | 245 |
}, |
246 |
+ 'ess': { |
|
247 |
+ 'operator_id': '', |
|
248 |
+ 'template_id': '', |
|
249 |
+ 'secret_id': '', |
|
250 |
+ 'secret_key': '', |
|
251 |
+ 'callback_secret_id': '', |
|
252 |
+ 'callback_secret_key': '', |
|
253 |
+ 'endpoint': 'ess.tencentcloudapi.com', |
|
254 |
+ 'file_endpoint': 'file.ess.tencent.cn', |
|
255 |
+ }, |
|
246 | 256 |
} |
247 | 257 |
|
248 | 258 |
# 七牛设置 |
@@ -592,5 +602,9 @@ DEFAULT_START_DATE = '1970-01-02' |
||
592 | 602 |
DEFAULT_END_DATE = '9999-12-03' |
593 | 603 |
|
594 | 604 |
# 腾讯电子签配置 |
605 |
+CONTRACT_LENSMAN_CONTRIBUTION_OPERATOR_ID = 'yDCp3UU055m70lUx6jaTk1RVkiVkKenJ' |
|
595 | 606 |
CONTRACT_LENSMAN_CONTRIBUTION_TEMPLATE_ID = 'yDCp3UU05rgksnUXtZsEvdrK1tRGb7ax' |
596 |
-CONTRACT_LENSMAN_CONTRIBUTION_OPERATOR_ID = 'yDCp3UU055m70lUx6jaTk1RVkiVkKenJ' |
|
607 |
+CONTRACT_LENSMAN_CONTRIBUTION_SECRET_ID = 'AKIDAHh3WzlYvHqOoR69MI94329FIGEDA62x' |
|
608 |
+CONTRACT_LENSMAN_CONTRIBUTION_SECRET_KEY = 'tieio5Rn7PqARmJzcAcAh4gNE3rowEc3' |
|
609 |
+CONTRACT_LENSMAN_CONTRIBUTION_CALLBACK_SECRET_ID = 'F0C875BC8B9442AE8E4769155F812EC0' |
|
610 |
+CONTRACT_LENSMAN_CONTRIBUTION_CALLBACK_SECRET_KEY = '645CD7B0067B4FCEB6A9A6D589EC9DD6' |
@@ -0,0 +1,291 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+import json |
|
4 |
+ |
|
5 |
+from django.conf import settings |
|
6 |
+from tencentcloud.common import credential |
|
7 |
+from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException |
|
8 |
+from tencentcloud.common.profile.client_profile import ClientProfile |
|
9 |
+from tencentcloud.common.profile.http_profile import HttpProfile |
|
10 |
+from tencentcloud.ess.v20201111 import ess_client, models |
|
11 |
+from TimeConvert import TimeConvert as tc |
|
12 |
+ |
|
13 |
+ |
|
14 |
+tencentcloud_cfg = settings.TENCENTCLOUD.get('ess', {}) |
|
15 |
+operator_id = tencentcloud_cfg.get('operator_id') |
|
16 |
+template_id = tencentcloud_cfg.get('template_id') |
|
17 |
+secret_id = tencentcloud_cfg.get('secret_id') |
|
18 |
+secret_key = tencentcloud_cfg.get('secret_key') |
|
19 |
+callback_secret_id = tencentcloud_cfg.get('callback_secret_id') |
|
20 |
+callback_secret_key = tencentcloud_cfg.get('callback_secret_key') |
|
21 |
+endpoint = tencentcloud_cfg.get('endpoint') |
|
22 |
+file_endpoint = tencentcloud_cfg.get('file_endpoint') |
|
23 |
+ |
|
24 |
+ |
|
25 |
+def test_upload_document_files(files, file_type='png'): |
|
26 |
+ files = [ |
|
27 |
+ { |