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