@@ -6,6 +6,7 @@ from django_response import response |
||
6 | 6 |
|
7 | 7 |
from apps.contract.models import LensmanContributionContractInfo |
8 | 8 |
from kodo.decorators import check_admin |
9 |
+from utils.tencentcloud.ess import describe_file_urls |
|
9 | 10 |
|
10 | 11 |
|
11 | 12 |
@logit(res=True) |
@@ -16,17 +17,8 @@ def get_signed_contribtion_contract_file_api(request, administrator): |
||
16 | 17 |
|
17 | 18 |
contract = LensmanContributionContractInfo.objects.filter(contribution_id=contribution_id, user_id=user_id).first() |
18 | 19 |
|
19 |
- operator = { |
|
20 |
- "UserId": settings.CONTRACT_LENSMAN_CONTRIBUTION_OPERATOR_ID |
|
21 |
- } |
|
22 |
- |
|
23 |
- BusinessType = 'FLOW' |
|
24 |
- BusinessIds = [contract.flow_id] |
|
25 |
- FileType = 'PDF' |
|
26 |
- UrlTtl = '86400' # 过期时间 |
|
27 |
- |
|
28 |
- # TODO: 获取合同文件 https://qian.tencent.com/developers/companyApis/templatesAndFiles/DescribeFileUrls |
|
29 |
- FileUrls = [] |
|
20 |
+ describe_file_urls_result = describe_file_urls(business_id=contract.flow_id) |
|
21 |
+ FileUrls = describe_file_urls_result.FileUrls |
|
30 | 22 |
|
31 | 23 |
return response(200, data={ |
32 | 24 |
'file_url': FileUrls[0].Url |
@@ -335,3 +335,61 @@ def callback_decode(data, encryption_key=None): |
||
335 | 335 |
# print(e) |
336 | 336 |
# print(str(e, encoding="utf8")) |
337 | 337 |
return json.loads(e) |
338 |
+ |
|
339 |
+ |
|
340 |
+def test_describe_file_urls(): |
|
341 |
+ # { |
|
342 |
+ # "TotalCount": 1, |
|
343 |
+ # "FileUrls": [ |
|
344 |
+ # { |
|
345 |
+ # "Url": "https://file.ess.tencent.cn/file/FLOW/yDCHQUU0q7lli4UxZZqK9EJQBXolGmKl/0/0.PDF?hkey=2224d95a960e5bc7e6e3686cff314349ca93867dbd0b1eca01ba63991c8bd8e9c479977410d668b7b3d5bf14af059f969ce4644cf43a7cb6395601a042cadd33a56be20d1643070aa660af450d0ee0b6e30758030e2c0cbd2276bd1d4f05c818", |
|
346 |
+ # "Option": "[\"595.30,841.90\",\"-1\"]" |
|
347 |
+ # } |
|
348 |
+ # ], |
|
349 |
+ # "RequestId": "e9381020-c673-4ea6-b051-3a64b0e8a821" |
|
350 |
+ # } |
|
351 |
+ business_id = 'yDCHQUU0q7lli4UxZZqK9EJQBXolGmKl' |
|
352 |
+ return describe_file_urls(business_id=business_id) |
|
353 |
+ |
|
354 |
+ |
|
355 |
+def describe_file_urls(business_type='FLOW', business_id=None, business_ids=None, file_type='PDF', url_ttl=86400): |
|
356 |
+ # https://qian.tencent.com/developers/companyApis/templatesAndFiles/DescribeFileUrls/ |
|
357 |
+ try: |
|
358 |
+ # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 |
|
359 |
+ # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 |
|
360 |
+ # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 |
|
361 |
+ cred = credential.Credential(secret_id, secret_key) |
|
362 |
+ # 实例化一个http选项,可选的,没有特殊需求可以跳过 |
|
363 |
+ httpProfile = HttpProfile() |
|
364 |
+ httpProfile.endpoint = endpoint |
|
365 |
+ |
|
366 |
+ # 实例化一个client选项,可选的,没有特殊需求可以跳过 |
|
367 |
+ clientProfile = ClientProfile() |
|
368 |
+ clientProfile.httpProfile = httpProfile |
|
369 |
+ # 实例化要请求产品的client对象,clientProfile是可选的 |
|
370 |
+ client = ess_client.EssClient(cred, "", clientProfile) |
|
371 |
+ |
|
372 |
+ # 实例化一个请求对象,每个接口都会对应一个request对象 |
|
373 |
+ req = models.DescribeFileUrlsRequest() |
|
374 |
+ business_ids = business_ids or [business_id] |
|
375 |
+ params = { |
|
376 |
+ "Operator": { |
|
377 |
+ "UserId": operator_id |
|
378 |
+ }, |
|
379 |
+ "BusinessType": business_type, |
|
380 |
+ "BusinessIds": business_ids, |
|
381 |
+ "FileType": file_type, |
|
382 |
+ "UrlTtl": url_ttl, |
|
383 |
+ } |
|
384 |
+ req.from_json_string(json.dumps(params)) |
|
385 |
+ |
|
386 |
+ # 返回的resp是一个DescribeFlowTemplatesResponse的实例,与请求对象对应 |
|
387 |
+ resp = client.DescribeFileUrls(req) |
|
388 |
+ # 输出json格式的字符串回包 |
|
389 |
+ # print(resp.to_json_string()) |
|
390 |
+ |
|
391 |
+ except TencentCloudSDKException as err: |
|
392 |
+ print(err) |
|
393 |
+ resp = {} |
|
394 |
+ |
|
395 |
+ return resp |