Coverage for src/integrify/epoint/client.py: 95%
39 statements
« prev ^ index » next coverage.py v7.10.3, created at 2026-02-02 01:50 +0000
« prev ^ index » next coverage.py v7.10.3, created at 2026-02-02 01:50 +0000
1from importlib.metadata import version
2from typing import TYPE_CHECKING, Any, Optional
3from typing import SupportsFloat as Numeric
5from packaging.version import parse
7from integrify.api import APIClient
8from integrify.epoint import env
9from integrify.epoint.handlers import (
10 GetTransactionStatusPayloadHandler,
11 PayAndSaveCardPayloadHandler,
12 PaymentPayloadHandler,
13 PayoutPayloadHandler,
14 PayWithSavedCardPayloadHandler,
15 RefundPayloadHandler,
16 SaveCardPayloadHandler,
17 SplitPayAndSaveCardPayloadHandler,
18 SplitPayPayloadHandler,
19 SplitPayWithSavedCardPayloadHandler,
20)
21from integrify.epoint.schemas.response import (
22 BaseResponseSchema,
23 MinimalResponseSchema,
24 RedirectUrlResponseSchema,
25 RedirectUrlWithCardIdResponseSchema,
26 SplitPayWithSavedCardResponseSchema,
27 TransactionStatusResponseSchema,
28)
29from integrify.schemas import APIResponse
31# pylint: disable=no-name-in-module
33if parse(version('integrify-core')) >= parse('1.1.0'): 33 ↛ 34line 33 didn't jump to line 34 because the condition on line 33 was never true
34 from integrify.utils import UNSET, Unset # type: ignore
35else:
36 from integrify.utils import _UNSET as UNSET # type: ignore
37 from integrify.utils import Unsettable as Unset # type: ignore
38# pylint: enable=no-name-in-module
40__all__ = ['EPointAsyncRequest', 'EPointClientClass', 'EPointRequest']
43class EPointClientClass(APIClient):
44 """EPoint sorğular üçün baza class"""
46 def __init__(
47 self,
48 name='EPoint',
49 base_url: Optional[str] = env.API.BASE_URL,
50 default_handler=None,
51 sync: bool = True,
52 dry: bool = False,
53 ):
54 super().__init__(name, base_url, default_handler, sync, dry)
56 self.add_url('pay', env.API.PAY, verb='POST')
57 self.add_handler('pay', PaymentPayloadHandler)
59 self.add_url('get_transaction_status', env.API.GET_STATUS, verb='POST')
60 self.add_handler('get_transaction_status', GetTransactionStatusPayloadHandler)
62 self.add_url('save_card', env.API.SAVE_CARD, verb='POST')
63 self.add_handler('save_card', SaveCardPayloadHandler)
65 self.add_url('pay_with_saved_card', env.API.PAY_WITH_SAVED_CARD, verb='POST')
66 self.add_handler('pay_with_saved_card', PayWithSavedCardPayloadHandler)
68 self.add_url('pay_and_save_card', env.API.PAY_AND_SAVE_CARD, verb='POST')
69 self.add_handler('pay_and_save_card', PayAndSaveCardPayloadHandler)
71 self.add_url('payout', env.API.PAYOUT, verb='POST')
72 self.add_handler('payout', PayoutPayloadHandler)
74 self.add_url('refund', env.API.REFUND, verb='POST')
75 self.add_handler('refund', RefundPayloadHandler)
77 self.add_url('split_pay', env.API.SPLIT_PAY, verb='POST')
78 self.add_handler('split_pay', SplitPayPayloadHandler)
80 self.add_url('split_pay_with_saved_card', env.API.SPLIT_PAY_WITH_SAVED_CARD, verb='POST')
81 self.add_handler('split_pay_with_saved_card', SplitPayWithSavedCardPayloadHandler)
83 self.add_url('split_pay_and_save_card', env.API.SPLIT_PAY_AND_SAVE_CARD, verb='POST')
84 self.add_handler('split_pay_and_save_card', SplitPayAndSaveCardPayloadHandler)
86 if TYPE_CHECKING:
88 def pay(
89 self,
90 amount: Numeric,
91 currency: str,
92 order_id: str,
93 description: Unset[str] = UNSET,
94 **extra: Any,
95 ) -> APIResponse[RedirectUrlResponseSchema]:
96 """Ödəniş sorğusu
98 **Endpoint:** */api/1/request*
100 Example:
101 ```python
102 from integrify.epoint import EPointRequest
104 EPointRequest.pay(amount=100, currency='AZN', order_id='12345678', description='Ödəniş')
105 ```
107 **Cavab formatı**: [`RedirectUrlResponseSchema`][integrify.epoint.schemas.response.RedirectUrlResponseSchema]
109 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` gəlir. Müştəri həmin URLə daxil
110 olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
111 APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur, və eyni `order_id`
112 ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
113 formatında məlumat gəlir.
115 Args:
116 amount: Ödəniş miqdarı. Numerik dəyər.
117 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
118 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
119 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
120 **extra: Başqa ötürmək istədiyiniz əlavə dəyərlər. Bu dəyərlər callback sorğuda sizə
121 geri göndərilir.
122 """ # noqa: E501
124 def get_transaction_status(
125 self,
126 transaction_id: str,
127 ) -> APIResponse[TransactionStatusResponseSchema]:
128 """
129 Transaksiya statusunu öyrənmək üçün sorğu
131 **Endpoint:** */api/1/get-status*
133 Example:
134 ```python
135 from integrify.epoint import EPointRequest
137 EPointRequest.get_transaction_status(transaction_id='texxxxxx')
138 ```
140 Cavab formatı: [`TransactionStatusResponseSchema`][integrify.epoint.schemas.response.TransactionStatusResponseSchema]
142 Args:
143 transaction_id: EPoint tərəfindən verilmiş tranzaksiya IDsi.
144 Adətən `te` prefiksi ilə olur.
145 """ # noqa: E501
147 def save_card(self) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
148 """Ödəniş olmadan kartı yadda saxlamaq sorğusu
150 **Endpoint:** */api/1/card-registration*
152 Example:
153 ```python
154 from integrify.epoint import EPointRequest
156 EPointRequest.save_card()
157 ```
159 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
161 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` və `card_id` gəlir.
162 Müştəri həmin URLə daxil olub, kart məlumatlarını uğurlu qeyd etdikdən sonra,
163 backend callback APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur,
164 və eyni `card_id` ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
165 formatında məlumat gəlir.
166 """ # noqa: E501
168 def pay_with_saved_card(
169 self,
170 amount: Numeric,
171 currency: str,
172 order_id: str,
173 card_id: str,
174 ) -> APIResponse[BaseResponseSchema]:
175 """Yadda saxlanılmış kartla ödəniş sorğusu
177 **Endpoint:** */api/1/execute-pay*
179 Example:
180 ```python
181 from integrify.epoint import EPointRequest
183 EPointRequest.pay_with_saved_card(amount=100, currency='AZN', order_id='12345678', card_id='cexxxxxx')
184 ```
186 Cavab formatı: [`BaseResponseSchema`][integrify.epoint.schemas.response.BaseResponseSchema]
188 Bu sorğunu göndərdikdə, cavab olaraq `BaseResponseSchema` formatında
189 cavab gəlir, və ödənişin statusu birbaşa qayıdır: heç bir callback sorğusu gəlmir.
191 Args:
192 amount: Ödəniş miqdarı. Numerik dəyər.
193 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
194 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
195 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
196 """ # noqa: E501
198 def pay_and_save_card(
199 self,
200 amount: Numeric,
201 currency: str,
202 order_id: str,
203 description: str,
204 ) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
205 """Ödəniş və kartı yadda saxlama sorğusu
207 **Endpoint:** */api/1/card-registration-with-pay*
209 Example:
210 ```python
211 from integrify.epoint import EPointRequest
213 EPointRequest.pay_and_save_card(amount=100, currency='AZN', order_id='12345678', description='Ödəniş')
214 ```
216 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
218 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` və `card_id` gəlir. Müştəri həmin URLə
219 daxil olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
220 APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur, və eyni `order_id` və
221 `card_id` ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
222 formatında məlumat gəlir.
224 Args:
225 amount: Ödəniş miqdarı. Numerik dəyər.
226 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
227 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
228 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
229 """ # noqa: E501
231 def payout(
232 self,
233 amount: Numeric,
234 currency: str,
235 order_id: str,
236 card_id: str,
237 description: Unset[str] = UNSET,
238 ) -> APIResponse[BaseResponseSchema]:
239 """Hesabınızda olan pulu karta nağdlaşdırmaq sorğusu
241 **Endpoint:** */api/1/refund-request*
243 Example:
244 ```python
245 from integrify.epoint import EPointRequest
247 EPointRequest.payout(amount=100, currency='AZN', order_id='12345678', card_id='cexxxxxx', description='Ödəniş')
248 ```
250 Cavab sorğu formatı: [`BaseResponseSchema`][integrify.epoint.schemas.response.BaseResponseSchema]
252 Bu sorğunu göndərdikdə, əməliyyat Epoint xidməti tərəfindən işləndikdən və bankdan ödəniş
253 statusu alındıqdan sonra cavab `BaseResponseSchema` formatında qayıdacaqdır
255 Args:
256 amount: Nağdlaşdırmaq miqdarı. Numerik dəyər.
257 currency: Nağdlaşdırma məzənnəsi. Mümkün dəyərlər: AZN
258 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
259 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
260 description: Nağdlaşdırmanın təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
261 """ # noqa: E501
263 def refund(
264 self,
265 transaction_id: str,
266 currency: str,
267 amount: Unset[Numeric] = UNSET,
268 ) -> APIResponse[MinimalResponseSchema]:
269 """Keçmiş ödənişi tam və ya yarımçıq geri qaytarma sorğusu
271 **Endpoint:** */api/1/reverse*
273 Example:
274 ```python
275 from integrify.epoint import EPointRequest
277 # Full refund
278 EPointRequest.refund(transaction_id='texxxxxx', currency='AZN')
280 # Partial refund
281 EPointRequest.refund(transaction_id='texxxxxx', currency='AZN', amount=50)
282 ```
284 Cavab formatı: [`MinimalResponseSchema`][integrify.epoint.schemas.response.MinimalResponseSchema]
286 Bu sorğunu göndərdikdə, cavab olaraq `status` və `message` gəlir.
287 Heç bir callback sorğusu göndərilmir.
289 Args:
290 transaction_id: EPoint tərəfindən verilmiş tranzaksiya IDsi.
291 Adətən `te` prefiksi ilə olur.
292 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
293 amount: Ödəniş məbləği. Məbləğin göndərilməsi yarımçıq geri-qaytarma hesab olunur,
294 əks halda tam geri-qaytarma baş verəcəkdir.
295 """ # noqa: E501
297 def split_pay(
298 self,
299 amount: Numeric,
300 currency: str,
301 order_id: str,
302 split_user_id: str,
303 split_amount: Numeric,
304 description: Unset[str] = UNSET,
305 **extra: Any,
306 ) -> APIResponse[RedirectUrlResponseSchema]:
307 """Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə sorğusu
309 **Endpoint:** */api/1/split-request*
311 Example:
312 ```python
313 from integrify.epoint import EPointRequest
315 EPointRequest.split_pay(amount=100, currency='AZN', order_id='123456789', split_user_id='epoint_user_id', split_amount=50, description='split payment')
316 ```
318 Cavab formatı: [`RedirectUrlResponseSchema`][integrify.epoint.schemas.response.RedirectUrlResponseSchema]
320 Args:
321 amount: Ödəniş miqdarı. Numerik dəyər.
322 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
323 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
324 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
325 split_amount: Bölünən miqdar. Numerik dəyər
326 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
327 **extra: Başqa ötürmək istədiyiniz əlavə dəyərlər. Bu dəyərlər callback sorğuda sizə
328 geri göndərilir.
329 """ # noqa: E501
331 def split_pay_with_saved_card(
332 self,
333 amount: Numeric,
334 currency: str,
335 order_id: str,
336 card_id: str,
337 split_user_id: str,
338 split_amount: Numeric,
339 description: Unset[str] = UNSET,
340 ) -> APIResponse[SplitPayWithSavedCardResponseSchema]:
341 """Saxlanılmış kartla ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə sorğusu
343 **Endpoint:** */api/1/split-execute-pay*
345 Example:
346 ```python
347 from integrify.epoint import EPointRequest
349 EPointRequest.split_pay_with_saved_card(amount=100, currency='AZN', order_id='123456789', card_id='cexxxxxx', split_user_id='epoint_user_id', split_amount=50, description='split payment')
350 ```
352 Cavab formatı: [`SplitPayWithSavedCardResponseSchema`][integrify.epoint.schemas.response.SplitPayWithSavedCardResponseSchema]
354 Args:
355 amount: Ödəniş miqdarı. Numerik dəyər.
356 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
357 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
358 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
359 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
360 split_amount: Bölünən miqdar. Numerik dəyər
361 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
362 """ # noqa: E501
364 def split_pay_and_save_card(
365 self,
366 amount: Numeric,
367 currency: str,
368 order_id: str,
369 split_user_id: str,
370 split_amount: Numeric,
371 description: Unset[str] = UNSET,
372 ) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
373 """Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə və kartı saxlama sorğusu
375 **Endpoint:** */api/1/split-card-registration-with-pay*
377 Example:
378 ```python
379 from integrify.epoint import EPointRequest
381 EPointRequest.split_pay_and_save_card(amount=100, currency='AZN', order_id='123456789', split_user_id='epoint_user_id', split_amount=50, description='split payment')
382 ```
384 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
386 Args:
387 amount: Ödəniş miqdarı. Numerik dəyər.
388 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
389 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
390 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
391 split_amount: Bölünən miqdar. Numerik dəyər
392 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
393 """ # noqa: E501
396EPointRequest = EPointClientClass(sync=True)
397EPointAsyncRequest = EPointClientClass(sync=False)