11import requests
2+ try :
3+ from classes import *
4+ except :
5+ from classes import *
26
37MAIN_API_URL = "https://pay.crypt.bot/api/"
48TEST_API_URL = "https://testnet-pay.crypt.bot/api/"
@@ -18,19 +22,24 @@ class pyCryptoPayAPI:
1822 Crypto Pay API Client
1923 """
2024
21- def __init__ (self , api_token , test_net = False , print_errors = False , timeout = None ):
25+ def __init__ (self , api_token , result_as_class = None , test_net = False , print_errors = False , timeout = None ):
2226 """
2327 Create the pyCryptoPayAPI instance.
2428
2529 :param api_token: API token obtained via @CryptoBot
30+ :param result_as_class: (Optional) If True, returns instances of classes, otherwise returns raw data
2631 :param test_net: (Optional) Use testnet instead of mainnet
2732 :param print_errors: (Optional) Print dumps on request errors
2833 :param timeout: (Optional) Request timeout
2934 """
3035 self .api_token = api_token
36+ self .result_as_class = result_as_class if result_as_class else False
3137 self .test_net = test_net
3238 self .print_errors = print_errors
3339 self .timeout = timeout
40+ if result_as_class is None :
41+ print ("Deprecation warning! The 'result_as_class' parameter should be set to False or True, default behaviour will be changed to 'True' in future versions!" )
42+
3443
3544 def __request (self , method , ** kwargs ):
3645 if kwargs :
@@ -92,20 +101,25 @@ def get_me(self):
92101 :return: On success, returns basic information about an app.
93102 """
94103 method = "getMe"
95- return self .__request (method ).get ("result" )
104+ result = self .__request (method ).get ("result" )
105+ return Me (result ) if self .result_as_class else result
96106
97107 def create_invoice (
98- self , asset , amount ,
108+ self , asset = None , amount = 0 ,
99109 description = None , hidden_message = None ,
100110 paid_btn_name = None , paid_btn_url = None , payload = None ,
101111 allow_comments = None , allow_anonymous = None ,
102- expires_in = None
112+ expires_in = None , currency_type = None , fiat = None ,
113+ accepted_assets = None , swap_to = None
103114 ):
104115 """
105116 createInvoice method
106117 Use this method to create a new invoice.
107118
119+ :param currency_type: (String) Optional. Type of the price, can be “crypto” or “fiat”. Defaults to crypto.
108120 :param asset: (String) Currency code. Supported assets: “USDT”, “TON”, “BTC”, “ETH”, “BNB”, “TRX”, “BUSD” and “USDC”.
121+ :param fiat: (String) Optional. Required if currency_type is “fiat”. Fiat currency code. Supported fiat currencies: “USD”, “EUR”, “RUB”, “BYN”, “UAH”, “GBP”, “CNY”, “KZT”, “UZS”, “GEL”, “TRY”, “AMD”, “THB”, “INR”, “BRL”, “IDR”, “AZN”, “AED”, “PLN” and “ILS".
122+ :param accepted_assets: (String) Optional. List of cryptocurrency alphabetic codes separated by comma. Assets which can be used to pay the invoice. Available only if currency_type is “fiat”. Supported assets: “USDT”, “TON”, “BTC”, “ETH”, “BNB”, “TRX” and “USDC” (and “JET” for testnet). Defaults to all currencies.
109123 :param amount: (String) Amount of the invoice in float. For example: 125.50
110124 :param description: (String) Optional. Description for the invoice. User will see this description when they pay the invoice. Up to 1024 characters.
111125 :param hidden_message: (String) Optional. Text of the message that will be shown to a user after the invoice is paid. Up to 2o48 characters.
@@ -114,6 +128,7 @@ def create_invoice(
114128 openChannel – “View Channel”
115129 openBot – “Open Bot”
116130 callback – “Return”
131+ :param swap_to : (String) Optional. The asset that will be attempted to be swapped into after the user makes a payment (the swap is not guaranteed). Supported assets: "USDT", "TON", "TRX", "ETH", "SOL", "BTC", "LTC".
117132 :param paid_btn_url: (String) Optional. Required if paid_btn_name is used.URL to be opened when the button is pressed. You can set any success link (for example, a link to your bot). Starts with https or http.
118133 :param payload: (String) Optional. Any data you want to attach to the invoice (for example, user ID, payment ID, ect). Up to 4kb.
119134 :param allow_comments: (Boolean) Optional. Allow a user to add a comment to the payment. Default is true.
@@ -123,15 +138,24 @@ def create_invoice(
123138 """
124139 method = "createInvoice"
125140 params = {
126- "asset" : asset ,
127- "amount" : amount ,
141+ "amount" : amount if amount else 0 ,
128142 }
143+ if currency_type :
144+ params ["currency_type" ] = currency_type
145+ if asset :
146+ params ["asset" ] = asset
147+ if fiat :
148+ params ["fiat" ] = fiat
149+ if accepted_assets :
150+ params ["accepted_assets" ] = accepted_assets
129151 if description :
130152 params ["description" ] = description
131153 if hidden_message :
132154 params ["hidden_message" ] = hidden_message
133155 if paid_btn_name :
134156 params ["paid_btn_name" ] = paid_btn_name
157+ if swap_to :
158+ params ["swap_to" ] = swap_to
135159 if paid_btn_url :
136160 params ["paid_btn_url" ] = paid_btn_url
137161 if payload :
@@ -142,7 +166,8 @@ def create_invoice(
142166 params ["allow_anonymous" ] = allow_anonymous
143167 if expires_in :
144168 params ["expires_in" ] = expires_in
145- return self .__request (method , ** params ).get ("result" )
169+ result = self .__request (method , ** params ).get ("result" )
170+ return Invoice (result ) if self .result_as_class else result
146171
147172 def delete_invoice (self , invoice_id ):
148173 """
@@ -156,8 +181,8 @@ def delete_invoice(self, invoice_id):
156181 params = {
157182 "invoice_id" : invoice_id
158183 }
159- return self .__request (method , ** params ).get ("result" )
160-
184+ result = self .__request (method , ** params ).get ("result" )
185+ return result
161186
162187 def transfer (
163188 self , user_id , asset , amount , spend_id ,
@@ -186,16 +211,18 @@ def transfer(
186211 params ["comment" ] = comment
187212 if disable_send_notification is not None :
188213 params ["disable_send_notification" ] = disable_send_notification
189- return self .__request (method , ** params ).get ("result" )
214+ result = self .__request (method , ** params ).get ("result" )
215+ return Transfer (result ) if self .result_as_class else result
190216
191217 def get_invoices (
192- self , asset = None , invoice_ids = None , status = None , offset = None , count = None , return_items = False
218+ self , asset = None , fiat = None , invoice_ids = None , status = None , offset = None , count = None , return_items = False
193219 ):
194220 """
195221 getInvoices method
196222 Use this method to get invoices of your app.
197223
198- :param asset: (String) Optional. Currency codes separated by comma. Supported assets: “USDT”, “TON”, “BTC”, “ETH”, “BNB”, “TRX”, “BUSD” and “USDC”. Defaults to all assets.
224+ :param asset: (String) Optional. Cryptocurrency alphabetic code. Supported assets: “USDT”, “TON”, “BTC”, “ETH”, “LTC”, “BNB”, “TRX” and “USDC” (and “JET” for testnet). Defaults to all currencies.
225+ :param fiat: (String) Optional. Fiat currency code. Supported fiat currencies: “USD”, “EUR”, “RUB”, “BYN”, “UAH”, “GBP”, “CNY”, “KZT”, “UZS”, “GEL”, “TRY”, “AMD”, “THB”, “INR”, “BRL”, “IDR”, “AZN”, “AED”, “PLN” and “ILS". Defaults to all currencies.
199226 :param invoice_ids: (String) Optional. Invoice IDs separated by comma.
200227 :param status: (String) Optional. Status of invoices to be returned. Available statuses: “active” and “paid”. Defaults to all statuses.
201228 :param offset: (Number) Optional. Offset needed to return a specific subset of invoices. Default is 0.
@@ -207,6 +234,8 @@ def get_invoices(
207234 params = {}
208235 if asset :
209236 params ["asset" ] = asset
237+ if fiat :
238+ params ["fiat" ] = fiat
210239 if invoice_ids :
211240 params ["invoice_ids" ] = invoice_ids
212241 if status :
@@ -216,13 +245,17 @@ def get_invoices(
216245 if count :
217246 params ["count" ] = count
218247 if params :
219- res = self .__request (method , ** params ).get ("result" )
248+ result = self .__request (method , ** params ).get ("result" )
220249 else :
221- res = self .__request (method ).get ("result" )
222- if res and return_items :
223- return res .get ("items" )
250+ result = self .__request (method ).get ("result" )
251+ if not result :
252+ return [] if return_items else None
253+ elif self .result_as_class :
254+ return [Invoice (item ) for item in result .get ("items" , [])]
255+ elif return_items :
256+ return result .get ("items" )
224257 else :
225- return res
258+ return result
226259
227260 def get_checks (
228261 self , asset = None , check_ids = None , status = None , offset = None , count = None , return_items = True
@@ -252,23 +285,28 @@ def get_checks(
252285 if count :
253286 params ["count" ] = count
254287 if params :
255- res = self .__request (method , ** params ).get ("result" )
288+ result = self .__request (method , ** params ).get ("result" )
256289 else :
257- res = self .__request (method ).get ("result" )
258- if res and return_items :
259- return res .get ("items" )
290+ result = self .__request (method ).get ("result" )
291+ if not result :
292+ return [] if return_items else None
293+ elif self .result_as_class :
294+ return [Check (item ) for item in result .get ("items" , [])]
295+ elif return_items :
296+ return result .get ("items" )
260297 else :
261- return res
298+ return result
262299
263300 def get_transfers (
264- self , asset = None , transfer_ids = None , offset = None , count = None , return_items = True
301+ self , asset = None , transfer_ids = None , spend_id = None , offset = None , count = None , return_items = True
265302 ):
266303 """
267304 getTransfers method
268305 Use this method to get transfers created by your app.
269306
270307 :param asset: (String) Optional. Cryptocurrency alphabetic code.
271308 :param transfer_ids: (String) Optional. List of transfer IDs separated by comma.
309+ :param spend_id : (String) Optional. Unique UTF-8 transfer string.
272310 :param offset: (Number) Optional. Offset needed to return a specific subset of transfers. Defaults to 0.
273311 :param count: (Number) Optional. Number of transfers to be returned. Values between 1-1000 are accepted. Defaults to 100.
274312 :param return_items: (Boolean) Optional. Return items instead of the whole response. Default is True.
@@ -280,18 +318,24 @@ def get_transfers(
280318 params ["asset" ] = asset
281319 if transfer_ids :
282320 params ["transfer_ids" ] = transfer_ids
321+ if spend_id :
322+ params ["spend_id" ] = spend_id
283323 if offset :
284324 params ["offset" ] = offset
285325 if count :
286326 params ["count" ] = count
287327 if params :
288- res = self .__request (method , ** params ).get ("result" )
328+ result = self .__request (method , ** params ).get ("result" )
289329 else :
290- res = self .__request (method ).get ("result" )
291- if res and return_items :
292- return res .get ("items" )
330+ result = self .__request (method ).get ("result" )
331+ if not result :
332+ return [] if return_items else None
333+ elif self .result_as_class :
334+ return [Transfer (item ) for item in result .get ("items" , [])]
335+ elif return_items :
336+ return result .get ("items" )
293337 else :
294- return res
338+ return result
295339
296340 def get_balance (self ):
297341 """
@@ -301,7 +345,13 @@ def get_balance(self):
301345 :return: Returns array of assets.
302346 """
303347 method = "getBalance"
304- return self .__request (method ).get ("result" )
348+ result = self .__request (method ).get ("result" )
349+ if not result :
350+ return []
351+ elif self .result_as_class :
352+ return [Balance (item ) for item in result ]
353+ else :
354+ return result
305355
306356 def get_exchange_rates (self ):
307357 """
@@ -311,7 +361,13 @@ def get_exchange_rates(self):
311361 :return: Returns array of currencies.
312362 """
313363 method = "getExchangeRates"
314- return self .__request (method ).get ("result" )
364+ result = self .__request (method ).get ("result" )
365+ if not result :
366+ return []
367+ elif self .result_as_class :
368+ return [ExchangeRate (item ) for item in result ]
369+ else :
370+ return result
315371
316372 def get_currencies (self ):
317373 """
@@ -345,7 +401,8 @@ def create_check(
345401 params ["pin_to_user_id" ] = pin_to_user_id
346402 if pin_to_username :
347403 params ["pin_to_username" ] = pin_to_username
348- return self .__request (method , ** params ).get ("result" )
404+ result = self .__request (method , ** params ).get ("result" )
405+ return Check (result ) if self .result_as_class else result
349406
350407 def delete_check (self , check_id ):
351408 """
@@ -361,3 +418,21 @@ def delete_check(self, check_id):
361418 "check_id" : check_id
362419 }
363420 return self .__request (method , ** params ).get ("result" )
421+
422+ def get_stats (self , start_at = None , end_at = None ):
423+ """
424+ getStats method
425+ Use this method to get app statistics.
426+
427+ :param start_at: (DateTime/String) Optional. Date from which start calculating statistics in ISO 8601 format. Defaults is current date minus 24 hours.
428+ :param end_at: (DateTime/String) Optional. The date on which to finish calculating statistics in ISO 8601 format. Defaults is current date.
429+ :return: Returns AppStats.
430+ """
431+ method = "getStats"
432+ params = {}
433+ if start_at :
434+ params ["start_at" ] = start_at
435+ if end_at :
436+ params ["end_at" ] = end_at
437+ result = self .__request (method , ** params ).get ("result" )
438+ return AppStats (result ) if self .result_as_class else result
0 commit comments