| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216 | 
							- #!/usr/bin/env python3
 
- # -*- coding: utf-8 -*-
 
- """
 
- @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
 
- @AUTHOR: ASJRD018
 
- @NAME: AnsjerFormal
 
- @software: PyCharm
 
- @DATE: 2018/12/5 9:30
 
- @Version: python3.6
 
- @MODIFY DECORD:ansjer dev
 
- @file: cloudstorage.py
 
- @Contact: chanjunkai@163.com
 
- """
 
- import json
 
- import time
 
- import urllib
 
- import boto3
 
- import oss2
 
- import paypalrestsdk
 
- import threading
 
- from aliyunsdkcore import client
 
- from aliyunsdksts.request.v20150401 import AssumeRoleRequest
 
- from boto3.session import Session
 
- from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 
- 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, StsCrdModel, ExperienceContextModel, Pay_Type
 
- from Object.AliPayObject import AliPayObject
 
- from Object.ResponseObject import ResponseObject
 
- from Object.TokenObject import TokenObject
 
- from Object.UidTokenObject import UidTokenObject
 
- from Service.CommonService import CommonService
 
- from Object.m3u8generate import PlaylistGenerator
 
- from Object.WechatPayObject import WechatPayObject
 
- from django.db.models import Q
 
- SERVER_DOMAIN = 'http://test.dvema.com/'
 
- '''
 
- 生成订单
 
- http://test.dvema.com/cloudstorage/createpayorder?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTY3NzU4MjE4NjE5MTM4MDAxMzgwMDAiLCJleHAiOjE1ODk1MjM0OTIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCIsImxhbmciOiJlbiIsInVzZXIiOiIxMzExOTY1NzcxMyJ9.e2NdhJtbXrDngZTSmOX_52Y-oxyfUEXjZD_qNxg6VrU&uid=VVDHCVBYDKFMJRWA111A&channel=1&pay_type=0&commodity_code=aws_us_vod_7_val_30
 
- 开启开关
 
- http://test.dvema.com/cloudstorage/changevodstatus?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTY3NzU4MjE4NjE5MTM4MDAxMzgwMDAiLCJleHAiOjE1ODk1MjM0OTIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCIsImxhbmciOiJlbiIsInVzZXIiOiIxMzExOTY1NzcxMyJ9.e2NdhJtbXrDngZTSmOX_52Y-oxyfUEXjZD_qNxg6VrU&uid=VVDHCVBYDKFMJRWA111A&channel=1&status=1
 
- # 获取播放列表
 
- http://localhost:8077/cloudstorage/queryvodlist?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTY3NzU4MjE4NjE5MTM4MDAxMzgwMDAiLCJleHAiOjE1ODk1MjM0OTIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCIsImxhbmciOiJlbiIsInVzZXIiOiIxMzExOTY1NzcxMyJ9.e2NdhJtbXrDngZTSmOX_52Y-oxyfUEXjZD_qNxg6VrU&uid=VVDHCVBYDKFMJRWA111A&startTime=1&endTime=1954687458&channel=1
 
- # 存储视频列表信息
 
- http://test.dvema.com/cloudstorage/storeplaylist?uidToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJWVkRIQ1ZCWURLRk1KUldBMTExQSIsImNoYW5uZWwiOiIxIn0.eGwi5QKyrXi4WSKRbrUG7iFTChv_Utec2hSnqZkDKt8&time=1586940120&sec=20&fg=10
 
- # 获取订单列表
 
- http://localhost:8077/cloudstorage/queryorder?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTY3NzU4MjE4NjE5MTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTMxMTk2NTc3MTMiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODk1OTIyNzh9.u211DHiMKg-pqhXv4b2yR__eNyOcSwBZCyPUGjsxFLU&page=1&line=10&uid=VVDHCVBYDKFMJRWA111A
 
- # commoditylist
 
- http://test.dvema.com/cloudstorage/commoditylist?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTY3NzU4MjE4NjE5MTM4MDAxMzgwMDAiLCJleHAiOjE1ODk1MjM0OTIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCIsImxhbmciOiJlbiIsInVzZXIiOiIxMzExOTY1NzcxMyJ9.e2NdhJtbXrDngZTSmOX_52Y-oxyfUEXjZD_qNxg6VrU
 
- '''
 
- # 设备信息添加
 
- class CloudStorageView(View):
 
-     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()
 
-         if operation is None:
 
-             return response.json(444, 'error path')
 
-         elif operation == 'testpaly.m3u8':
 
-             return self.do_test_play_m3u8(request_dict, response)
 
-         elif operation == 'dopaypalcallback':
 
-             return self.do_pay_by_paypal_callback(request_dict, response)
 
-         elif operation == 'doalicallback':
 
-             return self.do_pay_by_ali_callback(request)
 
-         elif operation == 'dowechatnotify':
 
-             return self.do_pay_by_wechat_callback(request_dict,response)
 
-         elif operation == 'getsignsts':
 
-             ip = CommonService.get_ip_address(request)
 
-             return self.do_get_sign_sts(request_dict, ip, response)
 
-             # return self.do_get_sign_sts_test(request_dict, ip, response)
 
-         elif operation == 'storeplaylist':
 
-             return self.do_store_playlist(request_dict, response)
 
-         elif operation == 'signplaym3u8':
 
-             return self.do_sign_play_m3u8(request_dict, response)
 
-         elif operation == 'payOK':
 
-             return self.do_pay_ok()
 
-         else:
 
-             token = request_dict.get('token', None)
 
-             # 设备主键uid
 
-             tko = TokenObject(token)
 
-             response.lang = tko.lang
 
-             if tko.code != 0:
 
-                 return response.json(tko.code)
 
-             userID = tko.userID
 
-             if operation == 'createpayorder':
 
-                 return self.do_create_pay_order(request_dict, userID, response)
 
