zhangdongming 2 жил өмнө
parent
commit
b83e625d63
1 өөрчлөгдсөн 19 нэмэгдсэн , 14 устгасан
  1. 19 14
      Controller/CloudStorage.py

+ 19 - 14
Controller/CloudStorage.py

@@ -1877,8 +1877,9 @@ class CloudStorageView(View):
         if not all([order_id, refund_amount]):
             return response.json(444)
         try:
-            order_qs = Order_Model.objects.filter(orderID=order_id).values('status', 'payType', 'price',
-                                                                           'refunded_amount', 'currency', 'paymentID')
+            order_qs = Order_Model.objects.filter(orderID=order_id)\
+                .values('status', 'payType', 'price','refunded_amount',
+                        'currency', 'paymentID','trade_no')
             if not order_qs.exists():
                 return response.json(173)
 
@@ -1906,20 +1907,24 @@ class CloudStorageView(View):
             # 根据支付类型处理退款
             if pay_type == 1:  # PayPal
                 payment_id = order_qs[0]['paymentID']  # PayPal PAYMENT_ID
-                if not payment_id:
-                    return response.json(805)
+                trade_no = order_qs[0]['trade_no']
+                sale_id = ''
                 paypalrestsdk.configure(PAYPAL_CRD)
-                payment = paypalrestsdk.Payment.find(payment_id)
-                related_resources = payment['transactions'][0]['related_resources']
-                if not related_resources:
-                    return response.json(805)
-                sale = related_resources[0]['sale']
-                # 没退款过 'state' 不为 'completed' 或 已退款过但 'state' 不为 'partially_refunded'
-                if (refunded_amount == 0 and sale['state'] != 'completed') or (
-                        refunded_amount != 0 and sale['state'] != 'partially_refunded'):
-                    return response.json(805)
-                sale_id = sale['id']
+                if payment_id:
+                    payment = paypalrestsdk.Payment.find(payment_id)
+                    related_resources = payment['transactions'][0]['related_resources']
+                    if not related_resources:
+                        return response.json(805)
+                    sale = related_resources[0]['sale']
+                    # 没退款过 'state' 不为 'completed' 或 已退款过但 'state' 不为 'partially_refunded'
+                    if (refunded_amount == 0 and sale['state'] != 'completed') or (
+                            refunded_amount != 0 and sale['state'] != 'partially_refunded'):
+                        return response.json(805)
+                    sale_id = sale['id']
+                sale_id = sale_id if sale_id else trade_no
                 paypal_sale = paypalrestsdk.Sale.find(sale_id)
+                if not paypal_sale or paypal_sale['state'] != 'completed':
+                    return response.json(805)
                 refund = paypal_sale.refund({
                     'amount': {
                         'total': refund_amount,