lang 4 vuotta sitten
vanhempi
commit
72380d7461
4 muutettua tiedostoa jossa 240 lisäystä ja 8 poistoa
  1. 2 1
      Ansjer/urls.py
  2. 60 2
      Controller/CloudStorage.py
  3. 5 5
      Controller/TestApi.py
  4. 173 0
      Object/WechatPayObject.py

+ 2 - 1
Ansjer/urls.py

@@ -177,7 +177,8 @@ urlpatterns = [
     url(r'^oauth/unbunding', UserController.UnbundingWXView.as_view()),
 
     # 删除云存视频
-    path('cv/del', CloudVod.deleteVodHls),
+    # path('cv/del', CloudVod.deleteVodHls),
+    path('cv/del', CloudStorage.deleteVodHls),
     url(r'^equipment/judge', EquipmentManager.judgeInterface),
 
     # ap模式,新增设备表

+ 60 - 2
Controller/CloudStorage.py

@@ -33,6 +33,7 @@ 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
 
 SERVER_DOMAIN = 'http://test.dvema.com/'
 
@@ -436,6 +437,7 @@ class CloudStorageView(View):
         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). \
@@ -820,7 +822,8 @@ class CloudStorageView(View):
             nowTime = int(time.time())
             if ubqs.exists():
                 ubqs_count = ubqs.count()
-                ubq = ubqs[ubqs_count - 1, ubqs_count]
+                # ubq = ubqs[ubqs_count - 1, ubqs_count]
+                ubq = ubqs[ubqs_count - 1]
                 new_starTime = ubq['endTime'] + 1
                 ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
                                                    endTime=new_starTime + addTime)
@@ -948,7 +951,7 @@ class CloudStorageView(View):
                                                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')
-        else:
+        elif pay_type == 1:
             try:
                 aliPayObj = AliPayObject()
                 alipay = aliPayObj.conf()
@@ -981,3 +984,58 @@ class CloudStorageView(View):
                                                           'error_code': 0})
                 else:
                     return response.json(10, '生成订单错误.')
+
+        elif pay_type == 2:
+            # 调用统一支付接口
+            # 订单id
+            # 描述信息
+            body = 'zosi云存支付'
+            # 价格
+            total_fee = '50'
+            # 调用微信支付API的机器IP
+            # spbill_create_ip = '127.0.0.1'
+            spbill_create_ip = '120.237.157.184'
+            pay = WechatPayObject()
+            notify_url="{SERVER_DOMAIN_SSL}cloudstorage/dowxcallback".format(
+                SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
+            # 获取参数
+            parameter_dict = pay.get_parameter(orderID, body, total_fee, spbill_create_ip, notify_url)
+            print('parameter_dict', parameter_dict)
+            # parameter_dict 参数中获取MWEB_URL 调转页面在路径后面添加redirect_url
+            # 统一调用接口
+            response = pay.re_finall()
+            print(response)
+            # 回调函数
+            return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
+                                                  'result': response,
+                                                  'orderId': orderID,
+                                                  'error_code': 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)

+ 5 - 5
Controller/TestApi.py

@@ -682,13 +682,13 @@ class testView(View):
 
     def generate_token(self,request_dict,userID):
         #UserIdToken
