add Payment

Co-Authored-By: itsdeka <dario.moceri@bitfinex.com>
This commit is contained in:
Davide Casale
2023-02-12 22:01:12 +01:00
parent c41c00259f
commit 917a4a8367
3 changed files with 61 additions and 14 deletions

View File

@@ -347,8 +347,26 @@ class RestAuthenticatedEndpoints(Middleware):
"limit": limit
}) ]
def get_invoice_count_stats(self, status: Literal["CREATED", "PENDING", "COMPLETED", "EXPIRED"], format: str) -> List[InvoiceCountStats]:
return [ InvoiceCountStats(**sub_data) for sub_data in self._POST("auth/r/ext/pay/invoice/stats/count", body={ "status": status, "format": format }) ]
def get_invoice_count_stats(self, status: Literal["CREATED", "PENDING", "COMPLETED", "EXPIRED"], format: str) -> List[InvoiceStats]:
return [ InvoiceStats(**sub_data) for sub_data in self._POST("auth/r/ext/pay/invoice/stats/count", body={ "status": status, "format": format }) ]
def get_invoice_earning_stats(self, currency: str, format: str) -> List[InvoiceEarningStats]:
return [ InvoiceEarningStats(**sub_data) for sub_data in self._POST("auth/r/ext/pay/invoice/stats/earning", body={ "currency": currency, "format": format }) ]
def get_invoice_earning_stats(self, currency: str, format: str) -> List[InvoiceStats]:
return [ InvoiceStats(**sub_data) for sub_data in self._POST("auth/r/ext/pay/invoice/stats/earning", body={ "currency": currency, "format": format }) ]
def complete_invoice(self, id: str, pay_currency: str, deposit_id: Optional[int] = None, ledger_id: Optional[int] = None) -> InvoiceSubmission:
return InvoiceSubmission.parse(self._POST("auth/w/ext/pay/invoice/complete", body={
"id": id, "payCcy": pay_currency, "depositId": deposit_id,
"ledgerId": ledger_id
}))
def expire_invoice(self, id: str) -> InvoiceSubmission:
return InvoiceSubmission.parse(self._POST("auth/w/ext/pay/invoice/expire", body={ "id": id }))
def get_currency_conversion_list(self) -> List[CurrencyConversion]:
return [
CurrencyConversion(
base_currency=sub_data["baseCcy"],
convert_currency=sub_data["convertCcy"],
created=sub_data["created"]
) for sub_data in self._POST("auth/r/ext/pay/settings/convert/list")
]

View File

@@ -564,20 +564,21 @@ class DerivativePositionCollateralLimits(_Type):
#endregion
#region Type hinting for models which are not serializable
@compose(dataclass, partial)
class InvoiceSubmission(_Type):
id: str
t: int
merchant_name: str
type: Literal["ECOMMERCE", "POS"]
duration: int
amount: float
currency: str
order_id: str
pay_currencies: List[str]
webhook: str
redirect_url: str
status: Literal["CREATED", "PENDING", "COMPLETED", "EXPIRED"]
customer_info: Optional["CustomerInfo"]
payment: Optional["Payment"]
invoices: List["Invoice"]
@classmethod
@@ -585,6 +586,9 @@ class InvoiceSubmission(_Type):
if "customer_info" in data and data["customer_info"] != None:
data["customer_info"] = CustomerInfo(**data["customer_info"])
if "payment" in data and data["payment"] != None:
data["payment"] = Payment(**data["payment"])
if "invoices" in data and data["invoices"] != None:
for index, invoice in enumerate(data["invoices"]):
data["invoices"][index] = Invoice(**invoice)
@@ -595,7 +599,6 @@ class InvoiceSubmission(_Type):
class CustomerInfo(_Type):
nationality: str
resid_country: str
resid_state: str
resid_city: str
resid_zip_code: str
resid_street: str
@@ -604,6 +607,23 @@ class CustomerInfo(_Type):
email: str
tos_accepted: bool
@compose(dataclass, partial)
class Payment(_Type):
transaction_id: str
amount: str
currency: str
method: str
status: str
confirmations: int
created: str
updated: str
deposit_id: int
ledger_id: int
force_completed: bool
amount_diff: str
additional_payments: JSON
additional_payment: JSON
@compose(dataclass, partial)
class Invoice(_Type):
amount: float
@@ -614,13 +634,14 @@ class Invoice(_Type):
ext: JSON
@dataclass
class InvoiceCountStats(_Type):
class InvoiceStats(_Type):
time: str
count: float
@dataclass
class InvoiceEarningStats(_Type):
time: str
count: float
class CurrencyConversion(_Type):
base_currency: str
convert_currency: str
created: int
#endregion

View File

@@ -20,17 +20,25 @@ customer_info = {
"email": "satoshi3@bitfinex.com"
}
print(bfx.rest.auth.submit_invoice(
invoice = bfx.rest.auth.submit_invoice(
amount=1,
currency="USD",
duration=864000,
order_id="order123",
customer_info=customer_info,
pay_currencies=["ETH"]
))
)
print(bfx.rest.auth.get_invoices())
print(bfx.rest.auth.get_invoice_count_stats(status="CREATED", format="Y"))
print(bfx.rest.auth.get_invoice_earning_stats(currency="USD", format="Y"))
print(bfx.rest.auth.get_invoice_earning_stats(currency="USD", format="Y"))
print(bfx.rest.auth.get_currency_conversion_list())
print(bfx.rest.auth.complete_invoice(
id=invoice.id,
pay_currency="ETH",
deposit_id=1
))