Browse Source

新增PayPalUtil

zhangdongming 1 năm trước cách đây
mục cha
commit
35bd414fb5
2 tập tin đã thay đổi với 87 bổ sung2 xóa
  1. 24 2
      Controller/TestApi.py
  2. 63 0
      Object/utils/PayPalUtil.py

+ 24 - 2
Controller/TestApi.py

@@ -55,6 +55,7 @@ from Object.m3u8generate import PlaylistGenerator
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
+from Object.utils.PayPalUtil import PayPalService
 from Service.CommonService import CommonService
 from Service.VodHlsService import SplitVodHlsObject
 from Object.ApschedulerObject import ApschedulerObject
@@ -153,6 +154,8 @@ class testView(View):
             return self.add_date_job(request_dict, response)
         elif operation == "del_apscheduler":  # 删除定时任务
             return self.del_apscheduler_job(request_dict, response)
+        elif operation == 'getPayPalTransactions':  # 删除定时任务
+            return self.get_pay_pal_transactions(request_dict, response)
         else:
             return response.json(414)
 
@@ -651,7 +654,8 @@ class testView(View):
             '20230918061527058694',
             '20230918062701462434']
         for order_id in order_id_list:
-            paypal_webhook_event_qs = PaypalWebHookEvent.objects.filter(~Q(trade_no=''), orderID=order_id).values('trade_no')
+            paypal_webhook_event_qs = PaypalWebHookEvent.objects.filter(~Q(trade_no=''), orderID=order_id).values(
+                'trade_no')
             if paypal_webhook_event_qs.exists():
                 trade_no = paypal_webhook_event_qs[0]['trade_no']
                 Order_Model.objects.filter(orderID=order_id).update(trade_no=trade_no)
@@ -1050,4 +1054,22 @@ class testView(View):
         task_id = request_dict.get('task_id', None)
         apscheduler_obj = ApschedulerObject()
         apscheduler_obj.del_job(task_id)
-        return response.json(0)
+        return response.json(0)
+
+    @classmethod
+    def get_pay_pal_transactions(cls, request_dict, response):
+        from Ansjer.config import PAYPAL_CRD
+        try:
+            params = (
+                ('start_date', '2023-09-15T00:00:00-0800'),
+                ('end_date', '2023-09-15T23:59:59-0800'),
+                ('fields', 'all'),
+                ('page_size', '20'),
+                ('page', '1'),
+            )
+            result = PayPalService(PAYPAL_CRD['client_id'], PAYPAL_CRD['client_secret']).get_transactions(params)
+            return response.json(0, result)
+        except Exception as e:
+            LOGGER.info('UnicomManageControllerView.transfer_device_package, errLine:{}, errMsg:{}'.format(
+                e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)

+ 63 - 0
Object/utils/PayPalUtil.py

@@ -0,0 +1,63 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : PayPalUtil.py
+@Time    : 2022/9/1 14:41
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+
+import requests
+
+
+class PayPalService:
+    API_BASE_URL = 'https://api-m.paypal.com'
+    CONTENT_TYPE = 'application/json'
+
+    def __init__(self, client_id, client_secret):
+        self.auth = client_id, client_secret
+        self.headers = {
+            'Content-Type': self.CONTENT_TYPE,
+        }
+        self.access_token = self._fetch_access_token()
+
+    def _fetch_access_token(self):
+        data = {'grant_type': 'client_credentials'}
+        url = f'{self.API_BASE_URL}/v1/oauth2/token'
+
+        response = requests.post(url, data=data, headers=self.headers, auth=self.auth)
+        assert response.status_code == 200
+        return response.json()['access_token']
+
+    def _get_headers(self):
+        headers = {
+            'Authorization': 'Bearer ' + self.access_token,
+            'Content-Type': self.CONTENT_TYPE,
+        }
+        return headers
+
+    def get_transactions(self, params):
+        """
+        交易历史搜索
+        api:https://developer.paypal.com/docs/api/transaction-search/v1/
+        @return: 交易历史列表
+        """
+        headers = self._get_headers()
+        response = requests.get(f'{self.API_BASE_URL}/v1/reporting/transactions', headers=headers,
+                                params=params)
+        # 解析响应
+        assert response.status_code == 200
+        return response.json()
+
+
+if __name__ == '__main__':
+    pass
+    # params = (
+    #     ('start_date', '2023-09-15T00:00:00-0800'),
+    #     ('end_date', '2023-09-15T23:59:59-0800'),
+    #     ('fields', 'all'),
+    #     ('page_size', '20'),
+    #     ('page', '1'),
+    # )
+    # trans_res = PayPalService().get_transactions(params)
+    # print(trans_res)