|
@@ -8,35 +8,48 @@
|
|
|
@DATE: 2018/12/5 9:30
|
|
|
@Version: python3.6
|
|
|
@MODIFY DECORD:ansjer dev
|
|
|
-@file: CloudVod.py
|
|
|
+@file: cloudstorage.py
|
|
|
@Contact: chanjunkai@163.com
|
|
|
"""
|
|
|
import json
|
|
|
-import math
|
|
|
import time
|
|
|
import urllib
|
|
|
-from Object.AliPayObject import AliPayObject
|
|
|
+
|
|
|
+import boto3
|
|
|
import oss2
|
|
|
import paypalrestsdk
|
|
|
-import boto3
|
|
|
from aliyunsdkcore import client
|
|
|
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
|
|
|
+from boto3.session import Session
|
|
|
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, StsCrdModel
|
|
|
+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 Service.ModelService import ModelService
|
|
|
-from Object.ETkObject import ETkObject
|
|
|
+from Object.m3u8generate import PlaylistGenerator
|
|
|
+
|
|
|
+SERVER_DOMAIN = 'http://test.dvema.com/'
|
|
|
|
|
|
-SERVER_DOMAIN = 'http://cloudstroage.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
|
|
|
+'''
|
|
|
|
|
|
|
|
|
# 设备信息添加
|
|
@@ -56,6 +69,8 @@ class CloudStorageView(View):
|
|
|
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':
|
|
@@ -65,6 +80,10 @@ class CloudStorageView(View):
|
|
|
return self.do_get_sign_sts(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
|
|
@@ -79,9 +98,149 @@ class CloudStorageView(View):
|
|
|
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)
|
|
|
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)
|
|
|
+ qs = Store_Meal.objects
|
|
|
+ if mold:
|
|
|
+ qs = qs.filter(bucket__mold=1)
|
|
|
+ else:
|
|
|
+ qs = qs.filter(bucket__mold=0)
|
|
|
+ qs = qs.values("id", "title", "content", "price",
|
|
|
+ "day", "currency", "bucket__storeDay",
|
|
|
+ "bucket__bucket", "bucket__area", "type",
|
|
|
+ "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')):
|
|
|
+ res_c = {'area': area, 'items': list(items)}
|
|
|
+ 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=int(storeTime), endTime__gte=now_time). \
|
|
|
+ values("sec", "fg", "bucket__bucket", "bucket__endpoint", "bucket__region", "bucket__mold")
|
|
|
+ if not vh_qs.exists():
|
|
|
+ return response.json()
|
|
|
+ sec = vh_qs[0]['sec']
|
|
|
+ fg = vh_qs[0]['fg']
|
|
|
+ bucket__region = vh_qs[0]['bucket__region']
|
|
|
+ bucket_name = vh_qs[0]['bucket__bucket']
|
|
|
+ aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
|
|
|
+ aws_secret_access_key = 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw'
|
|
|
+ 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')
|
|
|
+ playlist_entries = []
|
|
|
+ for i in range(fg):
|
|
|
+ thumbspng = '{uid}/vod{channel}/{time}/thumbs.png'. \
|
|
|
+ format(uid=uid, channel=channel, time=storeTime)
|
|
|
+ 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()
|
|
|
+ response = HttpResponse(playlist, content_type="application/octet-stream")
|
|
|
+ return response
|
|
|
+ return HttpResponse(status=200, content=playlist)
|
|
|
+
|
|
|
def do_get_sign_sts(self, request_dict, ip, response):
|
|
|
uidToken = request_dict.get('uidToken', None)
|
|
|
utko = UidTokenObject(uidToken)
|
|
@@ -93,7 +252,7 @@ class CloudStorageView(View):
|
|
|
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")
|
|
|
+ values("bucket__mold", "bucket__bucket", "bucket__endpoint", "bucket__region", "endTime")
|
|
|
if ubqs.exists():
|
|
|
if ubqs[0]["bucket__mold"] == 0:
|
|
|
# 阿里云 oss sts
|
|
@@ -220,9 +379,10 @@ class CloudStorageView(View):
|
|
|
'ip': ip,
|
|
|
}
|
|
|
if sts_qs.exists():
|
|
|
- sts_qs.update(data=json.dumps(res), addTime=now_time)
|
|
|
+ sts_qs.update(data=json.dumps(res,default=str), addTime=now_time)
|
|
|
else:
|
|
|
- StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res), addTime=now_time, type=1)
|
|
|
+ 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!'}
|
|
@@ -230,15 +390,72 @@ class CloudStorageView(View):
|
|
|
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)
|
|
|
+ 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)
|
|
|
now_time = int(time.time())
|
|
|
- vh_qs = VodHlsModel.objects.filter(uid=uid,channel=channel,time__range=(startTime,endTime))
|
|
|
+ vh_qs = VodHlsModel.objects.filter\
|
|
|
+ (uid=uid, channel=channel, time__range=(startTime, endTime), endTime__gte=now_time). \
|
|
|
+ values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region", "bucket__mold")
|
|
|
+ vod_play_list = []
|
|
|
+ print("---")
|
|
|
+ print(vh_qs)
|
|
|
+ auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
|
|
|
+ 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:
|
|
|
+ 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 = 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw'
|
|
|
+ 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}/thumbs.png'. \
|
|
|
+ format(uid=uid, channel=channel, time=vod['time'])
|
|
|
+ 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://cloudstroage.dvema.com/cloudstorage/signplaym3u8?' \
|
|
|
+ 'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
|
|
|
+ format(uid=uid, channel=channel, time=vod['time'])
|
|
|
+ vod_play_list.append({
|
|
|
+ 'name': vod['time'],
|
|
|
+ 'sign_url': vod_url,
|
|
|
+ 'thumb': thumb_url,
|
|
|
+ 'sec': vod['sec']})
|
|
|
+ return response.json(0, vod_play_list)
|
|
|
|
|
|
def do_store_playlist(self, request_dict, response):
|
|
|
uidToken = request_dict.get('uidToken', None)
|
|
@@ -259,11 +476,12 @@ class CloudStorageView(View):
|
|
|
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")
|
|
|
+ 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']
|
|
|
+ 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:
|
|
@@ -313,7 +531,7 @@ class CloudStorageView(View):
|
|
|
uid = request_dict.get('uid', None)
|
|
|
status = request_dict.get('status', None)
|
|
|
channel = request_dict.get('channel', None)
|
|
|
- if not all([uid, status, channel]):
|
|
|
+ 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())
|
|
@@ -323,13 +541,14 @@ class CloudStorageView(View):
|
|
|
print(repr(e))
|
|
|
return response.json(10, '未购买')
|
|
|
else:
|
|
|
- ubqs.update(status=status)
|
|
|
+ ubqs.status = status
|
|
|
+ ubqs.save()
|
|
|
if status == 0:
|
|
|
return response.json(0)
|
|
|
else:
|
|
|
utko = UidTokenObject()
|
|
|
utko.generate(data={'uid': uid, 'channel': channel})
|
|
|
- uidTK = utko.toke
|
|
|
+ uidTK = utko.token
|
|
|
uidTkUrl = "{SERVER_DOMAIN}cloudstorage/getsignsts?uidToken={uidToken}". \
|
|
|
format(uidToken=uidTK, SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
storeHlsUrl = "{SERVER_DOMAIN}cloudstorage/storeplaylist?uidToken={uidToken}". \
|
|
@@ -337,7 +556,6 @@ class CloudStorageView(View):
|
|
|
return response.json(0, {'uidTkUrl': uidTkUrl, 'storeHlsUrl': storeHlsUrl})
|
|
|
else:
|
|
|
return response.json(12)
|
|
|
-
|
|
|
else:
|
|
|
return response.json(444, 'uid,status,channel')
|
|
|
|
|
@@ -548,7 +766,7 @@ class CloudStorageView(View):
|
|
|
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}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
return response.json(0, signature)
|
|
|
|
|
@@ -557,7 +775,7 @@ class CloudStorageView(View):
|
|
|
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}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ 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.
|
|
@@ -565,7 +783,7 @@ class CloudStorageView(View):
|
|
|
payres = payment.execute({"payer_id": PayerID})
|
|
|
print(payres)
|
|
|
if not payres:
|
|
|
- red_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ 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)
|
|
@@ -585,18 +803,22 @@ class CloudStorageView(View):
|
|
|
values("bucket__storeDay", "bucket__region", "endTime")
|
|
|
if ubqs.exists():
|
|
|
ubqs_count = ubqs.count()
|
|
|
- ubq = ubqs[ubqs_count - 1, 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)
|
|
|
+ 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)
|
|
|
+ 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}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
|
|
|
def do_create_pay_order(self, request_dict, userID, response):
|
|
@@ -625,11 +847,11 @@ class CloudStorageView(View):
|
|
|
nowTime = int(time.time())
|
|
|
orderID = CommonService.createOrderID()
|
|
|
if pay_type == 0:
|
|
|
- call_sub_url = "{SERVER_DOMAIN}cloudVod/dopaypalcallback?orderID={orderID}". \
|
|
|
+ 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/cloudVod/payExecute?orderID={orderID}".format(
|
|
|
+ # 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}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ call_clc_url = "{SERVER_DOMAIN}cloudstorage/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
payment = paypalrestsdk.Payment({
|
|
|
"intent": "sale",
|
|
@@ -666,10 +888,11 @@ class CloudStorageView(View):
|
|
|
out_trade_no=orderID,
|
|
|
total_amount=price,
|
|
|
subject=subject,
|
|
|
- return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
|
|
|
- notify_url="{SERVER_DOMAIN_SSL}cloudVod/doalicallback".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"
|
|
|
+ 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))
|