Răsfoiți Sursa

Merge branch 'dev' of http://192.168.136.45:3000/SERVER/AnsjerServer into dev

pengzhibo168 5 ani în urmă
părinte
comite
af6af44c12
2 a modificat fișierele cu 595 adăugiri și 1 ștergeri
  1. 3 1
      Ansjer/urls.py
  2. 592 0
      Controller/TestApi.py

+ 3 - 1
Ansjer/urls.py

@@ -8,9 +8,11 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     UserManger, CheckUserData, \
     UserController, CloudVod, OrderContrller, VodBucket, DetectController, DeviceShare, UserBrandController, \
     StsOssController, UIDPreview, OssCrd, SysMsg, UidUser, EquipmentManagerV2,EquipmentManagerV3, PushDeploy, AppSetController,\
-    ApplicationController, UserExController, CloudStorage
+    ApplicationController, UserExController, CloudStorage, TestApi
 
 urlpatterns = [
+    url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
+
     url(r'^account/authcode$', UserController.authCodeView.as_view()),
     url(r'^v3/account/generatepictureCodeView/$', UserController.generatePictureCodeView.as_view()),
     url(r'^v3/account/imageCodeRegister/$', UserController.Image_Code_RegisterView.as_view()),

+ 592 - 0
Controller/TestApi.py

@@ -0,0 +1,592 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: Ansjer
+@software: PyCharm
+@DATE: 2018/5/22 13:58
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: Test.py
+@Contact: chanjunkai@163.com
+"""
+from django.views.generic.base import View
+import os
+
+'''
+http://192.168.136.40:8077/Test
+'''
+import json
+import math
+import time
+import urllib
+from Object.AliPayObject import AliPayObject
+import logging
+import boto3
+from boto3.session import Session
+from botocore.exceptions import ClientError
+import oss2
+import paypalrestsdk
+import logging
+from aliyunsdkcore import client
+from aliyunsdksts.request.v20150401 import AssumeRoleRequest
+from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
+from django.utils.decorators import method_decorator
+from django.views.decorators.csrf import csrf_exempt
+from django.views.generic.base import View
+
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
+    SERVER_DOMAIN_SSL
+from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Object.UidTokenObject import UidTokenObject
+from Service.CommonService import CommonService
+from Service.ModelService import ModelService
+from Object.m3u8generate import PlaylistGenerator
+
+
+SERVER_DOMAIN = 'http://test.dvema.com/'
+ACCESS_KEY = "AKIA2E67UIMD3CYTIWPA"
+SECRET_KEY = "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"
+
+
+# 测试接口sdk
+class testView(View):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(testView, self).dispatch(*args, **kwargs)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject()
+        # operation => cloudVod/path
+        if operation is None:
+            return response.json(444, 'error path')
+        elif operation == 'tests':
+            userID  = '158943594633713800138000'
+            return self.do_filter_playlist(request_dict, userID, response)
+        elif operation == 'cbu':
+            return self.createBucket()
+        elif operation == 'vodList':
+            userID = '158943594633713800138000'
+            return self.do_test_query_vod_list(userID, request_dict, response)
+        elif operation == 'signplaym3u8':
+            return self.do_sign_play_m3u8(request_dict, response)
+        elif operation == 'get_sign_sts':
+            ip = CommonService.get_ip_address(request)
+            return self.do_test_get_sign_sts(request_dict, ip, response)
+        else:
+            return 12344444
+
+    def createBucket(self):
+
+
+        #查看桶列表
+        # url = "https://azvod1.s3-ap-northeast-1.amazonaws.com"
+        # session = Session(ACCESS_KEY, SECRET_KEY)
+        # s3_client = session.client('s3', endpoint_url=url)
+        # results = s3_client.list_buckets()
+        # return JsonResponse(status=200, data={'code': 200, 'msg': results['Buckets']})
+
+        # Create bucket
+        session = Session(ACCESS_KEY, SECRET_KEY)
+        s3_client = session.client('s3')
+
+        #上传
+        # s3_client.put_object(Bucket="azvod1", Key="file/rule.txt", Body=open(r"E:\download\Shadowsocks-4.1.10.0\user-rule.txt", 'rb').read())
+
+        #下载
+        resp = s3_client.get_object(Bucket="azvod1", Key="file/rule.txt")
+        with open('local.txt', 'wb') as f:
+            f.write(resp['Body'].read())
+
+
+    def do_test_query_vod_list(self, userID, request_dict, response):
+        uid = 'GZL2PEFJPLY7W6BG111A'
+        channel = 2
+        userID = '158943594633713800138000'
+        dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
+        if not dv_qs.exists():
+            return response.json(12)
+        vod_play_list = []
+        bucket_name = 'awsusvod1'
+        aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
+        aws_secret_access_key = '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'
+        session = Session(
+            aws_access_key_id=aws_access_key_id,
+            aws_secret_access_key=aws_secret_access_key,
+            region_name='us-west-1'
+        )
+        conn = session.client('s3')
+        thumbspng = '{uid}/vod{channel}/{time}/thumbs.png'. \
+            format(uid=uid, channel=channel, time=1590485548)
+        response_url = conn.generate_presigned_url(
+            'get_object',
+            Params={
+                'Bucket': bucket_name,
+                'Key': thumbspng
+            },
+            ExpiresIn=3600
+        )
+        # m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
+        #     format(uid=uid, channel=channel, time=vod['time'])
+        thumb_url = response_url
+        vod_url = 'http://13.56.215.252:8077/testApi/signplaym3u8?' \
+                  'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
+            format(uid=uid, channel=channel, time=1590485548)
+        vod_play_list.append({
+            'name': 1590485548,
+            'sign_url': vod_url,
+            'thumb': thumb_url,
+            'sec': 11})
+        return response.json(0, vod_play_list)
+
+    def do_sign_play_m3u8(self, request_dict, response):
+        uid = 'GZL2PEFJPLY7W6BG111A'
+        channel = 2
+        storeTime = 1590485548
+        sec = 11
+        fg = 3
+        bucket__region = 'us-west-1'
+        bucket_name = 'awsusvod1'
+        aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
+        aws_secret_access_key = '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'
+        session = Session(
+            aws_access_key_id=aws_access_key_id,
+            aws_secret_access_key=aws_secret_access_key,
+            region_name=bucket__region
+        )
+        '''
+            http://test.dvema.com/cloudstorage/signplaym3u8?uid=VVDHCVBYDKFMJRWA111A&channel=1&time=1586940120&sign=tktktktk
+        '''
+        conn = session.client('s3')
+        playlist_entries = []
+
+        for i in range(fg):
+            thumbspng = '{uid}/vod{channel}/{time}/ts{i}.ts'. \
+                format(uid=uid, channel=channel, time=storeTime, i=i)
+            response_url = conn.generate_presigned_url(
+                'get_object',
+                Params={
+                    'Bucket': bucket_name,
+                    'Key': thumbspng
+                },
+                ExpiresIn=3600
+            )
+            # m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
+            #     format(uid=uid, channel=channel, time=vod['time'])
+            playlist_entries.append({
+                'name': response_url,
+                'duration': 10,
+            })
+
+        playlist = PlaylistGenerator(playlist_entries).generate()
+        return HttpResponse(playlist)
+
+
+
+        response = HttpResponse(playlist, content_type="application/vnd.apple.mpegurl")
+        # response = HttpResponse(playlist, content_type="application/octet-stream")
+        return response
+        return HttpResponse(status=200, content=playlist)
+
+    def do_test_get_sign_sts(self, request_dict, ip, response):
+        # uid = 'GZL2PEFJPLY7W6BG111A'
+        # channel = 2
+        uid = 'VVDHCVBYDKFMJRWA111A'
+        channel = 1
+        now_time = int(time.time())
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
+            values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
+        if ubqs.exists():
+            if ubqs[0]["bucket__mold"] == 0:
+                # 阿里云 oss sts
+                oc_qs = OssCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if oc_qs.exists():
+                    endTime = int(oc_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(oc_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                access_key_id = OSS_STS_ACCESS_KEY
+                access_key_secret = OSS_STS_ACCESS_SECRET
+                region_id = ubqs[0]['bucket__region']
+                role_arn = OSS_ROLE_ARN
+                clt = client.AcsClient(access_key_id, access_key_secret, region_id)
+                req = AssumeRoleRequest.AssumeRoleRequest()
+                # 设置返回值格式为JSON。
+                req.set_accept_format('json')
+                req.set_RoleArn(role_arn)
+                req.set_RoleSessionName(uid + '_' + channel)
+                req.set_DurationSeconds(3600)
+                Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*". \
+                    format(bucket_name=bucket_name, uid_channel=storage)
+                print(Resource_access)
+                policys = {
+                    "Version": "1",
+                    "Statement": [
+                        {
+                            "Action": ["oss:PutObject", "oss:DeleteObject", ],
+                            "Resource": [Resource_access],
+                            "Effect": "Allow",
+                            "Condition": {
+                                "IpAddress": {"acs:SourceIp": ip}
+                                # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
+                                # "IpAddress": {"acs:SourceIp": "*"}
+                            }
+                        }
+                    ]
+                }
+                req.set_Policy(Policy=json.dumps(policys))
+                body = clt.do_action(req)
+                # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
+                token = json.loads(body.decode('utf-8'))
+                print(token)
+                res = {
+                    'AccessKeyId': token['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': token['Credentials']['AccessKeySecret'],
+                    'SecurityToken': token['Credentials']['SecurityToken'],
+                    'Expiration': token['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': token['AssumedRoleUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip}
+                if oc_qs.exists():
+                    oc_qs.update(data=json.dumps(res), addTime=now_time)
+                else:
+                    OssCrdModel.objects.create \
+                        (uid=uid, channel=channel, data=json.dumps(res), addTime=now_time)
+                return JsonResponse(status=200, data=res)
+            elif ubqs[0]["bucket__mold"] == 1:
+                # 亚马逊 s3 sts
+                sts_qs = StsCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if sts_qs.exists():
+                    endTime = int(sts_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(sts_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                    # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                region_id = ubqs[0]['bucket__region']
+
+                ###############
+                REGION_NAME = region_id
+                boto3_sts = boto3.client(
+                    'sts',
+                    aws_access_key_id='AKIA2E67UIMD45Y3HL53',
+                    aws_secret_access_key='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',
+                    region_name=REGION_NAME
+                )
+                Policy = {
+                    "Version": "2012-10-17",
+                    "Statement": [
+                        {
+                            "Effect": "Allow",
+                            "Action": "s3:*",
+                            "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
+                                             format(uid_channel=storage)]
+                        }
+                    ]
+                }
+                response = boto3_sts.get_federation_token(
+                    Name='{role_name}'.format(role_name=uid + '_' + channel),
+                    Policy=json.dumps(Policy),
+                    DurationSeconds=7200
+                )
+                ###############
+                res = {
+                    'AccessKeyId': response['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': response['Credentials']['SecretAccessKey'],
+                    'SessionToken': response['Credentials']['SessionToken'],
+                    'Expiration': response['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': response['FederatedUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip,
+                }
+                if sts_qs.exists():
+                    sts_qs.update(data=json.dumps(res, default=str), addTime=now_time)
+                else:
+                    StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
+                                               addTime=now_time, type=1)
+                return JsonResponse(status=200, data=res)
+            else:
+                res = {'code': 404, 'msg': 'data not exists!'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                    content_type="application/json,charset=utf-8")
+
+    def do_get_sign_sts(self, request_dict, ip, response):
+        # uid = 'GZL2PEFJPLY7W6BG111A'
+        # channel = 2
+        uid = 'VVDHCVBYDKFMJRWA111A'
+        channel = 1
+        now_time = int(time.time())
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time). \
+            values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
+        if ubqs.exists():
+            if ubqs[0]["bucket__mold"] == 0:
+                # 阿里云 oss sts
+                oc_qs = OssCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if oc_qs.exists():
+                    endTime = int(oc_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(oc_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                access_key_id = OSS_STS_ACCESS_KEY
+                access_key_secret = OSS_STS_ACCESS_SECRET
+                region_id = ubqs[0]['bucket__region']
+                role_arn = OSS_ROLE_ARN
+                clt = client.AcsClient(access_key_id, access_key_secret, region_id)
+                req = AssumeRoleRequest.AssumeRoleRequest()
+                # 设置返回值格式为JSON。
+                req.set_accept_format('json')
+                req.set_RoleArn(role_arn)
+                req.set_RoleSessionName(uid + '_' + channel)
+                req.set_DurationSeconds(3600)
+                Resource_access = "acs:oss:*:*:{bucket_name}/{uid_channel}*". \
+                    format(bucket_name=bucket_name, uid_channel=storage)
+                print(Resource_access)
+                policys = {
+                    "Version": "1",
+                    "Statement": [
+                        {
+                            "Action": ["oss:PutObject", "oss:DeleteObject", ],
+                            "Resource": [Resource_access],
+                            "Effect": "Allow",
+                            "Condition": {
+                                "IpAddress": {"acs:SourceIp": ip}
+                                # "IpAddress": {"acs:SourceIp": "120.237.157.184"}
+                                # "IpAddress": {"acs:SourceIp": "*"}
+                            }
+                        }
+                    ]
+                }
+                req.set_Policy(Policy=json.dumps(policys))
+                body = clt.do_action(req)
+                # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
+                token = json.loads(body.decode('utf-8'))
+                print(token)
+                res = {
+                    'AccessKeyId': token['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': token['Credentials']['AccessKeySecret'],
+                    'SecurityToken': token['Credentials']['SecurityToken'],
+                    'Expiration': token['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': token['AssumedRoleUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip}
+                if oc_qs.exists():
+                    oc_qs.update(data=json.dumps(res), addTime=now_time)
+                else:
+                    OssCrdModel.objects.create \
+                        (uid=uid, channel=channel, data=json.dumps(res), addTime=now_time)
+                return JsonResponse(status=200, data=res)
+            elif ubqs[0]["bucket__mold"] == 1:
+                # 亚马逊 s3 sts
+                sts_qs = StsCrdModel.objects.filter(uid=uid, channel=channel). \
+                    values("addTime", "data")
+                if sts_qs.exists():
+                    endTime = int(sts_qs[0]["addTime"]) + 3500
+                    if endTime > now_time:
+                        print(endTime)
+                        print(now_time)
+                        res = json.loads(sts_qs[0]["data"])
+                        return JsonResponse(status=200, data=res)
+                    # 套餐id
+                storage = '{uid}/vod{channel}/'.format(uid=uid, channel=channel)
+                bucket_name = ubqs[0]['bucket__bucket']
+                endpoint = ubqs[0]['bucket__endpoint']
+                region_id = ubqs[0]['bucket__region']
+
+                ###############
+                REGION_NAME = region_id
+                boto3_sts = boto3.client(
+                    'sts',
+                    aws_access_key_id='AKIA2E67UIMD45Y3HL53',
+                    aws_secret_access_key='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',
+                    region_name=REGION_NAME
+                )
+                Policy = {
+                    "Version": "2012-10-17",
+                    "Statement": [
+                        {
+                            "Effect": "Allow",
+                            "Action": "s3:*",
+                            "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
+                                             format(uid_channel=storage)]
+                        }
+                    ]
+                }
+                response = boto3_sts.get_federation_token(
+                    Name='{role_name}'.format(role_name=uid + '_' + channel),
+                    Policy=json.dumps(Policy),
+                    DurationSeconds=7200
+                )
+                ###############
+                res = {
+                    'AccessKeyId': response['Credentials']['AccessKeyId'],
+                    'AccessKeySecret': response['Credentials']['SecretAccessKey'],
+                    'SessionToken': response['Credentials']['SessionToken'],
+                    'Expiration': response['Credentials']['Expiration'],
+                    'expire': '3600',
+                    'endpoint': endpoint,
+                    'bucket_name': bucket_name,
+                    'arn': response['FederatedUser']['Arn'],
+                    'code': 0,
+                    'storage': storage,
+                    'endTime': ubqs[0]['endTime'],
+                    'ip': ip,
+                }
+                if sts_qs.exists():
+                    sts_qs.update(data=json.dumps(res, default=str), addTime=now_time)
+                else:
+                    StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
+                                               addTime=now_time, type=1)
+                return JsonResponse(status=200, data=res)
+            else:
+                res = {'code': 404, 'msg': 'data not exists!'}
+                return HttpResponse(json.dumps(res, ensure_ascii=False),
+                                    content_type="application/json,charset=utf-8")
+
+
+
+
+    def do_pay_by_ali(self, request_dict, userID, response):
+        uid = request_dict.get('uid', None)
+        rank = request_dict.get('rank', None)
+        channel = request_dict.get('channel', None)
+        qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False)
+        if not qs.exists():
+            return response.json(12)
+        if not channel or not rank:
+            return response.json(444, 'channel,rank')
+        smqs = Store_Meal.objects.filter(id=rank). \
+            values("currency", "price", "content", "day", "bucket__storeDay", "bucket__region", "type")
+        if not smqs.exists():
+            # 套餐不存在
+            return response.json(173)
+        if smqs[0]['type'] != 1:
+            return response.json(10, '不支持支付宝支付')
+        currency = smqs[0]['currency']
+        price = smqs[0]['price']
+        content = smqs[0]['content']
+        day = smqs[0]['day']
+        nowTime = int(time.time())
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
+            values("bucket__storeDay", "bucket__region")
+        if ubqs.exists():
+            if ubqs[0]['bucket__region'] != smqs[0]['bucket__region']:
+                return response.json(712)  # 区域不一致
+            elif ubqs[0]['bucket__storeDay'] != smqs[0]['bucket__storeDay']:
+                return response.json(713)  # 不可更改套餐
+            # 续费流程
+        nowTime = int(time.time())
+        # 新增流程
+        orderID = CommonService.createOrderID()
+
+        try:
+            aliPayObj = AliPayObject()
+            alipay = aliPayObj.conf()
+            order_string = alipay.api_alipay_trade_wap_pay(
+                out_trade_no=orderID,
+                total_amount=price,
+                subject="测试哟",
+                return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
+                notify_url="{SERVER_DOMAIN_SSL}cloudVod/aliPayCallback".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
+                # return_url="http://192.168.136.40/cloudVod/payOK",
+                # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
+            )
+        except Exception as e:
+            print(repr(e))
+            return response.json(10, repr(e))
+        if order_string:
+            redirectUrl = aliPayObj.alipay_prefix + order_string
+            Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID, desc=content,
+                                       price=price, currency=currency, addTime=nowTime, updTime=nowTime,
+                                       endTime=nowTime + int(day) * 3600 * 24, rank_id=rank, payType=1)
+            return JsonResponse(status=200,
+                                data={'result_code': 0, 'reason': 'success',
+                                      'result': {"redirectUrl": redirectUrl, "orderID": orderID},
+                                      'error_code': 0})
+        else:
+            return response.json(10, '生成订单错误')
+
+    def do_filter_playlist(self, request_dict, userID, response):
+        startTime = int(request_dict.get('startTime', None))
+        endTime = int(request_dict.get('endTime', None))
+        uid = request_dict.get('uid', None)
+        channel = request_dict.get('channel', None)
+        dvqs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
+        if not dvqs.exists():
+            return response.json(12)
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values('status')
+        if not ubqs.exists():
+            return response.json(10, '设备未购买')
+        nowTime = int(time.time())
+        vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel, time__range=(startTime, endTime),
+                                           endTime__gte=nowTime) \
+            .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
+        vod_play_list = []
+        print(vodqs)
+        auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+        for vod in vodqs:
+            bucket_name = vod["bucket__bucket"]
+            endpoint = vod["bucket__endpoint"]
+            bucket = oss2.Bucket(auth, endpoint, bucket_name)
+            m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
+                format(uid=uid, channel=channel, time=vod['time'])
+            ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
+                format(uid=uid, channel=channel, time=vod['time'])
+            url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
+            urllst = url.split('?')
+            url_start = urllib.parse.unquote(urllst[0])
+            url_end = urllst[1]
+            vod_play_url = '{url_start}?{url_end}'. \
+                format(url_start=url_start, url_end=url_end)
+            thumb = bucket.sign_url('GET', ts, 3600,
+                                    params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
+            vod_play_list.append({'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
+        return response.json(0, vod_play_list)
+
+