-             elif operation == 'changevodstatus':
 
-                 return self.do_change_vod_status(request_dict, userID, response)
 
-             elif operation == 'queryvodlist':
 
-                 return self.do_query_vod_list(request_dict, userID, response)
 
-             elif operation == 'commoditylist':
 
-                 return self.do_commodity_list(request_dict, userID, response)
 
-             elif operation == 'queryorder':
 
-                 return self.do_query_order(request_dict, userID, response)
 
-             elif operation == 'experienceorder':
 
-                 return self.do_experience_order(request_dict, userID, response)
 
-             elif operation == 'experiencereset':
 
-                 return self.do_experience_reset(request_dict, userID, response)
 
-             else:
 
-                 return response.json(414)
 
-     def do_test_play_m3u8(self, request_dict, response):
 
-         playlist_entries = [
 
-             {
 
-                 'name': 'https://azvod1.s3-ap-northeast-1.amazonaws.com/test/output000.ts',
 
-                 'duration': 10,
 
-             },
 
-             {
 
-                 'name': 'https://azvod1.s3-ap-northeast-1.amazonaws.com/test/output000.ts',
 
-                 'duration': 10,
 
-             },
 
-             {
 
-                 'name': 'https://azvod1.s3-ap-northeast-1.amazonaws.com/test/output000.ts',
 
-                 'duration': 10,
 
-             },
 
-         ]
 
-         playlist = PlaylistGenerator(playlist_entries).generate()
 
-         # return HttpResponse(playlist)
 
-         # response = HttpResponse(playlist, content_type="application/octet-stream")
 
-         response = HttpResponse(playlist, content_type="application/vnd.apple.mpegurl")
 
-         return response
 
-     def do_query_order(self, request_dict, userID, response):
 
-         status = request_dict.get('status', None)
 
-         page = int(request_dict.get('page', None))
 
-         line = int(request_dict.get('line', None))
 
-         uid = request_dict.get('uid', None)
 
-         order_qs = Order_Model.objects.filter(userID_id=userID)
 
-         if status:
 
-             order_qs = order_qs.filter(status=status)
 
-         # 筛选指定设备id的订单
 
-         if uid:
 
-             order_qs = order_qs.filter(UID=uid)
 
-         if not order_qs.exists():
 
-             return response.json(173)
 
-             # return response.json(10, '订单不存在')
 
-         count = order_qs.count()
 
-         order_ql = order_qs[(page - 1) * line:page * line]. \
 
-             values("orderID", "UID", "channel", "desc", "price", "currency",
 
-                    "addTime", "updTime", "endTime", "pay_url", "payType",
 
-                    "status", "commodity_type", "commodity_code")
 
-         order_list = list(order_ql)
 
-         data = []
 
-         nowTime = int(time.time())
 
-         # 这里需要进行优化
 
-         uid_list = []
 
-         for od in order_list:
 
-             uid_list.append(od['UID'])
 
-         didqs = Device_Info.objects.filter(userID_id=userID, UID__in=uid_list). \
 
-             values('id', 'UID', 'Type')
 
-         for d in order_list:
 
-             if d['status'] == 0:
 
-                 if d['addTime'] + 3600 < nowTime:
 
-                     d['status'] = 3
 
-             for did in didqs:
 
-                 if d['UID'] == did['UID']:
 
-                     d['did'] = did['id']
 
-                     d['Type'] = did['Type']
 
-                     data.append(d)
 
-         return response.json(0, {'data': data, 'count': count})
 
-     def do_commodity_list(self, request_dict, userID, response):
 
-         mold = request_dict.get('mold', None)
 
-         uid = request_dict.get('uid', None)
 
-         qs = Store_Meal.objects
 
-         eq = ExperienceContextModel.objects.filter(uid=uid,experience_type=0).values('id')
 
-         # userqs = Device_User.objects.filter(userID=userID).values('is_experience')
 
-         if mold:
 
-             qs = qs.filter(bucket__mold=mold)
 
-         else:
 
-             qs = qs.all()
 
-         if eq:
 
-             qs=qs.filter(~Q(pay_type='10'))
 
-         else:
 
-             qs = qs.filter(pay_type='10')
 
-         qs = qs.values("id", "title", "content", "price",
 
-                        "day", "currency", "bucket__storeDay",
 
-                        "bucket__bucket", "bucket__area",
 
-                       "commodity_code", "commodity_type")
 
-         if qs.exists():
 
-             ql = list(qs)
 
-             from operator import itemgetter
 
-             from itertools import groupby
 
-             ql.sort(key=itemgetter('bucket__area'))
 
-             res = []
 
-             for area, items in groupby(ql, key=itemgetter('bucket__area')):
 
-                 items_list = list(items)
 
-                 for key, val in enumerate(items_list):
 
-                     pay_types = Pay_Type.objects.filter(store_meal=items_list[key]['id']).values("id","payment")
 
-                     items_list[key]['pay_type'] = list(pay_types)
 
-                 res_c = {'area': area, 'items': items_list}
 
-                 res.append(res_c)
 
-             result = {
 
-                 'meals': res,
 
-                 'extra':
 
-                     {
 
-                         'cloud_banner': 'https://www.dvema.com/web/images/cloud_cn_banner.png',
 
-                         'cloud_en_baner': 'https://www.dvema.com/web/images/cloud_en_banner.png'
 
-                     }
 
-             }
 
-             return response.json(0, result)
 
-         else:
 
-             return response.json(0)
 
-     def do_sign_play_m3u8(self, request_dict, response):
 
-         uid = request_dict.get('uid', None)
 
-         channel = request_dict.get('channel', None)
 
-         storeTime = request_dict.get('time', None)
 
-         now_time = int(time.time())
 
-         vh_qs = VodHlsModel.objects.filter(uid=uid, channel=channel, time=storeTime, endTime__gte=now_time). \
 
