Browse Source

增加订单查询

chenjunkai 6 năm trước cách đây
mục cha
commit
8d0bba381a
3 tập tin đã thay đổi với 107 bổ sung91 xóa
  1. 34 90
      Controller/CloudVod.py
  2. 32 1
      Controller/Test.py
  3. 41 0
      Object/AliPayObject.py

+ 34 - 90
Controller/CloudVod.py

@@ -15,7 +15,7 @@ import json
 import math
 import time
 import urllib
-
+from Object.AliPayObject import AliPayObject
 import oss2
 import paypalrestsdk
 from aliyunsdkcore import client
@@ -24,11 +24,9 @@ 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 alipay import AliPay
 
 from Ansjer.config import BASE_DIR
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
-    SERVER_DOMAIN_SSL
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -122,7 +120,7 @@ class CloudVodView(View):
             elif operation == 'aliPayCreateOrder':
                 return self.do_pay_by_ali(request_dict, userID, response)
             elif operation == 'orderStatus':
-                return self.do_pay_status(request_dict,userID)
+                return self.do_pay_status(request_dict, userID)
             else:
                 return response.json(414)
 
@@ -132,29 +130,19 @@ class CloudVodView(View):
         signature = data["sign"]
         data.pop('sign')
         orderID = data['out_trade_no']
+
+        order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
+        if not order_qs.exists():
+            return response.json(404)
+
         print(json.dumps(data))
         print(signature)
         # verify
-
-        # app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
-        # alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
-        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
-        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
-        alipay = AliPay(
-            # appid="2016092200569234",
-            appid="2019041663958142",
-            app_notify_url=None,  # the default notify path
-            app_private_key_string=app_private_key_string,
-            alipay_public_key_string=alipay_public_key_string,
-            sign_type="RSA2",  # RSA or RSA2
-            debug=False  # False by default
-        )
+        aliPayObj = AliPayObject()
+        alipay = aliPayObj.conf()
         success = alipay.verify(data, signature)
         if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
             print("trade succeed")
-            order_qs = Order_Model.objects.filter(orderID=orderID,status=0)
-            if not order_qs.exists():
-                return response.json(404)
             nowTime = int(time.time())
             order_qs.update(status=1, updTime=nowTime)
             order_list = order_qs.values("UID", "rank_id", "channel")
@@ -232,20 +220,9 @@ class CloudVodView(View):
         nowTime = int(time.time())
         # 新增流程
         orderID = CommonService.createOrderID()
-        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
-        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
-        # app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
-        # alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
         try:
-            alipay = AliPay(
-                # appid="2016092200569234",
-                appid="2019041663958142",
-                app_notify_url=None,  # the default notify path
-                app_private_key_string=app_private_key_string,
-                alipay_public_key_string=alipay_public_key_string,
-                sign_type="RSA2",  # RSA or RSA2
-                debug=False  # False by default
-            )
+            aliPayObj = AliPayObject()
+            alipay = aliPayObj.conf()
             order_string = alipay.api_alipay_trade_wap_pay(
                 out_trade_no=orderID,
                 total_amount=price,
@@ -515,7 +492,7 @@ class CloudVodView(View):
                                            endTime=nowTime + int(day) * 3600 * 24,
                                            rank_id=rank,
                                            paypal=approval_url)
-                return response.json(0, {"redirectUrl": approval_url,"orderID":orderID})
+                return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
         return response.json(10, 'generate_order_false')
 
     #  生成设备sts上传授权
@@ -602,54 +579,6 @@ class CloudVodView(View):
             OssCrdModel.objects.create(uid=UID, channel=channel, data=json.dumps(res), addTime=now_time)
         return JsonResponse(status=200, data=res)
 
-    # # 获取设备回放列表
-    # def do_get_hls_list(self, request_dict, userID, response):
-    #     did = request_dict.get('did', None)
-    #     channel = request_dict.get('channel', None)
-    #     # 目录开始第一个
-    #     # marker = request_dict.get('marker', '')
-    #     daytime = request_dict.get('daytime', None)
-    #     hour = request_dict.get('hour', None)
-    #     if not did or not channel or not daytime:
-    #         return response.json(444, 'did,channel')
-    #     qs = Device_Info.objects.filter(userID_id=userID, id=did, isShare=False).values("UID")
-    #     if not qs.exists():
-    #         return response.json(12)
-    #     uid = qs[0]['UID']
-    #     now_time = CommonService.get_utc()
-    #     ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel, endTime__gte=now_time) \
-    #         .values('endTime', 'bucket__bucket', 'bucket__endpoint')
-    #     if not ubqs.exists():
-    #         return response.json(10, '未购买或过期')
-    #     if not ubqs.exists():
-    #         return response.json(10, '未开通云存储')
-    #     bucket_name = ubqs[0]["bucket__bucket"]
-    #     endpoint = ubqs[0]["bucket__endpoint"]
-    #     auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
-    #     bucket = oss2.Bucket(auth, endpoint, bucket_name)
-    #     vod_play_list = []
-    #     prefix = '{uid}/vod{channel}/{daytime}/'.format(uid=uid, channel=channel, daytime=daytime, hour=hour)
-    #
-    #     for obj in oss2.ObjectIterator(bucket=bucket, prefix=prefix, delimiter='/', max_keys=2):
-    #         # 通过is_prefix方法判断obj是否为文件夹。
-    #         if obj.is_prefix():  # 文件夹
-    #             print('directory: ' + obj.key)
-    #             ptime = obj.key.split('/')[3]
-    #             url = bucket.sign_url('GET', '{prefix}{name}.m3u8'.format(prefix=obj.key, name=ptime), 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_key = '{prefix}ts0.ts'.format(prefix=obj.key)
-    #             print(thumb_key)
-    #             thumb = bucket.sign_url('GET', thumb_key, 3600,
-    #                                     params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
-    #             vod_play_list.append({'name': ptime, 'sign_url': vod_play_url, 'thumb': thumb, 'sec': 0})
-    #         else:  # 文件
-    #             pass
-    #             # print('file: ' + obj.key)
-    #     return response.json(0, vod_play_list)
 
     def do_paypal_execute(self, request_dict, response):
         paymentId = request_dict.get('paymentId', None)
