-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbank_aggregators.py
188 lines (158 loc) · 5.53 KB
/
bank_aggregators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
import json
from datetime import datetime
from requests import request
from constants import GET, POST, PUT
from generate_access_token import generate_access_token
# Add this to nordea
# self.header['Authorization']= 'Bearer {}'.format(generate_access_token),
class BaseBankAggregator(object):
def __init__(self, name, headers, base_url):
self.name = name
self.headers = headers
self.base_url = base_url
def _request(self, method, url, data=None):
"""Custom request tquests types one point solution """
response = request(method=method, url=url, headers=self.headers, json=data)
if not response.ok:
return None
return response.json()
class OPAggregator(BaseBankAggregator):
def get_all_accounts(self):
"""
:return:
:rtype:get
"""
url = '{}/v1/accounts'.format(self.base_url)
response = self._request(GET, url)
return response
def get_account_by_id(self, account_id):
"""
:param account_id:
:type account_id:
:return:
:rtype: get
"""
url = '{}/v1/accounts/{}'.format(self.base_url, account_id)
response = self._request(GET, url)
return response
def get_all_transaction_of_an_account(self, account_id):
"""
:param account_id:
:type account_id:
:return:
:rtype: get
"""
url = '{}/v1/accounts/{}/transactions'.format(self.base_url, account_id)
response = self._request(GET, url)
return response
def get_transaction_detail(self, account_id, transaction_id):
"""
:param account_id:
:type account_id:
:param transaction_id:
:type transaction_id:
:return:
:rtype: get
"""
url = '{}/v1/accounts/{}/transactions/{}'.format(self.base_url, account_id, transaction_id)
response = self._request(GET, url)
return response
def initiate_payment(self,
sender_iban,
receiver_iban,
amount=0,
subject='Test',
currency='EUR',
receiver_bic=None,
receiver_name=None,
):
"""
:param sender_iban:
:param receiver_iban:
:param amount: int
:param subject: string
:param currency: 'EUR/USD etc
:param receiver_bic: string
:param receiver_name: string
:return: json response
"""
payload = {
"amount": amount,
"subject": subject,
"currency": currency,
"payerIban": sender_iban,
"valueDate": datetime.utcnow().isoformat(),
"receiverBic": "string",
"receiverIban": receiver_iban,
"receiverName": "string"
}
url = '{}/v1/payments/initiate'.format(self.base_url)
response = self._request(POST, url, data=payload)
return response
def confirm_payment(self, payment_id):
"""
Confirms initiated payment
:param payment_id:
:return:
"""
payload = {
'paymentId': payment_id
}
url = '{}/v1/payments/confirm'.format(self.base_url)
response = self._request(POST, url, data=payload)
return response
class NordeaAggregator(BaseBankAggregator):
def __init__(self, name, headers, base_url):
super(NordeaAggregator, self).__init__(name, headers, base_url)
self.headers['Authorization'] = 'Bearer {}'.format(generate_access_token())
def get_all_accounts(self):
url = '{}v2/accounts'.format(self.base_url)
response = self._request(GET, url)
return response
def get_account_by_id(self, account_id):
url = '{}v2/accounts/{}'.format(self.base_url, account_id)
response = self._request(GET, url)
return response
def get_all_transactions_of_an_account(self, account_id):
url = 'v2/accounts/{}/transactions'
response = self._request(GET, url)
return response
def get_all_payments(self):
url = 'v2/payments/sepa'
response = self._request(GET, url)
return response
def get_payment_by_id(self, payment_id):
url = 'v2/payments/sepa/{}'.format(payment_id)
response = self._request(GET, url)
return response
def initiate_payment(self,
creditor_account_type,
creditor_account,
debtor_account,
message='default',
amount=0,
currency='EUR',
creditor_name='',
):
payload = {
"amount": amount,
"creditor": {
"account": {
"_type": creditor_account_type,
"value": creditor_account
},
"message": message,
"name": creditor_name,
},
"currency": currency,
"debtor": {
"_accountId": debtor_account
}
}
url = '{}v2/payments/sepa'.format(self.base_url)
response = self._request(POST, url, data=json.dumps(payload))
return response
def confirm_payment(self, payment_id):
url = '{}v2/payments/sepa/{}/confirm'.format(self.base_url, payment_id)
response = self._request(PUT, url)
return response