-             values("sec", "fg", "bucket__bucket", "bucket__endpoint", "bucket__region", "bucket__mold")
 
-         if not vh_qs.exists():
 
-             return response.json(11,'不存在.')
 
-         sec = vh_qs[0]['sec']
 
-         fg = vh_qs[0]['fg']
 
-         bucket__region = vh_qs[0]['bucket__region']
 
-         bucket_name = vh_qs[0]['bucket__bucket']
 
-         print(bucket__region)
 
-         print(bucket_name)
 
-         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': sec,
 
-         #     })
 
-         for i in range(7):
 
-             shift = (i+1)*4
 
-             duration = (fg >> shift) & 0xf
 
-             if duration > 0:
 
-                 tsFile = '{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': tsFile
 
-                     },
 
-                     ExpiresIn=3600
 
-                 )
 
-                 # m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
 
-                 #     format(uid=uid, channel=channel, time=vod['time'])
 
-                 playlist_entries.append({
 
-                     'name': response_url,
 
-                     'duration': duration,
 
-                 })
 
-         playlist = PlaylistGenerator(playlist_entries).generate()
 
-         response = HttpResponse(playlist)
 
-         response['Content-Type'] = 'application/octet-stream'
 
-         response['Content-Disposition'] = 'attachment;filename="play.m3u8"'
 
-         return response
 
-         # response = HttpResponse(playlist, content_type="application/vnd.apple.mpegurl")
 
-         # response = HttpResponse(playlist, content_type="application/octet-stream")
 
-         # return response
 
-     def do_get_sign_sts(self, request_dict, ip, response):
 
-         uidToken = request_dict.get('uidToken', None)
 
-         utko = UidTokenObject(uidToken)
 
-         if utko.flag is False:
 
-             return response.json(444, 'uidToken')
 
-         uid = utko.UID
 
-         channel = utko.channel
 
-         print(channel)
 
-         print(uid)
 
-         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")
 
-         print('-------------bucket')
 
-         print(ubqs)
 
-         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
 
-                 )
 
-                 print('--------2--test')
 
-                 print(REGION_NAME)
 
-                 Policy = {
 
-                     "Version": "2012-10-17",
 
-                     "Statement": [
 
-                         {
 
-                             "Effect": "Allow",
 
-                             "Action": "s3:*",
 
-                             "Resource": ["arn:aws:s3:::{bucket_name}/{uid_channel}*".
 
-                                              format(bucket_name=bucket_name,uid_channel=storage)]
 
-                         }
 
-                     ]
 
-                 }
 
-                 print(Policy)
 
-                 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_query_vod_list(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)
 
-         dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False)
 
-         if not dv_qs.exists():
 
-             return response.json(12)
 
-         # bv_qs = UID_Bucket.objects.filter(UID=uid,channel=channel)
 
-         now_time = int(time.time())
 
-         vh_qs = VodHlsModel.objects.filter \
 
-             ( uid=uid, channel=channel, time__range=(startTime, endTime), endTime__gte=now_time). \
 
-             values("time", "sec", "bucket__bucket", "fg", "bucket__endpoint", "bucket__region", "bucket__mold")
 
-         vod_play_list = []
 
-         print(int(time.time()))
 
-         for vod in vh_qs:
 
-             bucket__mold = vod["bucket__mold"]
 
-             bucket_name = vod["bucket__bucket"]
 
-             endpoint = vod["bucket__endpoint"]
 
-             bucket__region = vod["bucket__region"]
 
-             if bucket__mold == 0:
 
-                 auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
 
-                 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']})
 
-             elif bucket__mold == 1:
 
-                 # 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
 
-                 # )
 
-                 # conn = session.client('s3')
 
-                 # thumbspng = '{uid}/vod{channel}/{time}/Thumb.jpeg'. \
 
-                 #     format(uid=uid, channel=channel, time=vod['time'])
 
-                 # response_url = conn.generate_presigned_url(
 
-                 #     'get_object',
 
-                 #     Params={
 
-                 #         'Bucket': bucket_name,
 
-                 #         'Key': thumbspng
 
-                 #     },
 
-                 #     ExpiresIn=3600
 
-                 # )
 
-                 # thumb_url = response_url
 
-                 #     format(uid=uid, channel=channel, time=vod['time'])
 
-                 vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
 
-                           'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
 
-                     format(server_domain=SERVER_DOMAIN,uid=uid, channel=channel, time=vod['time'])
 
-                 ts_num = vod['fg'] & 0xf
 
-                 vod_play_list.append({
 
-                     'name': vod['time'],
 
-                     'sign_url': vod_url,
 
-                     # 'thumb': thumb_url,
 
-                     'sec': vod['sec'],
 
-                     'ts_num' : ts_num}),
 
-         return response.json(0, vod_play_list)
 
-     def do_store_playlist(self, request_dict, response):
 
-         uidToken = request_dict.get('uidToken', None)
 
-         storeTime = request_dict.get('time', None)
 
-         sec = request_dict.get('sec', None)
 
-         fg = request_dict.get('fg', None)
 
-         utko = UidTokenObject(uidToken)
 
-         if utko.flag is False:
 
-             return response.json(444, 'uidToken')
 
-         if not uidToken or not storeTime or not sec:
 
-             return response.json(0)
 
-         pass
 
-         UID = utko.UID
 
-         channel = utko.channel
 
-         print('UID:')
 
-         print(UID)
 
-         print('channel:')
 
-         print(channel)
 
-         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", "status", "bucket__storeDay", "bucket__id")
 
-         if ubqs.exists():
 
-             ub_qs_data = ubqs[0]
 
-             store_day = ub_qs_data['bucket__storeDay']
 
-             bucket_id = ub_qs_data['bucket__id']
 
-             end_time = int(storeTime) + store_day * 86400
 
-             if ub_qs_data['status'] == 1:
 
