1
1
import requests
2
2
import json
3
3
from typing import Optional
4
+ from .exceptions import *
4
5
5
6
token = ""
6
7
7
8
8
- def initiate_payment (tx_ref : str , amount : float , redirect_url : str , customer_name : str ,
9
- customer_email : str , currency : Optional [str ] = None , payment_options : Optional [str ] = None ,
10
- title : Optional [str ] = None , description : Optional [str ] = None ,
11
- customer_phone_number : Optional [str ] = None ,
12
- ) -> str :
13
- """This is used to initiate standard payments. It takes in the arguments and returns the url to redirect users for
14
- payments """
9
+ def initiate_payment (tx_ref : str , amount : float , redirect_url : str , customer_email : str ,
10
+ customer_name : Optional [str ] = None , currency : Optional [str ] = None ,
11
+ customer_phone_number : Optional [str ] = None , payment_options : Optional [str ] = None ,
12
+ title : Optional [str ] = None , description : Optional [str ] = None ) -> str :
13
+ """
14
+ This is used to initiate standard payments. It takes in the arguments and returns the url to redirect users for
15
+ payments
16
+ :param tx_ref: str
17
+ :param amount: float
18
+ :param redirect_url: str
19
+ :param customer_email: str
20
+ :param customer_name: Optional[str]
21
+ :param customer_phone_number: Optional[str]
22
+ :param currency: Optional[str]
23
+ :param payment_options: Optional[str]
24
+ :param title: Optional[str]
25
+ :param description: Optional[str]
26
+ :return: str
27
+ """
15
28
payment_url = "https://api.flutterwave.com/v3/payments"
29
+
30
+ if token == "" or token is None :
31
+ raise TokenException (token = token , message = "Authentication token absent" )
32
+ if customer_email is None or customer_email == "" :
33
+ raise CustomerDetailException (message = "Customer email not provided" )
34
+
16
35
payload = json .dumps ({
17
36
"tx_ref" : f"{ tx_ref } " ,
18
37
"amount" : f"{ amount } " ,
@@ -35,6 +54,10 @@ def initiate_payment(tx_ref: str, amount: float, redirect_url: str, customer_nam
35
54
}
36
55
37
56
response = requests .request (method = "POST" , url = payment_url , headers = headers , data = payload )
57
+ if response .status_code == 401 :
58
+ raise TokenException (token = token , message = 'Invalid token provided' )
59
+ if response .status_code == 400 :
60
+ raise Exception (f"{ response .json ()['message' ]} " )
38
61
link = response .json ()["data" ]["link" ]
39
62
return link
40
63
@@ -46,12 +69,21 @@ def get_payment_details(trans_id: str) -> dict:
46
69
"""
47
70
url = f"https://api.flutterwave.com/v3/transactions/{ trans_id } /verify"
48
71
72
+ if token == "" or token is None :
73
+ raise TokenException (token = token , message = "Authentication token absent" )
74
+
49
75
payload = {}
50
76
headers = {
51
77
'Authorization' : f'Bearer { token } '
52
78
}
53
79
54
80
response = requests .request ("GET" , url , headers = headers , data = payload )
81
+ if response .status_code == 401 :
82
+ raise TokenException (token = token , message = 'Invalid token provided' )
83
+ if response .status_code == 400 :
84
+ raise TransactionDetailException (trans_id = trans_id , message = f"{ response .json ()['message' ]} " )
85
+ if response .status_code == 401 :
86
+ raise TransactionDetailException (trans_id = trans_id , message = response .json ()['message' ])
55
87
return dict (response .json ())
56
88
57
89
@@ -63,7 +95,8 @@ def trigger_mpesa_payment(tx_ref: str, amount: float, currency: str, phone_numbe
63
95
in the dashboard.
64
96
"""
65
97
url = "https://api.flutterwave.com/v3/charges?type=mpesa"
66
-
98
+ if token == "" or token is None :
99
+ raise TokenException (token = token , message = "Authentication token absent" )
67
100
payload = json .dumps ({
68
101
"tx_ref" : f"{ tx_ref } " ,
69
102
"amount" : f"{ amount } " ,
@@ -78,6 +111,9 @@ def trigger_mpesa_payment(tx_ref: str, amount: float, currency: str, phone_numbe
78
111
}
79
112
80
113
response = requests .request ("POST" , url , headers = headers , data = payload )
114
+ if response .status_code == 401 :
115
+ raise TokenException (token = token , message = 'Invalid token provided' )
116
+
81
117
return dict (response .json ())
82
118
83
119
@@ -119,6 +155,8 @@ def verify_bank_account_details(account_number: str, account_bank: str) -> dict:
119
155
:param account_bank: str
120
156
:return: dict
121
157
"""
158
+ if token == "" or token is None :
159
+ raise TokenException (token = token , message = "Authentication token absent" )
122
160
123
161
url = "https://api.flutterwave.com/v3/accounts/resolve"
124
162
@@ -142,6 +180,8 @@ def verify_card_details(card_bin: str) -> dict:
142
180
:return: dict
143
181
"""
144
182
url = f"https://api.flutterwave.com/v3/card-bins/{ card_bin } "
183
+ if token == "" or token is None :
184
+ raise TokenException (token = token , message = "Authentication token absent" )
145
185
146
186
payload = {}
147
187
headers = {
0 commit comments