Coverage for src/integrify/epoint/client.py: 100%
35 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-02-10 00:57 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-02-10 00:57 +0000
1from typing import TYPE_CHECKING, Any, Optional
2from typing import SupportsFloat as Numeric
4from integrify.api import APIClient
5from integrify.epoint import env
6from integrify.epoint.handlers import (
7 GetTransactionStatusPayloadHandler,
8 PayAndSaveCardPayloadHandler,
9 PaymentPayloadHandler,
10 PayoutPayloadHandler,
11 PayWithSavedCardPayloadHandler,
12 RefundPayloadHandler,
13 SaveCardPayloadHandler,
14 SplitPayAndSaveCardPayloadHandler,
15 SplitPayPayloadHandler,
16 SplitPayWithSavedCardPayloadHandler,
17)
18from integrify.epoint.schemas.response import (
19 BaseResponseSchema,
20 MinimalResponseSchema,
21 RedirectUrlResponseSchema,
22 RedirectUrlWithCardIdResponseSchema,
23 SplitPayWithSavedCardResponseSchema,
24 TransactionStatusResponseSchema,
25)
26from integrify.schemas import APIResponse
28__all__ = ['EPointClientClass']
31class EPointClientClass(APIClient):
32 """EPoint sorğular üçün baza class"""
34 def __init__(self, sync: bool = True):
35 super().__init__('EPoint', env.API.BASE_URL, None, sync)
37 self.add_url('pay', env.API.PAY)
38 self.add_handler('pay', PaymentPayloadHandler)
40 self.add_url('get_transaction_status', env.API.GET_STATUS)
41 self.add_handler('get_transaction_status', GetTransactionStatusPayloadHandler)
43 self.add_url('save_card', env.API.SAVE_CARD)
44 self.add_handler('save_card', SaveCardPayloadHandler)
46 self.add_url('pay_with_saved_card', env.API.PAY_WITH_SAVED_CARD)
47 self.add_handler('pay_with_saved_card', PayWithSavedCardPayloadHandler)
49 self.add_url('pay_and_save_card', env.API.PAY_AND_SAVE_CARD)
50 self.add_handler('pay_and_save_card', PayAndSaveCardPayloadHandler)
52 self.add_url('payout', env.API.PAYOUT)
53 self.add_handler('payout', PayoutPayloadHandler)
55 self.add_url('refund', env.API.REFUND)
56 self.add_handler('refund', RefundPayloadHandler)
58 self.add_url('split_pay', env.API.SPLIT_PAY)
59 self.add_handler('split_pay', SplitPayPayloadHandler)
61 self.add_url('split_pay_with_saved_card', env.API.SPLIT_PAY_WITH_SAVED_CARD)
62 self.add_handler('split_pay_with_saved_card', SplitPayWithSavedCardPayloadHandler)
64 self.add_url('split_pay_and_save_card', env.API.SPLIT_PAY_AND_SAVE_CARD)
65 self.add_handler('split_pay_and_save_card', SplitPayAndSaveCardPayloadHandler)
67 def add_url(
68 self,
69 route_name: str,
70 url: str,
71 verb: str = 'POST',
72 base_url: Optional[str] = None,
73 ):
74 return super().add_url(route_name, url, verb, base_url)
76 if TYPE_CHECKING:
78 def pay(
79 self,
80 amount: Numeric,
81 currency: str,
82 order_id: str,
83 description: Optional[str] = None,
84 **extra: Any,
85 ) -> APIResponse[RedirectUrlResponseSchema]:
86 """Ödəniş sorğusu
88 **Endpoint:** */api/1/request*
90 Example:
91 ```python
92 from integrify.epoint import EPointRequest
94 EPointRequest.pay(amount=100, currency='AZN', order_id='12345678', description='Ödəniş')
95 ```
97 **Cavab formatı**: [`RedirectUrlResponseSchema`][integrify.epoint.schemas.response.RedirectUrlResponseSchema]
99 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` gəlir. Müştəri həmin URLə daxil
100 olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
101 APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur, və eyni `order_id`
102 ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
103 formatında məlumat gəlir.
105 Args:
106 amount: Ödəniş miqdarı. Numerik dəyər.
107 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
108 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
109 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
110 **extra: Başqa ötürmək istədiyiniz əlavə dəyərlər. Bu dəyərlər callback sorğuda sizə
111 geri göndərilir.
112 """ # noqa: E501
114 def get_transaction_status(
115 self,
116 transaction_id: str,
117 ) -> APIResponse[TransactionStatusResponseSchema]:
118 """
119 Transaksiya statusunu öyrənmək üçün sorğu
121 **Endpoint:** */api/1/get-status*
123 Example:
124 ```python
125 from integrify.epoint import EPointRequest
127 EPointRequest.get_transaction_status(transaction_id='texxxxxx')
128 ```
130 Cavab formatı: [`TransactionStatusResponseSchema`][integrify.epoint.schemas.response.TransactionStatusResponseSchema]
132 Args:
133 transaction_id: EPoint tərəfindən verilmiş tranzaksiya IDsi.
134 Adətən `te` prefiksi ilə olur.
135 """ # noqa: E501
137 def save_card(self) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
138 """Ödəniş olmadan kartı yadda saxlamaq sorğusu
140 **Endpoint:** */api/1/card-registration*
142 Example:
143 ```python
144 from integrify.epoint import EPointRequest
146 EPointRequest.save_card()
147 ```
149 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
151 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` və `card_id` gəlir.
152 Müştəri həmin URLə daxil olub, kart məlumatlarını uğurlu qeyd etdikdən sonra,
153 backend callback APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur,
154 və eyni `card_id` ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
155 formatında məlumat gəlir.
156 """ # noqa: E501
158 def pay_with_saved_card(
159 self,
160 amount: Numeric,
161 currency: str,
162 order_id: str,
163 card_id: str,
164 ) -> APIResponse[BaseResponseSchema]:
165 """Yadda saxlanılmış kartla ödəniş sorğusu
167 **Endpoint:** */api/1/execute-pay*
169 Example:
170 ```python
171 from integrify.epoint import EPointRequest
173 EPointRequest.pay_with_saved_card(amount=100, currency='AZN', order_id='12345678', card_id='cexxxxxx')
174 ```
176 Cavab formatı: [`BaseResponseSchema`][integrify.epoint.schemas.response.BaseResponseSchema]
178 Bu sorğunu göndərdikdə, cavab olaraq `BaseResponseSchema` formatında
179 cavab gəlir, və ödənişin statusu birbaşa qayıdır: heç bir callback sorğusu gəlmir.
181 Args:
182 amount: Ödəniş miqdarı. Numerik dəyər.
183 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
184 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
185 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
186 """ # noqa: E501
188 def pay_and_save_card(
189 self,
190 amount: Numeric,
191 currency: str,
192 order_id: str,
193 description: Optional[str] = None,
194 ) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
195 """Ödəniş və kartı yadda saxlama sorğusu
197 **Endpoint:** */api/1/card-registration-with-pay*
199 Example:
200 ```python
201 from integrify.epoint import EPointRequest
203 EPointRequest.pay_and_save_card(amount=100, currency='AZN', order_id='12345678', description='Ödəniş')
204 ```
206 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
208 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` və `card_id` gəlir. Müştəri həmin URLə
209 daxil olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
210 APIsinə (EPoint dashboard-ında qeyd etdiyiniz) sorğu daxil olur, və eyni `order_id` və
211 `card_id` ilə [`DecodedCallbackDataSchema`][integrify.epoint.schemas.callback.DecodedCallbackDataSchema]
212 formatında məlumat gəlir.
214 Args:
215 amount: Ödəniş miqdarı. Numerik dəyər.
216 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
217 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
218 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
219 """ # noqa: E501
221 def payout(
222 self,
223 amount: Numeric,
224 currency: str,
225 order_id: str,
226 card_id: str,
227 description: Optional[str] = None,
228 ) -> APIResponse[BaseResponseSchema]:
229 """Hesabınızda olan pulu karta nağdlaşdırmaq sorğusu
231 **Endpoint:** */api/1/refund-request*
233 Example:
234 ```python
235 from integrify.epoint import EPointRequest
237 EPointRequest.payout(amount=100, currency='AZN', order_id='12345678', card_id='cexxxxxx', description='Ödəniş')
238 ```
240 Cavab sorğu formatı: [`BaseResponseSchema`][integrify.epoint.schemas.response.BaseResponseSchema]
242 Bu sorğunu göndərdikdə, əməliyyat Epoint xidməti tərəfindən işləndikdən və bankdan ödəniş
243 statusu alındıqdan sonra cavab `BaseResponseSchema` formatında qayıdacaqdır
245 Args:
246 amount: Nağdlaşdırmaq miqdarı. Numerik dəyər.
247 currency: Nağdlaşdırma məzənnəsi. Mümkün dəyərlər: AZN
248 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
249 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
250 description: Nağdlaşdırmanın təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
251 """ # noqa: E501
253 def refund(
254 self,
255 transaction_id: str,
256 currency: str,
257 amount: Optional[Numeric] = None,
258 ) -> APIResponse[MinimalResponseSchema]:
259 """Keçmiş ödənişi tam və ya yarımçıq geri qaytarma sorğusu
261 **Endpoint:** */api/1/reverse*
263 Example:
264 ```python
265 from integrify.epoint import EPointRequest
267 # Full refund
268 EPointRequest.refund(transaction_id='texxxxxx', currency='AZN')
270 # Partial refund
271 EPointRequest.refund(transaction_id='texxxxxx', currency='AZN', amount=50)
272 ```
274 Cavab formatı: [`MinimalResponseSchema`][integrify.epoint.schemas.response.MinimalResponseSchema]
276 Bu sorğunu göndərdikdə, cavab olaraq `status` və `message` gəlir.
277 Heç bir callback sorğusu göndərilmir.
279 Args:
280 transaction_id: EPoint tərəfindən verilmiş tranzaksiya IDsi.
281 Adətən `te` prefiksi ilə olur.
282 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
283 amount: Ödəniş məbləği. Məbləğin göndərilməsi yarımçıq geri-qaytarma hesab olunur,
284 əks halda tam geri-qaytarma baş verəcəkdir.
285 """ # noqa: E501
287 def split_pay(
288 self,
289 amount: Numeric,
290 currency: str,
291 order_id: str,
292 split_user_id: str,
293 split_amount: Numeric,
294 description: Optional[str] = None,
295 **extra: Any,
296 ) -> APIResponse[RedirectUrlResponseSchema]:
297 """Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə sorğusu
299 **Endpoint:** */api/1/split-request*
301 Example:
302 ```python
303 from integrify.epoint import EPointRequest
305 EPointRequest.split_pay(amount=100, currency='AZN', order_id='123456789', split_user_id='epoint_user_id', split_amount=50, description='split payment')
306 ```
308 Cavab formatı: [`RedirectUrlResponseSchema`][integrify.epoint.schemas.response.RedirectUrlResponseSchema]
310 Args:
311 amount: Ödəniş miqdarı. Numerik dəyər.
312 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
313 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
314 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
315 split_amount: Bölünən miqdar. Numerik dəyər
316 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
317 **extra: Başqa ötürmək istədiyiniz əlavə dəyərlər. Bu dəyərlər callback sorğuda sizə
318 geri göndərilir.
319 """ # noqa: E501
321 def split_pay_with_saved_card(
322 self,
323 amount: Numeric,
324 currency: str,
325 order_id: str,
326 card_id: str,
327 split_user_id: str,
328 split_amount: Numeric,
329 description: Optional[str] = None,
330 ) -> APIResponse[SplitPayWithSavedCardResponseSchema]:
331 """Saxlanılmış kartla ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə sorğusu
333 **Endpoint:** */api/1/split-execute-pay*
335 Example:
336 ```python
337 from integrify.epoint import EPointRequest
339 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')
340 ```
342 Cavab formatı: [`SplitPayWithSavedCardResponseSchema`][integrify.epoint.schemas.response.SplitPayWithSavedCardResponseSchema]
344 Args:
345 amount: Ödəniş miqdarı. Numerik dəyər.
346 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
347 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
348 card_id: Saxlanılmış kartın id-si. Adətən `ce` prefiksi ilə başlayır.
349 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
350 split_amount: Bölünən miqdar. Numerik dəyər
351 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
352 """ # noqa: E501
354 def split_pay_and_save_card(
355 self,
356 amount: Numeric,
357 currency: str,
358 order_id: str,
359 split_user_id: str,
360 split_amount: Numeric,
361 description: Optional[str] = None,
362 ) -> APIResponse[RedirectUrlWithCardIdResponseSchema]:
363 """Ödənişi başqa EPoint istifadəçisi ilə bölüb ödəmə və kartı saxlama sorğusu
365 **Endpoint:** */api/1/split-card-registration-with-pay*
367 Example:
368 ```python
369 from integrify.epoint import EPointRequest
371 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')
372 ```
374 Cavab formatı: [`RedirectUrlWithCardIdResponseSchema`][integrify.epoint.schemas.response.RedirectUrlWithCardIdResponseSchema]
376 Args:
377 amount: Ödəniş miqdarı. Numerik dəyər.
378 currency: Ödəniş məzənnəsi. Mümkün dəyərlər: AZN
379 order_id: Unikal ID. Maksimal uzunluq: 255 simvol.
380 split_user_id: Ödənişi böləcəyini **EPoint** user-ini IDsi
381 split_amount: Bölünən miqdar. Numerik dəyər
382 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
383 """ # noqa: E501
386EPointRequest = EPointClientClass(sync=True)
387EPointAsyncRequest = EPointClientClass(sync=False)