-                 if ub_qs_data["bucket__mold"] == 0:
 
-                     oss_crd_qs = OssCrdModel.objects.filter(uid=UID, channel=channel)
 
-                     if oss_crd_qs.exists():
 
-                         VodHlsModel.objects.create(
 
-                             uid=UID,
 
-                             channel=channel,
 
-                             time=storeTime,
 
-                             endTime=end_time,
 
-                             bucket_id=bucket_id,
 
-                             sec=sec,
 
-                         )
 
-                         res = {'code': 0, 'msg': '存储成功'}
 
-                         return HttpResponse(json.dumps(res, ensure_ascii=False),
 
-                                             content_type="application/json,charset=utf-8")
 
-                     else:
 
-                         res = {'code': 404, 'msg': '设备未购买'}
 
-                         return HttpResponse(json.dumps(res, ensure_ascii=False),
 
-                                             content_type="application/json,charset=utf-8")
 
-                 elif ub_qs_data['bucket__mold'] == 1:
 
-                     sts_qs = StsCrdModel.objects.filter(uid=UID, channel=channel, type=1). \
 
-                         values("addTime", "data")
 
-                     if sts_qs.exists():
 
-                         VodHlsModel.objects.create(
 
-                             uid=UID,
 
-                             channel=channel,
 
-                             time=storeTime,
 
-                             endTime=end_time,
 
-                             bucket_id=bucket_id,
 
-                             fg=fg,
 
-                             sec=sec,
 
-                         )
 
-                         res = {'code': 0, 'msg': '存储成功'}
 
-                         return HttpResponse(json.dumps(res, ensure_ascii=False),
 
-                                             content_type="application/json,charset=utf-8")
 
-                     else:
 
-                         res = {'code': 404, 'msg': '设备未购买'}
 
-                         return HttpResponse(json.dumps(res, ensure_ascii=False),
 
-                                             content_type="application/json,charset=utf-8")
 
-             else:
 
-                 res = {'code': 404, 'msg': '设备未开启'}
 
-                 return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
-         else:
 
-             res = {'code': 404, 'msg': '设备未购买'}
 
-             return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
 
-     # def do_change_vod_status(self, request_dict, userID, response):
 
-     #     uid = request_dict.get('uid', None)
 
-     #     status = request_dict.get('status', None)
 
-     #     channel = request_dict.get('channel', None)
 
-     #     if all([uid, status, channel]):
 
-     #         dv_qs = Device_Info.objects.filter(UID=uid, userID_id=userID, isShare=False, isExist=1)
 
-     #         if dv_qs.exists():
 
-     #             now_time = int(time.time())
 
-     #             ub_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time)
 
-     #             if ub_qs.exists():
 
-     #                 ub_qs.status = status
 
-     #                 ub_qs.save()
 
-     #                 if status == 0:
 
-     #                     return response.json(0)
 
-     #                 else:
 
-     #                     utko = UidTokenObject()
 
-     #                     utko.generate(data={'uid': uid, 'channel': channel})
 
-     #                     uidTK = utko.token
 
-     #                     uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
 
-     #                         format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
 
-     #                     storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
 
-     #                         format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
 
-     #                     return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
 
-     #             else:
 
-     #                 return response.json(10, '未购买')
 
-     #         else:
 
-     #             return response.json(12)
 
-     #     else:
 
-     #         return response.json(444, 'uid,status,channel')
 
-     def do_change_vod_status(self, request_dict, userID, response):
 
-         uid = request_dict.get('uid', None)
 
-         status = request_dict.get('status', None)
 
-         channel = request_dict.get('channel', None)
 
-         if not uid or not status or not channel:
 
-             return response.json(444, 'uid,status,channel')
 
-         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(channel=channel, uid=uid)
 
-         if not ubqs.exists():
 
-             return response.json(10, '未购买')
 
-         now_time = int(time.time())
 
-         if now_time > ubqs[0].endTime:
 
-             return response.json(10, '已过期')
 
-         ubqs.update(status=status)
 
-         if status == 0:
 
-             return response.json(0)
 
-         utko = UidTokenObject()
 
-         utko.generate(data={'uid': uid, 'channel': channel})
 
-         uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
 
-             format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
 
-         storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
 
-             format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
 
-         return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
 
-     def do_pay_error(self):
 
-         response = HttpResponse()
 
-         response.content = '''
 
- <!DOCTYPE html>
 
- <html>
 
- <head>
 
- 	<!--浏览器不缓存-->
 
- 	<meta http-equiv="Pragma" content="no-cache">
 
- 	<meta http-equiv="Cache-Control" content="no-cache">
 
- 	<meta http-equiv="Expires" content="0">
 
- 	<!--utf-8-->
 
-     <meta http-equiv="content-type" content="text/html;charset=utf-8">
 
-     <!-- viewport的<meta>标签,这个标签可以修改在大部分的移动设备上面的显示,为了确保适当的绘制和触屏缩放。-->
 
-     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
-     <link rel="shortcut icon" href="https://test.dvema.com/web/images/favicon.ico" type="image/x-icon"  charset="utf-8"/>  
 
-     <title>Trading particulars</title>
 
-     <style>
 
-     	.title_head{
 
-     		height: 50px;
 
-     		border-radius: 5px;
 
-     		background-color: #c3c6c7; 
 
-     		text-align: center;
 
-     		line-height: 50px;
 
-     	}
 
-     	.content{
 
-     		text-align: center;
 
-     		margin-top: 50px;
 
-     		font-size: 20px;
 
-     		color : #ec7648
 
-     	}
 
-     	.content_img{
 
-     		width: 60px; 
 
-     		height: 60px;
 
-     	}
 
-     	.bottom{
 
-     		 margin-bottom: 10px; 
 
-     		 margin-top: 250px; 
 
-     		 color : #ec7648
 
-     	}
 
-     	.bottom_div{
 
-     		border: 1px solid #ec7648; 
 
-     		line-height: 38px; 
 
-     		text-align: center; 
 
-     		width: 100px; 
 
-     		height: 38px;
 
-     		border-radius: 5px;
 
-     	}
 
-     	
 
-     	.bottom_div:hover{
 
-     		background-color: #dde4e2;
 
-     	}
 
-     </style>
 
- </head>
 
- <body>
 
- 	<div class="title_head">Trading particulars</div>
 
-     <div class="content">
 
-     	<p >
 
-     		<img src="https://test.dvema.com/web/images/failed.jpg" class="content_img">
 
-     		<br />
 
-     		Payment failure
 
-     	</p>
 
-     </div>
 
-     <center class="bottom">
 
-     	<div class="bottom_div" onclick="payOKButton()"> 
 
-     	 Finish
 
-     	</div>
 
-     </center>
 
-     <script> 	    // 点击付款成功按钮
 
-     function payOKButton() {
 
-         // 复杂数据
 
-         console.log('success')
 
-         window.location.href="https://www.baidu.com?page=closePage";
 
-     }
 
- 	</script>
 
- </body> 
 
- </html>
 
-                 '''
 
