3
3
"""
4
4
5
5
import requests
6
+ import json
6
7
from requests .models import PreparedRequest
7
8
9
+ from urllib .parse import urljoin , urlencode
10
+
8
11
9
12
class BlockBeeHelper :
10
13
BLOCKBEE_URL = 'https://api.blockbee.io/'
@@ -47,7 +50,7 @@ def get_address(self):
47
50
if self .own_address is not None :
48
51
params ['address' ] = self .own_address
49
52
50
- _address = BlockBeeHelper .process_request (coin , endpoint = 'create' , params = params )
53
+ _address = BlockBeeHelper .process_request_get (coin , endpoint = 'create' , params = params )
51
54
if _address :
52
55
self .payment_address = _address ['address_in' ]
53
56
return _address
@@ -71,7 +74,7 @@ def get_logs(self):
71
74
'apikey' : self .api_key
72
75
}
73
76
74
- _logs = BlockBeeHelper .process_request (coin , endpoint = 'logs' , params = params )
77
+ _logs = BlockBeeHelper .process_request_get (coin , endpoint = 'logs' , params = params )
75
78
76
79
if _logs :
77
80
return _logs
@@ -82,16 +85,21 @@ def get_qrcode(self, value='', size=300):
82
85
if self .coin is None :
83
86
return None
84
87
88
+ address = self .payment_address
89
+
90
+ if not address :
91
+ address = self .get_address ().get ('address_in' )
92
+
85
93
params = {
86
- 'address' : self . payment_address ,
94
+ 'address' : address ,
87
95
'size' : size ,
88
96
'apikey' : self .api_key
89
97
}
90
98
91
99
if value :
92
100
params ['value' ] = value
93
101
94
- _qrcode = BlockBeeHelper .process_request (self .coin , endpoint = 'qrcode' , params = params )
102
+ _qrcode = BlockBeeHelper .process_request_get (self .coin , endpoint = 'qrcode' , params = params )
95
103
96
104
if _qrcode :
97
105
return _qrcode
@@ -108,7 +116,7 @@ def get_conversion(self, from_coin, value, api_key):
108
116
'apikey' : api_key
109
117
}
110
118
111
- _value = BlockBeeHelper .process_request (self .coin , endpoint = 'convert' , params = params )
119
+ _value = BlockBeeHelper .process_request_get (self .coin , endpoint = 'convert' , params = params )
112
120
113
121
if _value :
114
122
return _value
@@ -120,7 +128,7 @@ def get_info(coin, api_key):
120
128
if api_key is None :
121
129
raise Exception ("API Key Missing" )
122
130
123
- _info = BlockBeeHelper .process_request (coin , endpoint = 'info' , params = {
131
+ _info = BlockBeeHelper .process_request_get (coin , endpoint = 'info' , params = {
124
132
'apikey' : api_key
125
133
})
126
134
@@ -161,33 +169,110 @@ def get_estimate(coin, addresses=1, priority='default', api_key=''):
161
169
'apikey' : api_key
162
170
}
163
171
164
- _estimate = BlockBeeHelper .process_request (coin , endpoint = 'estimate' , params = params )
172
+ _estimate = BlockBeeHelper .process_request_get (coin , endpoint = 'estimate' , params = params )
165
173
166
174
if _estimate :
167
175
return _estimate
168
176
169
177
return None
170
178
171
179
@staticmethod
172
- def create_payout (coin , address , value , api_key = '' ):
173
- if api_key is None :
174
- raise Exception ("API Key Missing" )
180
+ def create_payout (coin , payout_requests , api_key , process = False ):
181
+ if not payout_requests :
182
+ raise ValueError ('No requests provided' )
183
+
184
+ body = {'outputs' : payout_requests }
185
+
186
+ endpoint = 'payout/request/bulk'
187
+
188
+ if process :
189
+ endpoint = endpoint + '/process'
190
+
191
+ _payout = BlockBeeHelper .process_request_post (coin , endpoint , api_key , body , True )
192
+
193
+ if _payout .get ('status' ) == 'success' :
194
+ return _payout
195
+
196
+ return None
197
+
198
+ @staticmethod
199
+ def list_payouts (coin , status = 'all' , page = 1 , api_key = '' , payout_request = False ):
200
+ if not api_key :
201
+ return None
175
202
176
203
params = {
177
- 'value ' : value ,
178
- 'address ' : address ,
179
- 'apikey ' : api_key
204
+ 'apikey ' : api_key ,
205
+ 'status ' : status ,
206
+ 'page ' : page
180
207
}
181
208
182
- _payout = BlockBeeHelper .process_request (coin , endpoint = 'payout/request/create' , params = params )
209
+ endpoint = 'payout/list'
210
+
211
+ if payout_request :
212
+ endpoint = 'payout/request/list'
213
+
214
+ _payouts = BlockBeeHelper .process_request_get (coin , endpoint , params )
215
+
216
+ if _payouts .get ('status' ) == 'success' :
217
+ return _payouts
218
+
219
+ return None
220
+
221
+ @staticmethod
222
+ def get_payout_wallet (coin , api_key , balance = False ):
223
+ wallet = BlockBeeHelper .process_request_get (coin , 'payout/address' , {'apikey' : api_key })
224
+
225
+ if wallet .get ('status' ) != 'success' :
226
+ return None
227
+
228
+ output = {'address' : wallet .get ('address' )}
229
+
230
+ if balance :
231
+ wallet_balance = BlockBeeHelper .process_request_get (coin , 'payout/balance' , {'apikey' : api_key })
232
+
233
+ if wallet_balance .get ('status' ) == 'success' :
234
+ output ['balance' ] = wallet_balance .get ('balance' )
235
+
236
+ return output
183
237
184
- if _payout :
238
+ @staticmethod
239
+ def create_payout_by_ids (api_key , payout_ids ):
240
+ if not payout_ids :
241
+ raise ValueError ('Please provide the Payout Request(s) ID(s)' )
242
+
243
+ _payout = BlockBeeHelper .process_request_post ('' , 'payout/create' , api_key , {'request_ids' : ',' .join (map (str , payout_ids ))})
244
+
245
+ if _payout .get ('status' ) == 'success' :
185
246
return _payout
186
247
187
248
return None
188
249
189
250
@staticmethod
190
- def process_request (coin = '' , endpoint = '' , params = None ):
251
+ def process_payout (api_key , payout_id ):
252
+ if not payout_id :
253
+ return None
254
+
255
+ _process = BlockBeeHelper .process_request_post ('' , 'payout/process' , api_key , {'payout_id' : payout_id })
256
+
257
+ if _process .get ('status' ) == 'success' :
258
+ return _process
259
+
260
+ return None
261
+
262
+ @staticmethod
263
+ def check_payout_status (api_key , payout_id ):
264
+ if not id :
265
+ raise ValueError ('Please provide the Payout ID' )
266
+
267
+ _status = BlockBeeHelper .process_request_post ('' , 'payout/status' , api_key , {'payout_id' : payout_id })
268
+
269
+ if _status .get ('status' ) == 'success' :
270
+ return _status
271
+
272
+ return None
273
+
274
+ @staticmethod
275
+ def process_request_get (coin = '' , endpoint = '' , params = None ):
191
276
if coin != '' :
192
277
coin += '/'
193
278
@@ -202,3 +287,28 @@ def process_request(coin='', endpoint='', params=None):
202
287
)
203
288
204
289
return response .json ()
290
+
291
+ @staticmethod
292
+ def process_request_post (coin = '' , endpoint = '' , apiKey = '' , body = None , isJson = False ):
293
+ if coin :
294
+ coin_path = coin .replace ('_' , '/' ) + '/'
295
+ else :
296
+ coin_path = ''
297
+
298
+ url = urljoin (BlockBeeHelper .BLOCKBEE_URL , f"{ coin_path } { endpoint } /" )
299
+ url += '?' + urlencode ({'apikey' : apiKey })
300
+
301
+ headers = {
302
+ 'Host' : BlockBeeHelper .BLOCKBEE_HOST ,
303
+ }
304
+
305
+ if isJson :
306
+ headers ['Content-Type' ] = 'application/json'
307
+ data = json .dumps (body )
308
+ else :
309
+ headers ['Content-Type' ] = 'application/x-www-form-urlencoded'
310
+ data = urlencode (body )
311
+
312
+ response = requests .post (url , headers = headers , data = data )
313
+
314
+ return response .json ()
0 commit comments