-        tko = TokenObject()
-        res = tko.generate(
-            data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
+        # tko = TokenObject()
+        # res = tko.generate(
+        #     data={'userID': 158943594633713800138000, 'lang': 'cn', 'user': '597471180@qq.com', 'm_code': '123413243214'})
 
         #uidToken
-        # utko = UidTokenObject()
-        # res = utko.generate(data={'uid':'86YC8Z192VB1VMKU111A','channel':1})
+        utko = UidTokenObject()
+        res = utko.generate(data={'uid': 'H2CMKET2LDC3ZBL4111A','channel': 1})
         return JsonResponse(status=200, data=res,safe=False)
 
     def test_upload_s3(self,request_dict):

+ 173 - 0
Object/WechatPayObject.py

@@ -0,0 +1,173 @@
+from flask import current_app
+import hashlib
+import time
+from urllib.parse import quote
+
+import requests
+import xmltodict
+
+
+class WechatPayObject:
+    """配置账号信息"""
+    # 微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
+
+    def __init__(self):
+        # 开发者调用支付统一下单API生成预交易单
+        self.APPID = 'wx2a9f5ef9baf2760f'
+        # 商户id
+        self.MCHID = '1508209741'
+        # 异步通知url,商户根据实际开发过程设定
+        self.NOTIFY_URL = 'test'
+        self.TRADE_TYPE = 'APP'
+        self.APIKEY = 'ZHansjeransjeransjer680301000000'
+        self.url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'  # 微信请求url
+        self.error = None
+        self.params = None
+
+    def get_parameter(self, order_id, body, total_fee, spbill_create_ip, notify_url):
+        self.params = {
+            'appid': self.APPID,  # appid
+            'mch_id': self.MCHID,  # 商户号
+            'nonce_str': self.getNonceStr(),
+            'body': body,  # 商品描述
+            'out_trade_no': str(order_id),  # 商户订单号
+            'total_fee': str(int(total_fee)),
+            'spbill_create_ip': spbill_create_ip,  # 127.0.0.1
+            'trade_type': self.TRADE_TYPE,  # 交易类型
+            'notify_url': notify_url,  # 微信支付结果异步通知地址
+            'receipt': 'Y'
+        }
+        return self.params
+
+    def getNonceStr(self, length=32):
+        """生成随机字符串"""
+        import random
+        chars = "abcdefghijklmnopqrstuvwxyz0123456789"
+        strs = []
+        for x in range(length):
+            strs.append(chars[random.randrange(0, len(chars))])
+        return "".join(strs)
+
+    def key_value_url(self, value, urlencode):
+        """
+        将键值对转为 key1=value1&key2=value2
+        对参数按照key=value的格式,并按照参数名ASCII字典序排序
+        """
+        slist = sorted(value)
+        buff = []
+        for k in slist:
+            v = quote(value[k]) if urlencode else value[k]
+            buff.append("{0}={1}".format(k, v))
+
+        return "&".join(buff)
+
+    def get_sign(self, params):
+        """
+        生成sign
+        拼接API密钥
+        """
+        stringA = self.key_value_url(params, False)
+        stringSignTemp = stringA + '&key=' + self.APIKEY  # APIKEY, API密钥,需要在商户后台设置
+        sign = (hashlib.md5(stringSignTemp.encode("utf-8")).hexdigest()).upper()
+        params['sign'] = sign
+        return params
+
+    def get_req_xml(self):
+        """
+        拼接XML
+        """
+        self.get_sign(self.params)
+        xml = "<xml>"
+        for k, v in self.params.items():
+            # v = v.encode('utf8')
+            # k = k.encode('utf8')
+            xml += '<' + k + '>' + v + '</' + k + '>'
+        xml += "</xml>"
+        return xml.encode("utf-8")
+
+    def get_prepay_id(self):
+        """
+        请求获取prepay_id
+        """
+        xml = self.get_req_xml()
+        respone = requests.post(self.url, xml, headers={'Content-Type': 'application/xml'})
+        msg = respone.text.encode('ISO-8859-1').decode('utf-8')
+        xmlresp = xmltodict.parse(msg)
+        if xmlresp['xml']['return_code'] == 'SUCCESS':
+            if xmlresp['xml']['result_code'] == 'SUCCESS':
+                prepay_id = xmlresp['xml']['prepay_id']
+                self.params['prepay_id'] = prepay_id
+                self.params['package'] = "Sign=WXPay"
+                self.params['timestamp'] = str(int(time.time()))
+                return self.params
+            else:
+                return 'failure'
+        else:
+            return 'failure'
+
+    def re_finall(self):
+        """得到prepay_id后再次签名,返回给终端参数
+        """
+        self.get_prepay_id()
+        if self.error:
+            return
+        sign_again_params = {
+            'appid': self.params['appid'],
+            'noncestr': self.params['nonce_str'],
+            'package': self.params['package'],
+            'partnerid': self.params['mch_id'],
+            'timestamp': self.params['timestamp'],
+            'prepayid': self.params['prepay_id']
+        }
+        self.get_sign(sign_again_params)
+        sign_again_params['sign'] = sign_again_params['sign']
+        return sign_again_params  # 返回给app
+
+    def get_notifypay(self, data):
+        dictdata = dict(data)
+        _dictdata = dict(dictdata['xml'])
+        success = self.get_sign(_dictdata)
+        # print('success', success)
+        if success:
+            success.pop("sign", None)
+            success.pop("sign_type", None)
+            return success
+        else:
+            return None
+
+    @staticmethod
+    def xml_to_dict(params):
+        """
+        拼接XML
+        """
+        if not isinstance(params, dict):
+            return None
+        xml = "<xml>"
+        for k, v in params.items():
+            # v = v.encode('utf8')
+            # k = k.encode('utf8')
+            xml += '<' + k + '>' + v + '</' + k + '>'
+        xml += "</xml>"
+        return xml
+
+
+if __name__ == '__main__':
+    # 调用统一支付接口
+    # 订单id
+    order_id = '12345678903424'
+    # 描述信息
+    body = 'soober支付'
+    # 价格
+    total_fee = '50'
+    # 调用微信支付API的机器IP
+    spbill_create_ip = '127.0.0.1'
+    pay = WechatPayObject()
+    # 获取参数
+    parameter_dict = pay.get_parameter(order_id, body, total_fee, spbill_create_ip)
+    print('parameter_dict', parameter_dict)
+    # parameter_dict 参数中获取MWEB_URL 调转页面在路径后面添加redirect_url
+    # 统一调用接口
+    response = pay.re_finall()
+    # 回调函数
+    print('response', response)
+    # 调起支付接口