-         return response
 
-     def do_pay_ok(self):
 
-         response = HttpResponse()
 
-         response.content = '''
 
- <html>
 
- <head>
 
-         <!--浏览器不缓存-->
 
-         <meta http-equiv="Pragma" content="no-cache">
 
-         <meta http-equiv="Cache-Control" content="no-cache">
 
-         <meta http-equiv="Expires" content="0">
 
-         <!--utf-8-->
 
-     <meta http-equiv="content-type" content="text/html;charset=utf-8">
 
-     <!-- viewport的<meta>标签,这个标签可以修改在大部分的移动设备上面的显示,为了确保适当的绘制和触屏缩放。-->
 
-     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
-     <link rel="shortcut icon" href="https://test.dvema.com/web/images/favicon.ico" type="image/x-icon" charset="utf-8">  
 
-     <title>Trading particulars</title>
 
-     <style>
 
-             .title_head{
 
-                     height: 50px;
 
-                     border-radius: 5px;
 
-                     background-color: #c3c6c7; 
 
-                     text-align: center;
 
-                     line-height: 50px;
 
-             }
 
-             .content{
 
-                     text-align: center;
 
-                     margin-top: 50px;
 
-                     font-size: 15px;
 
-                     color:#0000008A;
 
- 					
 
-             }
 
-             .content_img{
 
- 					margin-bottom:15px;
 
-                     width: 60px; 
 
-                     height: 60px;
 
-             }
 
-             .bottom{
 
-                      margin-bottom: 10px; 
 
-                      margin-top: 250px; 
 
-                      color : white;
 
-             }
 
-             .bottom_div{
 
-                     border: 1px solid #68c9c5; 
 
-                     line-height: 38px; 
 
-                     text-align: center; 
 
-                     width: 100px; 
 
-                     height: 38px;
 
-                     border-radius: 30px;
 
- 					background-color:#68c9c5; 
 
-             }
 
-             
 
-             .bottom_div:hover{
 
-                     background-color: #dde4e2;
 
-             }
 
-     </style>
 
- </head>
 
- <body style="" rlt="1" inmaintabuse="true">
 
-         
 
-     <div class="content">
 
-             <p>
 
- 					<img src="https://test.dvema.com/web/images/success.png" class="content_img">
 
-                     <br>
 
-                     支付成功
 
-             </p>
 
-     </div>
 
-     <center class="bottom">
 
-             <div class="bottom_div" onclick="payOKButton()"> 
 
-              完成
 
-             </div>
 
-     </center>
 
-     <script src="//hm.baidu.com/hm.js?eaa57ca47dacb4ad4f5a257001a3457c"></script><script>             // 点击付款成功按钮
 
-     function payOKButton() {
 
-         // 复杂数据
 
-         console.log('success')
 
-         window.location.href="https://www.baidu.com?page=closePage"  
 
-     }
 
-         </script>
 
-  
 
-         <div id="qds" style="display:none;"></div></body></html>
 
-         '''
 
-         return response
 
-     def do_pay_by_ali_callback(self, request):
 
-         response = ResponseObject()
 
-         data = request.POST.dict()
 
-         signature = data["sign"]
 
-         data.pop('sign')
 
-         orderID = data['out_trade_no']
 
-         order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
 
-         print(order_qs)
 
-         if not order_qs.exists():
 
-             return response.json(404)
 
-         print(json.dumps(data))
 
-         print(signature)
 
-         # verify
 
-         aliPayObj = AliPayObject()
 
-         alipay = aliPayObj.conf()
 
-         success = alipay.verify(data, signature)
 
-         if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
 
-             print("trade succeed")
 
-             nowTime = int(time.time())
 
-             order_list = order_qs.values("UID", "commodity_code", "channel")
 
-             UID = order_list[0]['UID']
 
-             channel = order_list[0]['channel']
 
-             commodity_code = order_list[0]['commodity_code']
 
-             order_qs.update(status=1, updTime=nowTime)
 
-             smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
 
-                 values("day", "bucket_id", "bucket__storeDay")
 
-             bucketId = smqs[0]['bucket_id']
 
-             if not smqs.exists():
 
-                 return response.json(0, '套餐已删除')
 
-             addTime = int(smqs[0]["day"]) * 24 * 3600
 
-             ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel). \
 
-                 values("bucket_id", "endTime", "bucket__storeDay")
 
-             nowTime = int(time.time())
 
-             if ubqs.exists():
 
-                 ubqs_count = ubqs.count()
 
-                 ubq = ubqs[ubqs_count - 1, ubqs_count]
 
-                 new_starTime = ubq['endTime'] + 1
 
