|
@@ -12,10 +12,14 @@
|
|
|
@Contact: chanjunkai@163.com
|
|
|
"""
|
|
|
import json
|
|
|
+import os
|
|
|
import time
|
|
|
import urllib
|
|
|
+from urllib.parse import quote, parse_qs, unquote
|
|
|
|
|
|
+import apns2
|
|
|
import boto3
|
|
|
+import jpush
|
|
|
import oss2
|
|
|
import paypalrestsdk
|
|
|
import threading
|
|
@@ -27,11 +31,12 @@ 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 pyfcm import FCMNotification
|
|
|
|
|
|
from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
|
|
|
- SERVER_DOMAIN_SSL
|
|
|
+ SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, JPUSH_CONFIG
|
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
|
|
|
- ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User
|
|
|
+ ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel
|
|
|
from Object.AliPayObject import AliPayObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.TokenObject import TokenObject
|
|
@@ -96,6 +101,11 @@ class CloudStorageView(View):
|
|
|
return self.do_sign_play_m3u8(request_dict, response)
|
|
|
elif operation == 'payOK':
|
|
|
return self.do_pay_ok(request_dict)
|
|
|
+ elif operation == 'vodMsgEnd':
|
|
|
+ return self.do_vod_msg_end(request_dict)
|
|
|
+ elif operation == 'vodMsgNotice':
|
|
|
+ return self.do_vod_msg_Notice(request_dict)
|
|
|
+
|
|
|
else:
|
|
|
token = request_dict.get('token', None)
|
|
|
# 设备主键uid
|
|
@@ -253,11 +263,11 @@ class CloudStorageView(View):
|
|
|
bucket_name = vh_qs[0]['bucket__bucket']
|
|
|
print(bucket__region)
|
|
|
print(bucket_name)
|
|
|
- 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,
|
|
|
+ aws_access_key_id=AWS_ACCESS_KEY_ID[vh_qs[0]["bucket__mold"]],
|
|
|
+ aws_secret_access_key = AWS_SECRET_ACCESS_KEY[vh_qs[0]["bucket__mold"]],
|
|
|
region_name=bucket__region
|
|
|
)
|
|
|
'''
|
|
@@ -329,142 +339,77 @@ class CloudStorageView(View):
|
|
|
values("bucket__mold", "bucket__bucket", "bucket__endpoint",
|
|
|
"bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
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)
|
|
|
+ # 亚马逊 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']
|
|
|
- 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='ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw',
|
|
|
- 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 + '_' + str(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!'}
|
|
|
+ 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']
|
|
|
+
|
|
|
+ try:
|
|
|
+ aws_access_key_id = AWS_ACCESS_KEY_ID[ubqs[0]["bucket__mold"]]
|
|
|
+ aws_secret_access_key = AWS_SECRET_ACCESS_KEY[ubqs[0]["bucket__mold"]]
|
|
|
+ aws_arn = AWS_ARN[ubqs[0]["bucket__mold"]]
|
|
|
+ except:
|
|
|
+ res = {'code': 404, 'msg': 'mold not exists!'}
|
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
|
|
|
+
|
|
|
+ ###############
|
|
|
+ boto3_sts = boto3.client(
|
|
|
+ 'sts',
|
|
|
+ aws_access_key_id=aws_access_key_id,
|
|
|
+ aws_secret_access_key=aws_secret_access_key,
|
|
|
+ region_name=region_id
|
|
|
+ )
|
|
|
+ Policy = {
|
|
|
+ "Version": "2012-10-17",
|
|
|
+ "Statement": [
|
|
|
+ {
|
|
|
+ "Effect": "Allow",
|
|
|
+ "Action": "s3:*",
|
|
|
+ "Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
|
|
|
+ format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ response = boto3_sts.get_federation_token(
|
|
|
+ Name='{role_name}'.format(role_name=uid + '_' + str(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")
|
|
|
res = {'code': 405, 'msg': 'Not purchased or expired!'}
|
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
|
|
|
|
|
@@ -481,19 +426,17 @@ class CloudStorageView(View):
|
|
|
if dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
return response.json(10034)
|
|
|
now_time = int(time.time())
|
|
|
- bv_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time).order_by('addTime')
|
|
|
+ bv_qs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time).values('bucket_id').order_by('addTime')
|
|
|
if not bv_qs.exists():
|
|
|
return response.json(10030)
|
|
|
vh_qs = VodHlsModel.objects.filter \
|
|
|
- (uid=uid, channel=channel, time__range=(startTime, endTime), endTime__gte=now_time). \
|
|
|
+ (uid=uid, channel=channel, endTime__gte=now_time,time__range=(startTime, endTime), bucket_id=bv_qs[0]['bucket_id']). \
|
|
|
values("id", "time", "sec", "bucket__bucket", "fg", "bucket__endpoint", "bucket__region", "bucket__mold")
|
|
|
vod_play_list = []
|
|
|
-
|
|
|
if not vh_qs.exists():
|
|
|
return response.json(0, vod_play_list)
|
|
|
-
|
|
|
- aws_access_key_id = 'AKIA2E67UIMD45Y3HL53'
|
|
|
- aws_secret_access_key = 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw'
|
|
|
+ aws_access_key_id = AWS_ACCESS_KEY_ID[vh_qs[0]["bucket__mold"]]
|
|
|
+ aws_secret_access_key = AWS_SECRET_ACCESS_KEY[vh_qs[0]["bucket__mold"]]
|
|
|
session = Session(
|
|
|
aws_access_key_id=aws_access_key_id,
|
|
|
aws_secret_access_key=aws_secret_access_key,
|
|
@@ -505,57 +448,29 @@ class CloudStorageView(View):
|
|
|
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'], 'vod_id': vod['id']})
|
|
|
- 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}/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
|
|
|
- )
|
|
|
- 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 = int(vod['fg']) & 0xf
|
|
|
- vod_play_list.append({
|
|
|
- 'name': vod['time'],
|
|
|
- 'sign_url': vod_url,
|
|
|
- 'thumb': response_url,
|
|
|
- 'sec': vod['sec'],
|
|
|
- 'ts_num': ts_num,
|
|
|
- 'vod_id': vod['id']
|
|
|
- }),
|
|
|
+ bucket__region = vod["bucket__region"]
|
|
|
+ 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
|
|
|
+ )
|
|
|
+ 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 = int(vod['fg']) & 0xf
|
|
|
+ vod_play_list.append({
|
|
|
+ 'name': vod['time'],
|
|
|
+ 'sign_url': vod_url,
|
|
|
+ 'thumb': response_url,
|
|
|
+ 'sec': vod['sec'],
|
|
|
+ 'ts_num': ts_num,
|
|
|
+ 'vod_id': vod['id']
|
|
|
+ }),
|
|
|
return response.json(0, vod_play_list)
|
|
|
|
|
|
def do_store_playlist(self, request_dict, response):
|
|
@@ -585,44 +500,25 @@ class CloudStorageView(View):
|
|
|
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")
|
|
|
+ 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")
|
|
@@ -830,8 +726,11 @@ class CloudStorageView(View):
|
|
|
response = ResponseObject()
|
|
|
data = request.POST.dict()
|
|
|
logger = logging.getLogger('log')
|
|
|
- try:
|
|
|
|
|
|
+ try:
|
|
|
+ passback_params = data["passback_params"]
|
|
|
+ parmap = dict([(k, v[0]) for k, v in parse_qs(unquote(passback_params)).items()])
|
|
|
+ lang = parmap["lang"]
|
|
|
signature = data["sign"]
|
|
|
data.pop('sign')
|
|
|
orderID = data['out_trade_no']
|
|
@@ -890,6 +789,8 @@ class CloudStorageView(View):
|
|
|
dvq.update(**dvq_set_update_dict)
|
|
|
|
|
|
order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
return response.json(0, signature)
|
|
@@ -903,6 +804,7 @@ class CloudStorageView(View):
|
|
|
paymentId = request_dict.get('paymentId', None)
|
|
|
PayerID = request_dict.get('PayerID', None)
|
|
|
orderID = request_dict.get('orderID', None)
|
|
|
+ lang = request_dict.get('lang', None)
|
|
|
|
|
|
try:
|
|
|
order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
|
|
@@ -963,6 +865,8 @@ class CloudStorageView(View):
|
|
|
}
|
|
|
dvq.update(**dvq_set_update_dict)
|
|
|
order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存','Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
|
|
|
# return response.json(0)
|
|
|
red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
@@ -983,6 +887,9 @@ class CloudStorageView(View):
|
|
|
pay = WechatPayObject()
|
|
|
data = pay.weixinpay_call_back(request.body)
|
|
|
|
|
|
+ attach = data["attach"]
|
|
|
+ parmap = dict([(k, v[0]) for k, v in parse_qs(unquote(attach)).items()])
|
|
|
+ lang = parmap["lang"]
|
|
|
trade_status = data['result_code'] # 业务结果 SUCCESS/FAIL
|
|
|
out_trade_no = data['out_trade_no'] # 商户订单号
|
|
|
order_qs = Order_Model.objects.filter(orderID=out_trade_no, status=0)
|
|
@@ -1036,6 +943,8 @@ class CloudStorageView(View):
|
|
|
}
|
|
|
dvq.update(**dvq_set_update_dict)
|
|
|
order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'SUCCESS', 'return_msg': 'OK'}))
|
|
|
|
|
|
else:
|
|
@@ -1054,6 +963,7 @@ class CloudStorageView(View):
|
|
|
pay_type = int(request_dict.get('pay_type', None))
|
|
|
rank = request_dict.get('rank', None)
|
|
|
is_select_discount = request_dict.get('is_select_discount', 0)
|
|
|
+ lang = request_dict.get('lang', 0)
|
|
|
if not uid or not channel or not pay_type or not rank:
|
|
|
return response.json(444)
|
|
|
dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1).values(
|
|
@@ -1099,10 +1009,10 @@ class CloudStorageView(View):
|
|
|
|
|
|
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://binbin.uicp.vip/cloudstorage/dopaypalcallback?orderID={orderID}".format(
|
|
|
- #SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
|
|
|
+ call_sub_url = "{SERVER_DOMAIN}cloudstorage/dopaypalcallback?orderID={orderID}&lang={lang}". \
|
|
|
+ format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID, lang=lang)
|
|
|
+ # call_sub_url = "http://binbin.uicp.vip/cloudstorage/dopaypalcallback?orderID={orderID}".format(
|
|
|
+ # SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
|
|
|
call_clc_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
payment = paypalrestsdk.Payment({
|
|
@@ -1110,6 +1020,8 @@ class CloudStorageView(View):
|
|
|
"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():
|
|
@@ -1151,10 +1063,12 @@ class CloudStorageView(View):
|
|
|
notify_url="{SERVER_DOMAIN_SSL}cloudstorage/doalicallback".format(
|
|
|
SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
|
|
|
quit_url="{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN),
|
|
|
+ passback_params=quote("lang="+lang)
|
|
|
# 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))
|
|
@@ -1169,6 +1083,7 @@ class CloudStorageView(View):
|
|
|
pay_url=redirectUrl, isSelectDiscounts=is_select_discount,
|
|
|
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})
|
|
@@ -1182,14 +1097,13 @@ class CloudStorageView(View):
|
|
|
# 获取参数
|
|
|
response = ResponseObject()
|
|
|
|
|
|
- parameter_dict = pay.get_parameter(orderID, content, float(price) * 100, ip, notify_url)
|
|
|
+ parameter_dict = pay.get_parameter(orderID, content, float(price) * 100, ip, notify_url, quote("lang="+lang))
|
|
|
print('parameter_dict', parameter_dict)
|
|
|
# parameter_dict 参数中获取MWEB_URL 调转页面在路径后面添加redirect_url
|
|
|
# 统一调用接口
|
|
|
response = pay.re_finall(orderid=orderID)
|
|
|
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,
|
|
@@ -1214,9 +1128,9 @@ class CloudStorageView(View):
|
|
|
if cdk != None and pay_type == 11:
|
|
|
cdk_qs = CDKcontextModel.objects.filter(cdk=cdk).values('is_activate', 'rank__id', 'rank__commodity_code')
|
|
|
if not cdk_qs.exists():
|
|
|
- return response.json(10, '无效激活码')
|
|
|
+ return response.json(10040)
|
|
|
if cdk_qs[0]['is_activate'] == 1:
|
|
|
- return response.json(10, '激活码已被使用过')
|
|
|
+ return response.json(10039)
|
|
|
rank = cdk_qs[0]['rank__id']
|
|
|
commodity_code = cdk_qs[0]['rank__commodity_code']
|
|
|
|
|
@@ -1368,23 +1282,221 @@ class CloudStorageView(View):
|
|
|
if switch_commodity_id:
|
|
|
# 切换设备套餐关联
|
|
|
using_uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=int(time.time())).values("id", "uid",
|
|
|
- "endTime",
|
|
|
- "bucket__content").order_by(
|
|
|
- 'addTime')
|
|
|
-
|
|
|
+ "endTime","bucket__content","addTime").order_by('addTime')
|
|
|
if not using_uid_bucket.exists():
|
|
|
return response.json(10030)
|
|
|
-
|
|
|
- if int(using_uid_bucket[0]['id']) == int(switch_commodity_id):
|
|
|
+ useing_uid_bucket_id = using_uid_bucket[0]['id']
|
|
|
+ useing_uid_bucket_addTime = using_uid_bucket[0]['addTime']
|
|
|
+ if int(useing_uid_bucket_id) == int(switch_commodity_id):
|
|
|
return response.json(10032)
|
|
|
|
|
|
- # UID_Bucket.objects.filter(id=switch_commodity_id).update(is_use=1) #更新转移的云存套餐为使用中
|
|
|
- UID_Bucket.objects.filter(id=using_uid_bucket[0]['id']).delete() # 删除原来使用中的云存套餐
|
|
|
+ UID_Bucket.objects.filter(id=switch_commodity_id).update(addTime=useing_uid_bucket_addTime)#更新转移的云存套餐为使用中
|
|
|
+ UID_Bucket.objects.filter(id=useing_uid_bucket_id).delete() # 删除原来使用中的云存套餐
|
|
|
VodHlsModel.objects.filter(uid=uid).delete() # 删除播放列表
|
|
|
StsCrdModel.objects.filter(uid=uid).delete() # 删除sts记录
|
|
|
return response.json(0)
|
|
|
return response.json(444)
|
|
|
|
|
|
+ # 云存操作系统消息
|
|
|
+ def do_vod_msg_Notice(self, uid, channel, userID, lang, sys_msg_text_list):
|
|
|
+ try:
|
|
|
+ logger = logging.getLogger('log')
|
|
|
+ logger.info('进来了')
|
|
|
+ # user = Device_User.objects.get(userID = userID)
|
|
|
+ # lang = user.language;
|
|
|
+ if lang == 'cn':
|
|
|
+ sys_msg_text = sys_msg_text_list[0]
|
|
|
+ else:
|
|
|
+ sys_msg_text = sys_msg_text_list[1]
|
|
|
+ nowTime = int(time.time())
|
|
|
+ create_data = {'userID_id': userID, 'msg': sys_msg_text, 'addTime': nowTime,
|
|
|
+ 'updTime': nowTime, 'uid': uid, 'eventType': 0}
|
|
|
+ SysMsgModel.objects.create(**create_data)
|
|
|
+ self.pushApp(nowTime, uid, channel, sys_msg_text)
|
|
|
+
|
|
|
+ logger.info('出去了')
|
|
|
+ except Exception as e:
|
|
|
+ return repr(e)
|
|
|
+ # 云存到期续费提醒 提前1天
|
|
|
+ def do_vod_msg_end(self):
|
|
|
+ response = ResponseObject()
|
|
|
+ now_time = int(time.time())
|
|
|
+
|
|
|
+ list = UID_Bucket.objects.filter(Q(endTime__lte=(now_time - 3600 * 24)) & Q(endTime__gt=now_time)).values('id',
|
|
|
+ 'uid',
|
|
|
+ 'bucket__area','channel')
|
|
|
+
|
|
|
+ uq_list = []
|
|
|
+ ids = []
|
|
|
+ for ub in list:
|
|
|
+ ids.append(ub['id'])
|
|
|
+
|
|
|
+ oqlist = Order_Model.objects.filter(uid_bucket_id__in=ids).values('userID_id', 'uid_bucket_id')
|
|
|
+
|
|
|
+ for ub in list:
|
|
|
+ for oo in oqlist:
|
|
|
+ if ub['id'] == oo['uid_bucket_id']:
|
|
|
+ if ub['bucket__area'] == 'cn':
|
|
|
+ sys_msg_text = "云存即将过期,请您注意!"
|
|
|
+ else:
|
|
|
+ sys_msg_text = "Cloud storage is about to expire, please pay attention!"
|
|
|
+ uq_list.append(SysMsgModel(
|
|
|
+ userID_id=oo['userID_id'],
|
|
|
+ addTime=now_time,
|
|
|
+ updTime=now_time,
|
|
|
+ uid=ub['uid'],
|
|
|
+ eventType=0,
|
|
|
+ msg=sys_msg_text,
|
|
|
+ status=0
|
|
|
+ ))
|
|
|
+ self.pushApp(now_time, ub['uid'], ub['channel'], sys_msg_text)
|
|
|
+
|
|
|
+ SysMsgModel.objects.bulk_create(uq_list)
|
|
|
+
|
|
|
+
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ def pushApp(self, nowTime, uid, channel, sys_msg_text):
|
|
|
+ n_time = nowTime
|
|
|
+
|
|
|
+ kwag_args = {
|
|
|
+ 'uid': uid,
|
|
|
+ 'channel': channel,
|
|
|
+ 'event_type': 0,
|
|
|
+ 'n_time': n_time
|
|
|
+ }
|
|
|
+
|
|
|
+ # 从数据库查询出来
|
|
|
+ uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
|
|
|
+ values('token_val', 'app_type', 'appBundleId', 'm_code',
|
|
|
+ 'push_type', 'userID_id', 'userID__NickName',
|
|
|
+ 'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
|
|
|
+ 'uid_set__channel')
|
|
|
+ print(uid_push_qs)
|
|
|
+ # 新建一个list接收数据
|
|
|
+ redis_list = []
|
|
|
+ # 把数据库数据追加进redis_list
|
|
|
+ for qs in uid_push_qs:
|
|
|
+ redis_list.append(qs)
|
|
|
+
|
|
|
+ nickname = redis_list[0]['uid_set__nickname']
|
|
|
+
|
|
|
+ for up in redis_list:
|
|
|
+ push_type = up['push_type']
|
|
|
+ appBundleId = up['appBundleId']
|
|
|
+ token_val = up['token_val']
|
|
|
+ lang = up['lang']
|
|
|
+ tz = up['tz']
|
|
|
+ if tz is None or tz == '':
|
|
|
+ tz = 0
|
|
|
+
|
|
|
+ package_title_config = {
|
|
|
+ 'com.ansjer.customizedd_a': 'DVS',
|
|
|
+ 'com.ansjer.zccloud_a': 'ZosiSmart',
|
|
|
+ 'com.ansjer.zccloud_ab': '周视',
|
|
|
+ 'com.ansjer.adcloud_a': 'ADCloud',
|
|
|
+ 'com.ansjer.adcloud_ab': 'ADCloud',
|
|
|
+ 'com.ansjer.accloud_a': 'ACCloud',
|
|
|
+ 'com.ansjer.loocamccloud_a': 'Loocam',
|
|
|
+ 'com.ansjer.loocamdcloud_a': 'Anlapus',
|
|
|
+ 'com.ansjer.customizedb_a': 'COCOONHD',
|
|
|
+ 'com.ansjer.customizeda_a': 'Guardian365',
|
|
|
+ 'com.ansjer.customizedc_a': 'PatrolSecure',
|
|
|
+ }
|
|
|
+ if appBundleId in package_title_config.keys():
|
|
|
+ msg_title = package_title_config[appBundleId] + '(' + nickname + ')'
|
|
|
+ else:
|
|
|
+ msg_title = nickname
|
|
|
+
|
|
|
+ # 发送内容
|
|
|
+ msg_text = sys_msg_text
|
|
|
+ kwag_args['appBundleId'] = appBundleId
|
|
|
+ kwag_args['token_val'] = token_val
|
|
|
+ kwag_args['msg_title'] = msg_title
|
|
|
+ kwag_args['msg_text'] = msg_text
|
|
|
+ push_server_status = 0
|
|
|
+ # 推送
|
|
|
+ if push_type == 0: # ios apns
|
|
|
+
|
|
|
+ try:
|
|
|
+ cli = apns2.APNSClient(mode=APNS_MODE,
|
|
|
+ client_cert=os.path.join(BASE_DIR,
|
|
|
+ APNS_CONFIG[appBundleId]['pem_path']))
|
|
|
+
|
|
|
+ push_data = {"alert": "Motion ", "event_time": n_time, "event_type": 0, "msg": "",
|
|
|
+ "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1",
|
|
|
+ "channel": channel}
|
|
|
+ alert = apns2.PayloadAlert(body=msg_text, title=msg_title)
|
|
|
+ payload = apns2.Payload(alert=alert, custom=push_data)
|
|
|
+
|
|
|
+ # return uid, channel, appBundleId, str(token_val), event_type, n_time, msg_title,msg_text
|
|
|
+ n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
|
|
|
+ res = cli.push(n=n, device_token=token_val, topic=appBundleId)
|
|
|
+ print(res.status_code)
|
|
|
+ if res.status_code == 200:
|
|
|
+ return res.status_code
|
|
|
+ else:
|
|
|
+ print('apns push fail')
|
|
|
+ print(res.reason)
|
|
|
+ return res.status_code
|
|
|
+ except (ValueError, ArithmeticError):
|
|
|
+ return 'The program has a numeric format exception, one of the arithmetic exceptions'
|
|
|
+ except Exception as e:
|
|
|
+ print(repr(e))
|
|
|
+ return repr(e)
|
|
|
+
|
|
|
+ elif push_type == 1: # android gcm
|
|
|
+ try:
|
|
|
+ FCM_CONFIG = {
|
|
|
+ 'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
|
|
|
+ 'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
|
|
|
+ 'com.ansjer.loocamdcloud_a': 'AAAAb9YP3rk:APA91bGw2I2KMD4i-5T7nZO_wB8kuAOuqgyqe5rxmY-W5qkpYEx9IL2IfmC_qf6B_xOyjIDDSjckvMo-RauN__SEoxvAkis7042GRkoKpw7cjZ_H8lC-d50PC0GclPzccrOGFusyKbFY',
|
|
|
+ 'com.ansjer.customizedb_a': 'AAAAb9YP3rk:APA91bE7kI4vcm-9h_CJNFlOZfc-xwP4Btn6AnjOrwoKV6fgYN7fdarkO76sYxVZiAbDnxsFfOJyP7vQfwyan6mdjuyD5iHdt_XgO22VqniC0vA1V4GJiCS8Tp7LxIX8JVKZl9I_Powt',
|
|
|
+ 'com.ansjer.customizeda_a': 'AAAAb9YP3rk:APA91bF0HzizVWDc6dKzobY9fsaKDK4veqkOZehDXshVXs8pEEvNWjR_YWbhP60wsRYCHCal8fWN5cECVOWNMMzDsfU88Ty2AUl8S5FtZsmeDTkoGntQOswBr8Ln7Fm_LAp1VqTf9CpM',
|
|
|
+ 'com.ansjer.customizedd_a': 'AAAAb9YP3rk:APA91bHkxOozJWBrlv3eNT0PgwosYENI9aM4Zuzd418cX-iKkpa1zFNC5MkNDKApx1KH4fhmAfaJ6IMRZ0nj5GIxCpstDYCaZWwgC7-etqfSxG5JAq8LOwJx0o_1tUZqwjIic8ztsg0o',
|
|
|
+ 'com.ansjer.adcloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
|
|
|
+ 'com.ansjer.accloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
|
|
|
+ 'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
|
|
|
+ }
|
|
|
+ serverKey = FCM_CONFIG[appBundleId]
|
|
|
+ except Exception as e:
|
|
|
+ return 'serverKey abnormal'
|
|
|
+ push_service = FCMNotification(api_key=serverKey)
|
|
|
+ data = {"alert": "Motion ", "event_time": n_time, "event_type": 0, "msg": "",
|
|
|
+ "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1", "channel": channel}
|
|
|
+ result = push_service.notify_single_device(registration_id=token_val, message_title=msg_title,
|
|
|
+ message_body=msg_text, data_message=data,
|
|
|
+ extra_kwargs={
|
|
|
+ 'default_vibrate_timings': True,
|
|
|
+ 'default_sound': True,
|
|
|
+ 'default_light_settings': True
|
|
|
+ })
|
|
|
+ print('fcm push ing')
|
|
|
+ print(result)
|
|
|
+ return result
|
|
|
+ elif push_type == 2: # android jpush
|
|
|
+ print('do_jpush')
|
|
|
+ app_key = JPUSH_CONFIG[appBundleId]['Key']
|
|
|
+ master_secret = JPUSH_CONFIG[appBundleId]['Secret']
|
|
|
+ # 此处换成各自的app_key和master_secre
|
|
|
+ _jpush = jpush.JPush(app_key, master_secret)
|
|
|
+ push = _jpush.create_push()
|
|
|
+ # if you set the logging level to "DEBUG",it will show the debug logging.
|
|
|
+ # _jpush.set_logging("DEBUG")
|
|
|
+ # push.audience = jpush.all_
|
|
|
+ push.audience = jpush.registration_id(token_val)
|
|
|
+ push_data = {"alert": "Motion ", "event_time": n_time, "event_type": 0, "msg": "",
|
|
|
+ "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1", "channel": channel}
|
|
|
+ android = jpush.android(alert=msg_text, priority=1, style=1, alert_type=7,
|
|
|
+ big_text=msg_text, title=msg_title,
|
|
|
+ extras=push_data)
|
|
|
+ push.notification = jpush.notification(android=android)
|
|
|
+ push.platform = jpush.all_
|
|
|
+ res = push.send()
|
|
|
+ print(res)
|
|
|
+ return res.status_code
|
|
|
+
|
|
|
+
|
|
|
|
|
|
# 删除过期云存播放列表
|
|
|
def deleteVodHls(request):
|
|
@@ -1423,4 +1535,4 @@ def deleteExpiredUidBucket(request):
|
|
|
expired_uid_bucket = UID_Bucket.objects.filter(endTime__lte=now_time)
|
|
|
id_list = expired_uid_bucket.values_list("id", flat=True)
|
|
|
UID_Bucket.objects.filter(id__in=list(id_list)).delete() # 删除过期云存关联套餐, 后续是否考虑用软删除
|
|
|
- return response.json(0)
|
|
|
+ return response.json(0)
|