Quellcode durchsuchen

Merge branch 'locatdev' into bin

# Conflicts:
#	Controller/CloudStorage.py
chenshibin vor 4 Jahren
Ursprung
Commit
f723b9a415
4 geänderte Dateien mit 359 neuen und 120 gelöschten Zeilen
  1. 2 1
      Ansjer/urls.py
  2. 180 114
      Controller/CloudStorage.py
  3. 5 5
      Controller/TestApi.py
  4. 172 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模式,新增设备表

+ 180 - 114
Controller/CloudStorage.py

@@ -18,6 +18,7 @@ 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
@@ -33,6 +34,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/'
 
@@ -218,8 +220,7 @@ class CloudStorageView(View):
         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,'不存在.')
+        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']
@@ -448,11 +449,16 @@ 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). \
             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"]
@@ -484,6 +490,7 @@ class CloudStorageView(View):
                 #     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(
@@ -495,6 +502,7 @@ class CloudStorageView(View):
                 #     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'. \
@@ -960,7 +968,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()
@@ -994,120 +1002,178 @@ class CloudStorageView(View):
                 else:
                     return response.json(10, '生成订单错误.')
 
-    # 生成体验订单
-    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)
+        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})
+            # 调起支付接口
 
-        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()
-        if pay_type == 0:
-            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)
+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()
 
-            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)
+        ub_cqs = UID_Bucket.objects.create(uid=UID, channel=channel, bucket_id=bucketId,
+                                           endTime=new_starTime + addTime)
+        uid_bucket_id = ub_cqs.id
+    exit()
 
-            # return response.json(0)
-            red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
-            return HttpResponseRedirect(red_url)
+    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)
+
+
+
+
+# 生成体验订单
+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()
+    if pay_type == 0:
+        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:
-            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, status=0)
+            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)
 
-            if not order_qs.exists():
-                return response.json(404)
+        # return response.json(0)
+        red_url = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
+        return HttpResponseRedirect(red_url)
+    else:
+        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, status=0)
 
-            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 JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
-            #                                       'result': {"redirectUrl": "体验版", "orderID": orderID},
-            #                                       'error_code': 0})
+        if not order_qs.exists():
+            return response.json(404)
+
+        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 JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
+        #                                       'result': {"redirectUrl": "体验版", "orderID": orderID},
+        #                                       'error_code': 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):

+ 172 - 0
Object/WechatPayObject.py

@@ -0,0 +1,172 @@
+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)
+    # 调起支付接口