-                 ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
 
-                                                    endTime=new_starTime + addTime)
 
-                 uid_bucket_id = ub_cqs.id
 
-             else:
 
-                 ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
 
-                                                    endTime=nowTime + addTime)
 
-                 uid_bucket_id = ub_cqs.id
 
-             order_qs.update \
 
-                 (payTime=nowTime, status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
 
-             red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-             return HttpResponseRedirect(red_url)
 
-         return response.json(0, signature)
 
-     def do_pay_by_paypal_callback(self, request_dict, response):
 
-         paymentId = request_dict.get('paymentId', None)
 
-         PayerID = request_dict.get('PayerID', None)
 
-         orderID = request_dict.get('orderID', None)
 
-         if not paymentId or not PayerID or not orderID:
 
-             red_url = "{SERVER_DOMAIN}cloudstorage/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-             return HttpResponseRedirect(red_url)
 
-         paypalrestsdk.configure(PAYPAL_CRD)
 
-         # ID of the payment. This ID is provided when creating payment.
 
-         payment = paypalrestsdk.Payment.find(paymentId)
 
-         payres = payment.execute({"payer_id": PayerID})
 
-         print(payres)
 
-         if not payres:
 
-             red_url = "{SERVER_DOMAIN}cloudstorage/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-             return HttpResponseRedirect(red_url)
 
-         print("Payment execute successfully")
 
-         order_qs = Order_Model.objects.filter(orderID=orderID)
 
-         nowTime = int(time.time())
 
-         order_list = order_qs.values("UID", "channel", "commodity_code")
 
-         UID = order_list[0]['UID']
 
-         channel = order_list[0]['channel']
 
-         commodity_code = order_list[0]['commodity_code']
 
-         smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
 
-             values("day", "bucket_id", "bucket__storeDay")
 
-         bucketId = smqs[0]['bucket_id']
 
-         if not smqs.exists():
 
-             return response.json(0, '套餐已删除')
 
-         addTime = int(smqs[0]["day"]) * 24 * 3600
 
-         # ##
 
-         ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=nowTime). \
 
-             values("bucket__storeDay", "bucket__region", "endTime")
 
-         if ubqs.exists():
 
-             ubqs_count = ubqs.count()
 
-             print(ubqs_count)
 
-             ubq = ubqs[ubqs_count - 1]
 
-             print(ubq)
 
-             new_starTime = ubq['endTime'] + 1
 
-             ub_cqs = UID_Bucket.objects.create \
 
-                 (uid=UID, channel=channel, bucket_id=bucketId,
 
-                  endTime=new_starTime + addTime)
 
-             uid_bucket_id = ub_cqs.id
 
-         else:
 
-             ub_cqs = UID_Bucket.objects.create \
 
-                 (uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
 
-             uid_bucket_id = ub_cqs.id
 
-         order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
 
-         # return response.json(0)
 
-         red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-         return HttpResponseRedirect(red_url)
 
-     def do_pay_by_wechat_callback(self, request_dict, response):
 
-         result_code = request_dict.get('result_code', None)
 
-         if result_code == 'SUCCESS':
 
-             response = HttpResponse()
 
-             check_sign = WechatPayObject.get_notifypay(request_dict)
 
-             if not check_sign:
 
-                 return HttpResponse(WechatPayObject.xml_to_dict({'return_code':'FAIL', 'return_msg':'签名失败'}))
 
-             orderID = request_dict.get('out_trade_no',None)
 
-             order_qs = Order_Model.objects.filter(orderID=orderID)
 
-             nowTime = int(time.time())
 
-             order_list = order_qs.values("UID", "channel", "commodity_code")
 
-             UID = order_list[0]['UID']
 
-             channel = order_list[0]['channel']
 
-             commodity_code = order_list[0]['commodity_code']
 
-             smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
 
-                 values("day", "bucket_id", "bucket__storeDay")
 
-             bucketId = smqs[0]['bucket_id']
 
-             if not smqs.exists():
 
-                 return HttpResponse(WechatPayObject.xml_to_dict({'return_code':'FAIL', 'return_msg':'套餐不存在'}))
 
-             addTime = int(smqs[0]["day"]) * 24 * 3600
 
-             # ##
 
-             ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=nowTime). \
 
-                 values("bucket__storeDay", "bucket__region", "endTime")
 
-             if ubqs.exists():
 
-                 ubqs_count = ubqs.count()
 
-                 print(ubqs_count)
 
-                 ubq = ubqs[ubqs_count - 1]
 
-                 print(ubq)
 
-                 new_starTime = ubq['endTime'] + 1
 
-                 ub_cqs = UID_Bucket.objects.create \
 
-                     (uid=UID, channel=channel, bucket_id=bucketId,
 
-                      endTime=new_starTime + addTime)
 
-                 uid_bucket_id = ub_cqs.id
 
-             else:
 
-                 ub_cqs = UID_Bucket.objects.create \
 
-                     (uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
 
-                 uid_bucket_id = ub_cqs.id
 
-             order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
 
-             return HttpResponse(WechatPayObject.xml_to_dict({'return_code':'SUCCESS', 'return_msg':'OK'}))
 
-         return HttpResponse(WechatPayObject.xml_to_dict({'return_code':'FAIL', 'return_msg':'参数格式校验错误'}))
 
-     def do_create_pay_order(self, request_dict, userID, response):
 
-         uid = request_dict.get('uid', None)
 
-         channel = request_dict.get('channel', None)
 
-         commodity_code = request_dict.get('commodity_code', None)
 
-         pay_type = int(request_dict.get('pay_type', None))
 
-         rank = request_dict.get('rank', None)
 
-         if not uid or not channel or not commodity_code or not rank:
 
-             return response.json(13, '参数有误.')
 
-         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1)
 
-         if not dv_qs.exists():
 
-             return response.json(12)
 
