Эх сурвалжийг харах

添加paypal的退款功能

tanghongbin 4 жил өмнө
parent
commit
5efcc3b9df

+ 46 - 1
Controller/CloudVod.py

@@ -1270,7 +1270,7 @@ class CloudVodView(View):
 
         order = order_qs[0]
         if refund_amount > order.price:
-            return response.json(10, '退款金额大于订单价格')
+            return response.json(801)
 
         try:
             # extra = {
@@ -1293,6 +1293,51 @@ class CloudVodView(View):
             print(repr(e))
             return response.json(10, repr(e))
 
+    def do_paypal_refund(self, request_dict, userID, response):
+        out_trade_no = request_dict.get('out_trade_no', None)
+        refund_amount = request_dict.get('refund_amount', None)
+
+        order_qs = Order_Model.objects.filter(orderID=out_trade_no, userID__userID=userID)
+
+        if not order_qs.exists():
+            return response.json(800)
+
+        order = order_qs[0]
+
+        refund_amount = float(refund_amount)
+        if order.price < refund_amount:
+            return response.json(801)
+
+        paypalrestsdk.configure(PAYPAL_CRD)
+        payment = paypalrestsdk.Payment.find(order.trade_no)
+        transactions = payment['transactions']
+        transaction = transactions[0]
+        related_resources = transaction['related_resources']
+        if len(related_resources) > 0:
+            related_resource = related_resources[0]
+            sale = related_resource['sale']
+            id = sale['id']
+
+            if sale['state'] == 'completed':
+                paypalSale = paypalrestsdk.Sale.find(id)
+                refund = paypalSale.refund({
+                    'amount': {
+                        'total': refund_amount,
+                        'currency': order.currency
+                    }
+                })
+
+                if refund.success():
+                    return response.json(0)
+                else:
+                    return response.json(10, refund.error)
+            elif sale['state'] == 'refunded':
+                return response.json(804)
+        else:
+            return response.json(804)
+
+
+
 
 def deleteVodHls(request):
     response = ResponseObject()

+ 1 - 1
Controller/OrderContrller.py

@@ -294,7 +294,7 @@ class OrderView(View):
             sale = related_resource['sale']
             if sale['state'] == 'completed':
                 order.status = 1
-            elif sale['state'] == 'refund':
+            elif sale['state'] == 'refunded':
                 order.status = 3
 
             order.updTime = int(time.time())

+ 4 - 0
Object/ResponseObject.py

@@ -57,7 +57,9 @@ class ResponseObject(object):
             713: 'Storage rules cannot be changed during the validity period',
             717: 'Authorization expires',
             800: 'Order does not exist',
+            801: 'The refund amount cannot be greater than the order price',
             802: 'The order has been completed and cannot be cancelled',
+            804: 'Refund, please do not repeat the operation',
             900: 'There is no information about this version!',
             901: 'Getting URL failure!',
             902: 'No update!',
@@ -122,7 +124,9 @@ class ResponseObject(object):
             713: '有效期内不可更改存储规则',
             717: '授权过期',
             800: '订单不存在',
+            801: '退款金额不能大于订单价格',
             802: '订单已完成,不能撤销',
+            804: '订单已退款,请勿重复操作',
             900: '版本信息不存在',
             901: '获取链接失败',
             902: '无更新!',