:art: get_signed_contribtion_contract_file_api

huangqimin001 vor 9 Monaten
Ursprung
Commit
761e22a3c4
2 geänderte Dateien mit 61 neuen Zeilen und 11 gelöschten Zeilen
  1. 3 11
      api/lensman/contract_admin_views.py
  2. 58 0
      utils/tencentcloud/ess.py

+ 3 - 11
api/lensman/contract_admin_views.py

@@ -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

+ 58 - 0
utils/tencentcloud/ess.py

@@ -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