-         smqs = Store_Meal.objects.filter(commodity_code=commodity_code, pay_type=pay_type). \
 
-             values('currency', 'price', 'content', 'day', 'commodity_type', 'title', 'content')
 
-         if not smqs.exists():
 
-             return response.json(10, '套餐不存在')
 
-         currency = smqs[0]['currency']
 
-         price = smqs[0]['price']
 
-         content = smqs[0]['content']
 
-         day = smqs[0]['day']
 
-         commodity_type = smqs[0]['commodity_type']
 
-         # ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
 
-         #     values("bucket__storeDay", "bucket__region", "endTime")
 
-         # if ubqs.exists():
 
-         #     ubqs_count = ubqs.count()
 
-         #     ubq = ubqs[ubqs_count - 1, ubqs_count]
 
-         #     new_starTime = ubq['endTime'] + 1
 
-         nowTime = int(time.time())
 
-         orderID = CommonService.createOrderID()
 
-         if pay_type == 1:
 
-             call_sub_url = "{SERVER_DOMAIN}cloudstorage/dopaypalcallback?orderID={orderID}". \
 
-                 format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
 
-             # call_sub_url = "http://192.168.136.40:8077/cloudstorage/payExecute?orderID={orderID}".format(
 
-             #     SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
 
-             call_clc_url = "{SERVER_DOMAIN}cloudstorage/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-             paypalrestsdk.configure(PAYPAL_CRD)
 
-             payment = paypalrestsdk.Payment({
 
-                 "intent": "sale",
 
-                 "payer": {"payment_method": "paypal"},
 
-                 "redirect_urls": {"return_url": call_sub_url, "cancel_url": call_clc_url},
 
-                 "transactions": [{
 
-                     "item_list": {"items": [
 
-                         {"name": "Cloud video", "sku": "1", "price": price, "currency": "USD", "quantity": 1}]},
 
-                     "amount": {"total": price, "currency": currency},
 
-                     "description": content}]})
 
-             if payment.create():
 
-                 print("Payment created successfully")
 
-             else:
 
-                 print(payment.error)
 
-                 return response.json(10, payment.error)
 
-             print(payment)
 
-             for link in payment.links:
 
-                 if link.rel == "approval_url":
 
-                     approval_url = str(link.href)
 
-                     print("Redirect for approval: %s" % (approval_url))
 
-                     Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
 
-                                                desc=content, payType=pay_type, payTime=nowTime,
 
-                                                price=price, currency=currency, addTime=nowTime, updTime=nowTime,
 
-                                                endTime=(nowTime + int(day) * 3600 * 24), pay_url=approval_url,
 
-                                                commodity_code=commodity_code, commodity_type=commodity_type,rank_id=rank)
 
-                     return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
 
-             return response.json(10, 'generate_order_false')
 
-         elif pay_type == 2:
 
-             try:
 
-                 aliPayObj = AliPayObject()
 
-                 alipay = aliPayObj.conf()
 
-                 subject = smqs[0]['title'] + smqs[0]['content']
 
-                 order_string = alipay.api_alipay_trade_wap_pay(
 
-                     out_trade_no=orderID,
 
-                     total_amount=price,
 
-                     subject=subject,
 
-                     return_url="{SERVER_DOMAIN_SSL}cloudstorage/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
 
-                     notify_url="{SERVER_DOMAIN_SSL}cloudstorage/doalicallback".format(
 
-                         SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
 
-                     # return_url="http://192.168.136.40/cloudstorage/payOK",
 
-                     # notify_url="http://192.168.136.40/cloudstorage/aliPayCallback"
 
-                 )
 
-             except Exception as e:
 
-                 print(repr(e))
 
-                 return response.json(10, repr(e))
 
-             else:
 
-                 if order_string:
 
-                     redirectUrl = aliPayObj.alipay_prefix + order_string
 
-                     print('---------tttt')
 
-                     print(redirectUrl)
 
-                     Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
 
-                                                desc=content, payType=pay_type, payTime=nowTime,
 
-                                                price=price, currency=currency, addTime=nowTime, updTime=nowTime,
 
-                                                endTime=(nowTime + int(day) * 3600 * 24), pay_url=redirectUrl,
 
-                                                commodity_code=commodity_code, commodity_type=commodity_type,rank_id=rank)
 
-                     return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
 
-                                                           'result': {"redirectUrl": redirectUrl, "orderID": orderID},
 
-                                                           'error_code': 0})
 
-                 else:
 
-                     return response.json(10, '生成订单错误.')
 
-         elif pay_type == 3:
 
-             # spbill_create_ip = '127.0.0.1'
 
-             spbill_create_ip = '120.237.157.184'
 
-             pay = WechatPayObject()
 
-             notify_url="{SERVER_DOMAIN_SSL}cloudstorage/dowechatnotify".format(
 
-                 SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
 
-             # 获取参数
 
-             price = float(price)*100
 
-             parameter_dict = pay.get_parameter(orderID, content, price, spbill_create_ip, notify_url)
 
-             print('parameter_dict', parameter_dict)
 
-             # parameter_dict 参数中获取MWEB_URL 调转页面在路径后面添加redirect_url
 
-             # 统一调用接口
 
-             response = pay.re_finall()
 
-             if not response:
 
-                 return response.json(10, '生成订单错误.')
 
-             # 回调函数
 
-             Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
 
-                                        desc=content, payType=pay_type, payTime=nowTime,
 
-                                        price=price, currency=currency, addTime=nowTime, updTime=nowTime,
 
-                                        endTime=(nowTime + int(day) * 3600 * 24), pay_url=notify_url,
 
-                                        commodity_code=commodity_code, commodity_type=commodity_type,rank_id=rank)
 
-             return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
 
-                                                   'result': response,
 
-                                                   'orderId': orderID,
 
-                                                   'error_code': 0})
 