@@ -838,7 +767,7 @@ class CloudVodView(View):
                 {'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec'], 'id': vod['id']})
         return response.json(0, vod_play_list)
 
-    def do_pay_status(self,request_dict,userID):
+    def do_pay_status(self, request_dict, userID):
         orderID = request_dict.get('orderID', None)
         om_qs = Order_Model.objects.filter(userID_id=userID, orderID=orderID).values('status')
         response = HttpResponse()
@@ -998,10 +927,25 @@ class CloudVodView(View):
                 response.content = success_pay_content
                 return response
             else:
-                response = HttpResponse()
-                response.content = falil_pay_content
-                return response
+                # 如果未支付则调用查询订单是否支付成功
+                aliPayObj = AliPayObject()
+                alipay = aliPayObj.conf()
+                # check order status
+                print("now sleep 3s")
+                # time.sleep(3)
+                result = alipay.api_alipay_trade_query(out_trade_no=orderID)
+                if result.get("trade_status", "") == "TRADE_SUCCESS":
+                    print('paid')
+                    nowTime = int(time.time())
+                    om_qs.update(status=1, updTime=nowTime)
+
+                    response.content = success_pay_content
+                    return response
+                else:
+                    print("not paid...")
+                    response.content = falil_pay_content
+                    return response
+
         else:
-            response = HttpResponse()
             response.content = falil_pay_content
-            return response
+            return response

+ 32 - 1
Controller/Test.py

@@ -31,7 +31,38 @@ class Test(View):
         request_dict = request.GET
         # return self.do_apns(request_dict)
         # return self.do_get_putOss_url(request.GET)
-        return self.do_gcm_push(request)
+
+        # return self.do_gcm_push(request)
+        return self.do_alipay_query_status()
+
+    def do_alipay_query_status(self):
+        response = ResponseObject()
+        # app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
+        # alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
+        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
+        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
+        alipay = AliPay(
+            # appid="2016092200569234",
+            appid="2019041663958142",
+            app_notify_url=None,  # the default notify path
+            app_private_key_string=app_private_key_string,
+            alipay_public_key_string=alipay_public_key_string,
+            sign_type="RSA2",  # RSA or RSA2
+            debug=False  # False by default
+        )
+        # check order status
+        print("now sleep 3s")
+        # time.sleep(3)
+        result = alipay.api_alipay_trade_query(out_trade_no="20190424085757859937")
+        if result.get("trade_status", "") == "TRADE_SUCCESS":
+            paid = True
+            print(paid)
+            return response.json(0)
+        else:
+            print("not paid...")
+            return response.json(404)
+
+
     def do_apns(self,request_dict):
         token_val = request_dict.get('token_val',None)
         pem_path = os.path.join(BASE_DIR,'Ansjer/file/apns_pem/apns-dev.pem')

+ 41 - 0
Object/AliPayObject.py

@@ -0,0 +1,41 @@
+#!/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: 2019/4/24 17:50
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: AliPayObject.py
+@Contact: chanjunkai@163.com
+"""
+from Ansjer.config import BASE_DIR
+from alipay import AliPay
+
+
+class AliPayObject:
+
+    def __init__(self):
+        # janka测试环境
+        # self.app_pri_key = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
+        # self.ali_pub_key = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
+        # self.app_id="2016092200569234",
+
+        # 应用私钥
+        self.app_pri_key = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
+        # 支付宝公钥
+        self.ali_pub_key = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
+        self.app_id = '2019041663958142'
+
+    def conf(self):
+        alipay = AliPay(
+            appid="2019041663958142",
+            app_notify_url=None,  # the default notify path
+            app_private_key_string=self.app_pri_key,
+            alipay_public_key_string=self.ali_pub_key,
+            sign_type="RSA2",  # RSA or RSA2
+            debug=False  # False by default
+        )
+        return alipay