Coverage for src/integrify/kapital/client.py: 86%
43 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, Optional
2from typing import SupportsFloat as Numeric
4from integrify.api import APIClient, APIResponse
5from integrify.kapital import env
6from integrify.kapital.handlers import (
7 ClearingOrderPayloadHandler,
8 CreateOrderPayloadHandler,
9 DetailedOrderInformationPayloadHandler,
10 FullReverseOrderPayloadHandler,
11 LinkCardTokenPayloadHandler,
12 OrderInformationPayloadHandler,
13 OrderWithSavedCardPayloadHandler,
14 PartialReverseOrderPayloadHandler,
15 PayAndSaveCardPayloadHandler,
16 ProcessPaymentWithSavedCardPayloadHandler,
17 RefundOrderPayloadHandler,
18 SaveCardPayloadHandler,
19)
20from integrify.kapital.schemas.response import (
21 BaseResponseSchema,
22 ClearingOrderResponseSchema,
23 CreateOrderResponseSchema,
24 DetailedOrderInformationResponseSchema,
25 FullReverseOrderResponseSchema,
26 LinkCardTokenResponseSchema,
27 OrderInformationResponseSchema,
28 PartialReverseOrderResponseSchema,
29 ProcessPaymentWithSavedCardResponseSchema,
30 RefundOrderResponseSchema,
31)
33__all__ = ['KapitalClientClass']
36class KapitalClientClass(APIClient):
37 def __init__(self, sync: bool = True):
38 super().__init__('Kapital', env.API.BASE_URL, sync=sync)
40 self.add_url('create_order', env.API.ORDER, verb='POST')
41 self.add_handler('create_order', CreateOrderPayloadHandler)
43 self.add_url('get_order_information', env.API.GET_ORDER, verb='GET')
44 self.add_handler('get_order_information', OrderInformationPayloadHandler)
46 self.add_url('get_detailed_order_info', env.API.GET_DETAILED_ORDER, verb='GET')
47 self.add_handler('get_detailed_order_info', DetailedOrderInformationPayloadHandler)
49 self.add_url('refund_order', env.API.ORDER_EXECUTION, verb='POST')
50 self.add_handler('refund_order', RefundOrderPayloadHandler)
52 self.add_url('save_card', env.API.ORDER, verb='POST')
53 self.add_handler('save_card', SaveCardPayloadHandler)
55 self.add_url('pay_and_save_card', env.API.ORDER, verb='POST')
56 self.add_handler('pay_and_save_card', PayAndSaveCardPayloadHandler)
58 self.add_url('full_reverse_order', env.API.ORDER_EXECUTION, verb='POST')
59 self.add_handler('full_reverse_order', FullReverseOrderPayloadHandler)
61 self.add_url('clearing_order', env.API.ORDER_EXECUTION, verb='POST')
62 self.add_handler('clearing_order', ClearingOrderPayloadHandler)
64 self.add_url('partial_reverse_order', env.API.ORDER_EXECUTION, verb='POST')
65 self.add_handler('partial_reverse_order', PartialReverseOrderPayloadHandler)
67 self.add_url('order_with_saved_card', env.API.ORDER, verb='POST')
68 self.add_handler(
69 'order_with_saved_card',
70 OrderWithSavedCardPayloadHandler,
71 )
73 self.add_url('link_card_token', env.API.ORDER_LINK_CARD_TOKEN, verb='POST')
74 self.add_handler('link_card_token', LinkCardTokenPayloadHandler)
76 self.add_url(
77 'process_payment_with_saved_card',
78 env.API.PROCESS_PAYMENT_WITH_SAVED_CARD,
79 verb='POST',
80 )
81 self.add_handler(
82 'process_payment_with_saved_card',
83 ProcessPaymentWithSavedCardPayloadHandler,
84 )
86 def pay_with_saved_card(
87 self,
88 token: int,
89 amount: Numeric,
90 currency: str,
91 description: Optional[str] = None,
92 ) -> APIResponse[BaseResponseSchema[ProcessPaymentWithSavedCardResponseSchema]]:
93 """
94 Yadda saxlanmış kartdan ödəniş etmək üçün sorğu
96 **Endpoint** /api/order
98 Example:
99 ```python
100 from integrify.kapital import KapitalRequest
102 KapitalRequest.pay_with_saved_card(123456, 1.0, "AZN", "Test payment")
103 ```
105 **Cavab formatı: [`BaseResponseSchema[ProcessPaymentWithSavedCardResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
107 Bu sorğunu göndərdikdə, cavab olaraq ödənişin təsdiq edilməsi haqda məlumat əldə edə bilərsiniz.
109 Args:
110 token: Kart tokeni.
111 amount: Ödəniş miqdarı. Numerik dəyər.
112 currency: Ödənişin məzənnəsi. Mümkün dəyərlər: `["AZN", "USD"]`.
113 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
114 """ # noqa: E501
115 order_response = self.order_with_saved_card( # pylint: disable=assignment-from-no-return
116 amount=amount,
117 currency=currency,
118 description=description,
119 )
121 assert order_response.body and order_response.body.data
123 order_id = order_response.body.data.id
124 password = order_response.body.data.password
126 self.link_card_token(
127 token=token,
128 order_id=order_id,
129 password=password,
130 )
132 return self.process_payment_with_saved_card(
133 amount=amount,
134 order_id=order_id,
135 password=password,
136 )
138 if TYPE_CHECKING:
140 def create_order(
141 self,
142 amount: Numeric,
143 currency: str,
144 description: Optional[str] = None,
145 ) -> APIResponse[BaseResponseSchema[CreateOrderResponseSchema]]:
146 """Ödəniş sorğusu
148 **Endpoint** /api/order
150 Example:
151 ```python
152 from integrify.kapital import KapitalRequest
154 KapitalRequest.create_order(
155 amount=10.0,
156 currency="AZN",
157 description="Test payment",
158 )
159 ```
161 **Cavab formatı: [`BaseResponseSchema[CreateOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
163 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` gəlir. Müştəri həmin URLə daxil
164 olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
165 APIsinə "{callback_url}/?ID={id}&STATUS={status}" formatında sorğusu göndərilir. Ödənişin
166 detallarını get_detailed_order_info() funksiyandan istifadə edərək əldə edə bilərsiz.
168 Args:
169 amount: Ödəniş miqdarı. Numerik dəyər.
170 currency: Ödənişin məzənnəsi. Mümkün dəyərlər: `["AZN", "USD"]`.
171 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
172 """ # noqa: E501
174 def get_order_information(
175 self, order_id: int
176 ) -> APIResponse[BaseResponseSchema[OrderInformationResponseSchema]]:
177 """Ödəniş haqda qısa məlumat əldə etmək üçün sorğu
179 **Endpoint** /api/order/{order_id}
181 Example:
182 ```python
183 from integrify.kapital import KapitalRequest
185 KapitalRequest.get_order_information(order_id=123456)
186 ```
188 **Cavab formatı: [`BaseResponseSchema[OrderInformationResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
190 Bu sorğunu göndərdikdə, cavab olaraq ödəniş haqda qısa məlumat əldə edə bilərsiniz.
192 Args:
193 order_id: Ödənişin ID-si.
194 """ # noqa: E501
196 def get_detailed_order_info(
197 self, order_id: int
198 ) -> APIResponse[BaseResponseSchema[DetailedOrderInformationResponseSchema]]:
199 """Ödəniş haqda detallı məlumat əldə etmək üçün sorğu
201 **Endpoint** /api/order/{order_id}?&tranDetailLevel=2&tokenDetailLevel=2&orderDetailLevel=2
203 Example:
204 ```python
205 from integrify.kapital import KapitalRequest
207 KapitalRequest.get_detailed_order_info(order_id=123456)
208 ```
210 **Cavab formatı: [`BaseResponseSchema[DetailedOrderInformationResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
212 Bu sorğunu göndərdikdə, cavab olaraq ödənişin detallı məlumat əldə edə bilərsiniz.
214 Args:
215 order_id: Ödənişin ID-si.
216 """ # noqa: E501
218 def refund_order(
219 self,
220 order_id: int,
221 amount: Numeric,
222 ) -> APIResponse[BaseResponseSchema[RefundOrderResponseSchema]]:
223 """Geri ödəniş sorğusu
225 **Endpoint** /api/order/{order_id}/exec-tran
227 Example:
228 ```python
229 from integrify.kapital import KapitalRequest
231 KapitalRequest.refund_order(
232 order_id=123456,
233 amount=10.0,
234 )
235 ```
237 **Cavab formatı: [`BaseResponseSchema[RefundOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
239 Bu sorğu ilə əvvəlki ödənişi geri ödəmək üçün istifadə edə bilərsiniz.
240 Cavab olaraq ödənişin detallarını əldə edə bilərsiniz.
242 Args:
243 order_id: Ödənişin ID-si.
244 amount: Geri ödəniş miqdarı. Numerik dəyər.
245 """ # noqa: E501
247 def save_card(
248 self,
249 amount: Numeric,
250 currency: str,
251 description: Optional[str] = None,
252 ) -> APIResponse[BaseResponseSchema[CreateOrderResponseSchema]]:
253 """Kartı saxlamaq üçün ödəniş sorğusu
255 **Endpoint** /api/order
257 Example:
258 ```python
259 from integrify.kapital import KapitalRequest
261 KapitalRequest.save_card(
262 amount=1.0,
263 currency="AZN",
264 description="Test payment",
265 )
266 ```
268 **Cavab formatı: [`BaseResponseSchema[CreateOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
270 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` gəlir. Müştəri həmin URLə daxil
271 olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
272 APIsinə "{callback_url}/?ID={id}&STATUS={status}" formatında sorğusu göndərilir. Ödənişin
273 detallarını get_detailed_order_info() funksiyandan istifadə edərək əldə edə bilərsiz.
274 Həmin detallarda storedTokens key-i altındaki tokenləri saxlayaraq, sonrakı ödənişlərdə bu tokenləri
275 istifadə edə bilərsiniz.
277 `response.body.data.stored_tokens[0].id` ilə tokeni əldə edə bilərsiniz.
278 """ # noqa: E501
280 def pay_and_save_card(
281 self,
282 amount: Numeric,
283 currency: str,
284 description: Optional[str] = None,
285 ) -> APIResponse[BaseResponseSchema[CreateOrderResponseSchema]]:
286 """Kartı saxlamaq və ödəniş etmək üçün ödəniş sorğusu
288 **Endpoint** /api/order
290 Example:
291 ```python
292 from integrify.kapital import KapitalRequest
294 KapitalRequest.pay_and_save_card(
295 amount=1.0,
296 currency="AZN",
297 description="Test payment",
298 )
299 ```
301 **Cavab formatı: [`BaseResponseSchema[CreateOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
303 Bu sorğunu göndərdikdə, cavab olaraq `redirect_url` gəlir. Müştəri həmin URLə daxil
304 olub, kart məlumatlarını daxil edib, uğurlu ödəniş etdikdən sonra, backend callback
305 APIsinə "{callback_url}/?ID={id}&STATUS={status}" formatında sorğusu göndərilir. Ödənişin
306 detallarını get_detailed_order_info() funksiyandan istifadə edərək əldə edə bilərsiz.
307 Həmin detallarda storedTokens key-i altındaki tokenləri saxlayaraq, sonrakı ödənişlərdə bu tokenləri
308 istifadə edə bilərsiniz.
310 `response.body.data.stored_tokens[0].id` ilə tokeni əldə edə bilərsiniz.
311 """ # noqa: E501
313 def full_reverse_order(
314 self,
315 order_id: int,
316 ) -> APIResponse[BaseResponseSchema[FullReverseOrderResponseSchema]]:
317 """Ödənişi ləğv etmək üçün sorğu
319 **Endpoint** /api/order/{order_id}/exec-tran
321 Example:
322 ```python
323 from integrify.kapital import KapitalRequest
325 KapitalRequest.full_reverse_order(order_id=123456)
326 ```
328 **Cavab formatı: [`BaseResponseSchema[FullReverseOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
330 Bu sorğunu göndərdikdə, cavab olaraq ödənişin ləğv edilməsi haqda məlumat əldə edə bilərsiniz.
331 Bu funksiyani save_card() funksiyası ilə yaradılan ödənişlər üçün istifadə edə bilərsiniz.
332 Kartın token-i saxladıqdan sonra həmin ödənişi qaytarmaq üçün istifade etmək olar.
334 Args:
335 order_id: Ödənişin ID-si.
336 """ # noqa: E501
338 def clearing_order(
339 self,
340 order_id: int,
341 amount: Numeric,
342 ) -> APIResponse[BaseResponseSchema[ClearingOrderResponseSchema]]:
343 """Ödənişin təsdiq edilməsi üçün sorğu
345 **Endpoint** /api/order/{order_id}/exec-tran
347 Example:
348 ```python
349 from integrify.kapital import KapitalRequest
351 KapitalRequest.clearing_order(order_id=123456)
352 ```
354 **Cavab formatı: [`BaseResponseSchema[ClearingOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
356 Bu sorğunu göndərdikdə, cavab olaraq ödənişin təsdiq edilməsi haqda məlumat əldə edə bilərsiniz.
357 Bu funksiyani save_card() funksiyası ilə yaradılan ödənişlər üçün istifadə edə bilərsiniz.
358 Preauthorization əməliyyatının ikinci mərhələsi üçün.
360 Args:
361 order_id: Ödənişin ID-si.
362 """ # noqa: E501
364 def partial_reverse_order(
365 self,
366 order_id: int,
367 amount: Numeric,
368 ) -> APIResponse[BaseResponseSchema[PartialReverseOrderResponseSchema]]:
369 """Ödənişin hissəsini ləğv etmək üçün sorğu
371 **Endpoint** /api/order/{order_id}/exec-tran
373 Example:
374 ```python
375 from integrify.kapital import KapitalRequest
377 KapitalRequest.partial_reverse_order(order_id=123456, amount=5.0)
378 ```
380 **Cavab formatı: [`BaseResponseSchema[PartialReverseOrderResponseSchema]`][integrify.kapital.schemas.response.BaseResponseSchema]**
382 Bu sorğunu göndərdikdə, cavab olaraq ödənişin ləğv edilməsi haqda məlumat əldə edə bilərsiniz.
383 Bu funksiyani clearing_order() funksiyası ilə təsdiq edilmiş ödənişlər üçün istifadə edə bilərsiniz.
384 İlkin məbləğdən az olan vəsaitləri qaytarmaq üçün istifadə olunur. Bir dəfə istifadə etmək olar.
386 Args:
387 order_id: Ödənişin ID-si.
388 amount: Ləğv olunacaq miqdar. Numerik dəyər.
389 """ # noqa: E501
391 def order_with_saved_card(
392 self,
393 amount: Numeric,
394 currency: str,
395 description: Optional[str] = None,
396 ) -> APIResponse[BaseResponseSchema[CreateOrderResponseSchema]]:
397 """
398 Bu funksiya sadece KapitalClientClass daxilinde istifade olunur!
400 **Endpoint** /api/order
402 Bu funksiya pay_with_saved_card() funksiyasında istifadə olunur.
403 Əsas məqsədi order_id və password dəyərlərini əldə etməkdir.
405 Args:
406 amount: Ödəniş miqdarı. Numerik dəyər.
407 currency: Ödənişin məzənnəsi. Mümkün dəyərlər: `["AZN", "USD"]`.
408 description: Ödənişin təsviri. Maksimal uzunluq: 1000 simvol. Məcburi arqument deyil.
409 """ # noqa: E501
411 def link_card_token(
412 self,
413 token: int,
414 order_id: int,
415 password: str,
416 ) -> APIResponse[BaseResponseSchema[LinkCardTokenResponseSchema]]:
417 """
418 Bu funksiya sadece KapitalClientClass daxilinde istifade olunur!
420 **Endpoint** /api/order/{order_id}/set-src-token?password={password}
422 Bu funksiya pay_with_saved_card() funksiyasında istifadə olunur.
423 Əsas məqsədi token-i həmin order üçün set etməkdir.
425 Args:
426 token: Kart tokeni.
427 order_id: Ödənişin ID-si.
428 password: Ödənişin passwordu.
429 """ # noqa: E501
431 def process_payment_with_saved_card(
432 self,
433 amount: Numeric,
434 order_id: int,
435 password: str,
436 ) -> APIResponse[BaseResponseSchema[ProcessPaymentWithSavedCardResponseSchema]]:
437 """
438 Bu funksiya sadece KapitalClientClass daxilinde istifade olunur!
440 **Endpoint** /api/order/{order_id}/exec-tran?password={password}
442 Bu funksiya pay_with_saved_card() funksiyasında istifadə olunur.
443 Əsas məqsədi ödənişi təsdiq etməkdir.
445 Args:
446 amount: Ödəniş miqdarı. Numerik dəyər.
447 order_id: Ödənişin ID-si.
448 password: Ödənişin password
449 """ # noqa: E501
452KapitalRequest = KapitalClientClass(sync=True)
453KapitalAsyncRequest = KapitalClientClass(sync=False)