-             # 调起支付接口
 
-     # 生成体验订单
 
-     def do_experience_order(self, request_dict, userID, response):
 
-         uid = request_dict.get('uid', None)
 
-         channel = request_dict.get('channel', None)
 
-         commodity_code = request_dict.get('commodity_code', None)
 
-         pay_type = int(request_dict.get('pay_type', None))
 
-         rank = request_dict.get('rank', None)
 
-         if uid == None or channel == None or commodity_code == None or pay_type == None or rank == None:
 
-             return response.json(13, '参数有误.')
 
-         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1)
 
-         if not dv_qs.exists():
 
-             return response.json(12)
 
-         smqs = Store_Meal.objects.filter(commodity_code=commodity_code, type=pay_type). \
 
-             values('currency', 'price', 'content', 'day', 'commodity_type', 'title', 'content')
 
-         if not smqs.exists():
 
-             return response.json(10, '套餐不存在')
 
-         currency = smqs[0]['currency']
 
-         price = smqs[0]['price']
 
-         content = smqs[0]['content']
 
-         day = smqs[0]['day']
 
-         commodity_type = smqs[0]['commodity_type']
 
-         # ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=nowTime). \
 
-         #     values("bucket__storeDay", "bucket__region", "endTime")
 
-         # if ubqs.exists():
 
-         #     ubqs_count = ubqs.count()
 
-         #     ubq = ubqs[ubqs_count - 1, ubqs_count]
 
-         #     new_starTime = ubq['endTime'] + 1
 
-         nowTime = int(time.time())
 
-         orderID = CommonService.createOrderID()
 
-         Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
 
-                                    desc=content, payType=pay_type, payTime=nowTime,
 
-                                    price=price, currency=currency, addTime=nowTime, updTime=nowTime,
 
-                                    endTime=(nowTime + int(day) * 3600 * 24), pay_url="体验版",
 
-                                    commodity_code=commodity_code, commodity_type=commodity_type,
 
-                                    rank_id=rank)
 
-         order_qs = Order_Model.objects.filter(orderID=orderID)
 
-         nowTime = int(time.time())
 
-         order_list = order_qs.values("UID", "channel", "commodity_code")
 
-         UID = order_list[0]['UID']
 
-         channel = order_list[0]['channel']
 
-         commodity_code = order_list[0]['commodity_code']
 
-         smqs = Store_Meal.objects.filter(commodity_code=commodity_code). \
 
-             values("day", "bucket_id", "bucket__storeDay")
 
-         bucketId = smqs[0]['bucket_id']
 
-         if not smqs.exists():
 
-             return response.json(0, '套餐已删除')
 
-         addTime = int(smqs[0]["day"]) * 24 * 3600
 
-         # ##
 
-         ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, endTime__gte=nowTime). \
 
-             values("bucket__storeDay", "bucket__region", "endTime")
 
-         if ubqs.exists():
 
-             ubqs_count = ubqs.count()
 
-             print(ubqs_count)
 
-             ubq = ubqs[ubqs_count - 1]
 
-             print(ubq)
 
-             new_starTime = ubq['endTime'] + 1
 
-             ub_cqs = UID_Bucket.objects.create \
 
-                 (uid=UID, channel=channel, bucket_id=bucketId,
 
-                  endTime=new_starTime + addTime)
 
-             uid_bucket_id = ub_cqs.id
 
-         else:
 
-             ub_cqs = UID_Bucket.objects.create \
 
-                 (uid=UID, channel=channel, bucket_id=bucketId, endTime=nowTime + addTime)
 
-             uid_bucket_id = ub_cqs.id
 
-         order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
 
-         # return response.json(0)
 
-         ExperienceContextModel.objects.create(
 
-             experience_type=0,
 
-             uid=uid,
 
-             do_time=nowTime
 
-         )
 
-         result = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-         return response.json(0, result)
 
-         # red_url =
 
-         # return JsonResponse(status=200, data={'red_url': red_url})
 
-         # return HttpResponseRedirect(red_url)
 
-     #重置设备云存体验
 
-     def do_experience_reset(self, request_dict, userID, response):
 
-         bid = request_dict.get("id",None)
 
-         ubq = UID_Bucket.objects.filter(id=bid)
 
-         if ubq:
 
-             eq =ExperienceContextModel.objects.filter(uid = ubq[0].uid)
 
-             if eq:
 
-                 eq.delete()
 
-                 Order_Model.objects.filter(uid_bucket_id = bid).delete()
 
-                 ubq.delete()
 
-             else:
 
-                 return response.json(10007)
 
-         else:
 
-             return response.json(0, '重置云存体验失败')
 
-         return response.json(0,'重置云存体验成功')
 
- def deleteVodHls(request):
 
-     UID = 'DSXG7481JVA2JM94111A'
 
-     channel = 1
 
-     ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel). \
 
-         values("bucket_id", "endTime", "bucket__storeDay")
 
-     nowTime = int(time.time())
 
-     if ubqs.exists():
 
-         ubqs_count = ubqs.count()
 
-         ubq = ubqs[ubqs_count - 1, ubqs_count]
 
-         new_starTime = ubq['endTime'] + 1
 
-         print(new_starTime)
 
-         exit()
 
-         # ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
 
-         #                                    endTime=new_starTime + addTime)
 
-         # uid_bucket_id = ub_cqs.id
 
-     exit()
 
-     response = ResponseObject()
 
-     i = int(request.GET.get('i', 5))
 
-     nowTime = int(time.time())
 
-     for i in range(i):
 
-         vh_qs = VodHlsModel.objects.filter(endTime__lte=str(nowTime))[0:10000]
 
-         id_list = vh_qs.values_list("id", flat=True)
 
-         print(id_list)
 
-         VodHlsModel.objects.filter(id__in=list(id_list)).delete()
 
-     return response.json(0)
 
 
  |