Coverage for packages/azericard/src/integrify/azericard/client.py: 100%
33 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
1from collections.abc import Coroutine
2from datetime import datetime
3from typing import TYPE_CHECKING, Any, Generic, overload
4from typing import SupportsFloat as Numeric
6from integrify.api import APIClient, APIPayloadHandler, APIResponse, _Async, _Mode, _Sync
7from integrify.azericard import env
8from integrify.azericard.handler import (
9 AuthAndSavePayloadHandler,
10 AuthConfirmPayloadHandler,
11 AuthPayloadHandler,
12 AuthWithSavedCardPayloadHandler,
13 GetTransactionStatusPayloadHandler,
14 TransferConfirmPayloadHandler,
15 TransferStartPayloadHandler,
16)
17from integrify.azericard.schemas.enums import AuthorizationResponseType, AuthorizationType
18from integrify.azericard.schemas.request.auth import MInfo
19from integrify.azericard.schemas.response import (
20 GetTransactionStatusResponseSchema,
21 TransferConfirmResponseSchema,
22 TransferDeclineResponseSchema,
23)
24from integrify.schemas import DryResponse
25from integrify.utils import UNSET as _UNSET
26from integrify.utils import Unset as Unsettable
29class AzeriCardClientClass(APIClient, Generic[_Mode]):
30 """AzeriCard sorğular üçün baza class"""
32 def __init__(
33 self,
34 name: str = 'AzeriCard',
35 base_url: str | None = None,
36 default_handler: APIPayloadHandler | None = None,
37 sync: bool = True,
38 dry: bool = False,
39 ):
40 super().__init__(name, base_url, default_handler, sync, dry)
42 self.add_url(
43 'authorization',
44 env.MpiAPI.AUTHORIZATION,
45 'POST',
46 base_url=env.MpiAPI.BASE_URL,
47 )
48 self.add_handler('authorization', AuthPayloadHandler)
50 self.add_url(
51 'finalize',
52 env.MpiAPI.AUTHORIZATION,
53 verb='POST',
54 base_url=env.MpiAPI.BASE_URL,
55 )
56 self.add_handler('finalize', AuthConfirmPayloadHandler)
58 self.add_url(
59 'auth_and_save_card',
60 env.MpiAPI.SAVE_CARD,
61 verb='POST',
62 base_url=env.MpiAPI.BASE_URL,
63 )
64 self.add_handler('auth_and_save_card', AuthAndSavePayloadHandler)
66 self.add_url(
67 'auth_with_saved_card',
68 env.MpiAPI.SAVE_CARD,
69 verb='POST',
70 base_url=env.MpiAPI.BASE_URL,
71 )
72 self.add_handler('auth_with_saved_card', AuthWithSavedCardPayloadHandler)
74 self.add_url(
75 'get_transaction_status',
76 env.MpiAPI.AUTHORIZATION,
77 verb='POST',
78 base_url=env.MpiAPI.BASE_URL,
79 )
80 self.add_handler('get_transaction_status', GetTransactionStatusPayloadHandler)
82 self.add_url('transfer_start', env.MtAPI.TRANSFER, verb='GET', base_url=env.MtAPI.BASE_URL)
83 self.add_handler('transfer_start', TransferStartPayloadHandler)
85 self.add_url(
86 'transfer_confirm',
87 env.MtAPI.TRANSFER_CONFIRM,
88 verb='POST',
89 base_url=env.MtAPI.BASE_URL,
90 )
91 self.add_handler('transfer_confirm', TransferConfirmPayloadHandler)
93 self.add_url(
94 'transfer_decline',
95 env.MtAPI.TRANSFER_DECLINE,
96 verb='POST',
97 base_url=env.MtAPI.BASE_URL,
98 )
100 if TYPE_CHECKING:
101 # pylint: disable=missing-function-docstring,unused-argument
103 @overload
104 def authorization(
105 self: 'AzeriCardClientClass[_Sync]',
106 amount: Numeric,
107 currency: str,
108 order: str,
109 desc: str,
110 trtype: AuthorizationType,
111 merch_name: str = env.AZERICARD_MERCHANT_NAME,
112 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
113 terminal: str = env.AZERICARD_MERCHANT_ID,
114 email: str = env.AZERICARD_MERCHANT_EMAIL,
115 country: Unsettable[str] = _UNSET,
116 merch_gmt: Unsettable[str] = _UNSET,
117 backref: str = env.AZERICARD_CALLBACK_URL,
118 timestamp: datetime | str = datetime.now(),
119 lang: str = env.AZERICARD_INTERFACE_LANG,
120 name: Unsettable[str] = _UNSET,
121 m_info: Unsettable[MInfo] = _UNSET,
122 ) -> DryResponse:
123 """Ümumi Ödəniş/Pul Dondurma/Dondurulmanı sorğusu
125 **Endpoint:** *https://{test}mpi.3dsecure.az/cgi-bin/cgi_link*
127 Example:
128 ```python
129 from integrify.azericard import AzeriCardClient
130 from integrify.azericard.schemas.enums import AuthorizationType
132 AzeriCardClient.authorization(amount=100, currency='AZN', order='12345678', desc='Ödəniş', trype=AuthorizationType.FREEZE, name='Filankes')
133 ```
135 **Cavab formatı**: Yoxdur. Redirect baş verir, nəticə callback sorğusunda qayıdır.
137 Args:
138 amount: Ödəniş miqdarı. Numerik dəyər.
139 currency: Sifariş valyutası: 3 simvollu valyuta: (AZN)
140 order: Satıcı sifariş ID-si, rəqəmsal. Son 6 rəqəm sistem izi audit nömrəsi kimi istifadə olunur, terminal id üçün bir gün ərzində unikal olmalıdır
141 desc: Ödənişin təsviri/açıqlaması
142 merch_name: Satıcının (merchant) adı (kart istifadəçisinin anladığı formada olmalıdır)
143 merch_url: Satıcının web site URL-i
144 terminal: Bank tərəfindən təyin edilmiş Merchant Terminal ID. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir.
145 trtype: Tranzaksiya növü: 0 (Pre-Avtorizasiya əməliyyatı, pulu bloklamaq/dondurmaq) və ya 1 (Avtorizasiya əməliyyatı, birbaşa ödəniş)
146 email: Bildirişlər üçün Email ünvan. Qeyd olunmuş sahə doldurulduğu halda Gateway email ünvanı müəyyən etmək üçün əməliyyat nəticəsi haqqında bildiriş göndərə bilər
147 country: Merchant shop 2 simvollu ölkə kodu. Merchant sistemi Gateway serverin yerləşdiyi ölkədən fərqli ölkədə yerləşirsə qeyd olunmalıdır
148 merch_gmt: Merchant-ın UTC/GMT vaxt zonası. Merchant sistemi Gateway serverin yerləşdiyi vaxt zonasından fərqli vaxt zonasında yerləşirsə qeyd olunmalıdır
149 backref: Avtorizasiya nəticəsinin yerləşdirilməsində(post) istifadə olunan Merchant URL
150 timestamp: Merchant server-lə e-Gateway server arasında zaman fərqi 1 saatı aşmamalıdır, əks halda Gateway tranzaksiyaya imtina verəcək. Dəyər verilmədikdə, `now` avtomatik göndəriləcək
151 lang: Dil seçimi
152 name: Müştərinin adı (kartda göstərildiyi kimi)
153 m_info: Əlavə məlumatlar. Məs: {"browserScreenHeight":"1920","browserScreenWidth":"1080","browserTZ":"0","mobilePhone":{"cc":"994","subscriber":"5077777777"}}
154 """ # noqa: E501
156 @overload
157 def authorization(
158 self: 'AzeriCardClientClass[_Async]',
159 amount: Numeric,
160 currency: str,
161 order: str,
162 desc: str,
163 trtype: AuthorizationType,
164 merch_name: str = env.AZERICARD_MERCHANT_NAME,
165 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
166 terminal: str = env.AZERICARD_MERCHANT_ID,
167 email: str = env.AZERICARD_MERCHANT_EMAIL,
168 country: Unsettable[str] = _UNSET,
169 merch_gmt: Unsettable[str] = _UNSET,
170 backref: str = env.AZERICARD_CALLBACK_URL,
171 timestamp: datetime | str = datetime.now(),
172 lang: str = env.AZERICARD_INTERFACE_LANG,
173 name: Unsettable[str] = _UNSET,
174 m_info: Unsettable[MInfo] = _UNSET,
175 ) -> Coroutine[Any, Any, DryResponse]: ...
176 def authorization(self, *args: Any, **kwds: Any) -> Any: ...
178 @overload
179 def finalize(
180 self: 'AzeriCardClientClass[_Sync]',
181 amount: Numeric,
182 currency: str,
183 order: str,
184 rrn: str,
185 int_ref: str,
186 trtype: AuthorizationResponseType,
187 terminal: str = env.AZERICARD_MERCHANT_ID,
188 timestamp: datetime | str = datetime.now(),
189 ) -> DryResponse:
190 """PreAuthorization (pulu bloklama) sorğusuna cavab və ya direkt ödənişi refund sorğusu
192 **Endpoint:** *https://{test}mpi.3dsecure.az/cgi-bin/cgi_link*
194 Example:
195 ```python
196 from integrify.azericard import AzeriCardClient
197 from integrify.azericard.schemas.enums import AuthorizationResponseType
199 AzeriCardClient.finalize(amount=100, currency='AZN', order='12345678', rrn='payment_rrn', int_ref='int_ref', trtype=AuthorizationResponseType.ACCEPT_PAYMENT)
200 ```
202 **Cavab formatı**:
204 Args:
205 amount: Ödəniş miqdarı. Numerik dəyər.
206 currency: Sifariş valyutası: 3 simvollu valyuta: (AZN)
207 order: Satıcı sifariş ID-si, rəqəmsal. Son 6 rəqəm sistem izi audit nömrəsi kimi istifadə olunur, terminal id üçün bir gün ərzində unikal olmalıdır
208 rrn: Ödənişin RRN-i, Authorization sorğusuna response-da gəlir
209 int_ref: Ödənişin referansı, Authorization sorğusuna response-da gəlir
210 trtype: Tranzaksiya növü: 21 (Təsdiq), 22 (Geri qaytarma), 24 (Ləğv etmə, spesifik banklar üçün istifadə olunur)
211 timestamp: Merchant server-lə e-Gateway server arasında zaman fərqi 1 saatı aşmamalıdır, əks halda Gateway tranzaksiyaya imtina verəcək. Dəyər verilmədikdə, `now` avtomatik göndəriləcək
212 """ # noqa: E501
214 @overload
215 def finalize(
216 self: 'AzeriCardClientClass[_Async]',
217 amount: Numeric,
218 currency: str,
219 order: str,
220 rrn: str,
221 int_ref: str,
222 trtype: AuthorizationResponseType,
223 terminal: str = env.AZERICARD_MERCHANT_ID,
224 timestamp: datetime | str = datetime.now(),
225 ) -> Coroutine[Any, Any, DryResponse]: ...
226 def finalize(self, *args: Any, **kwds: Any) -> Any: ...
228 @overload
229 def auth_and_save_card(
230 self: 'AzeriCardClientClass[_Sync]',
231 amount: Numeric,
232 currency: str,
233 order: str,
234 desc: str,
235 trtype: AuthorizationType,
236 merch_name: str = env.AZERICARD_MERCHANT_NAME,
237 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
238 terminal: str = env.AZERICARD_MERCHANT_ID,
239 email: str = env.AZERICARD_MERCHANT_EMAIL,
240 country: Unsettable[str] = _UNSET,
241 merch_gmt: Unsettable[str] = _UNSET,
242 backref: str = env.AZERICARD_CALLBACK_URL,
243 timestamp: datetime | str = datetime.now(),
244 lang: str = env.AZERICARD_INTERFACE_LANG,
245 name: Unsettable[str] = _UNSET,
246 m_info: Unsettable[MInfo] = _UNSET,
247 ) -> DryResponse:
248 """Ümumi kartı saxlayaraq ödəniş sorğusu
250 **Endpoint:** *https://{test}mpi.3dsecure.az/token/cgi_link*
252 Example:
253 ```python
254 from integrify.azericard import AzeriCardClient
255 from integrify.azericard.schemas.enums import AuthorizationType
257 AzeriCardClient.auth_and_save_card(amount=100, currency='AZN', order='12345678', desc='Ödəniş', trype=AuthorizationType.DIRECT, name='Filankes')
258 ```
260 **Cavab formatı**: Callback sorğu baş verir
262 Args:
263 amount: Ödəniş miqdarı. Numerik dəyər.
264 currency: Sifariş valyutası: 3 simvollu valyuta: (AZN)
265 order: Satıcı sifariş ID-si, rəqəmsal. Son 6 rəqəm sistem izi audit nömrəsi kimi istifadə olunur, terminal id üçün bir gün ərzində unikal olmalıdır
266 desc: Ödənişin təsviri/açıqlaması
267 merch_name: Satıcının (merchant) adı (kart istifadəçisinin anladığı formada olmalıdır)
268 merch_url: Satıcının web site URL-i
269 trtype: Tranzaksiya növü = 0 (Pre-Avtorizasiya əməliyyatı, pulu bloklamaq/dondurmaq),Tranzaksiya növü = 1 (Avtorizasiya əməliyyatı)
270 backref: Avtorizasiya nəticəsinin yerləşdirilməsində(post) istifadə olunan Merchant URL
271 email: Bildirişlər üçün Email ünvan. Qeyd olunmuş sahə doldurulduğu halda Gateway email ünvanı müəyyən etmək üçün əməliyyat nəticəsi haqqında bildiriş göndərə bilər
272 country: Merchant shop 2 simvollu ölkə kodu. Merchant sistemi Gateway serverin yerləşdiyi ölkədən fərqli ölkədə yerləşirsə qeyd olunmalıdır
273 merch_gmt: Merchant-ın UTC/GMT vaxt zonası. Merchant sistemi Gateway serverin yerləşdiyi vaxt zonasından fərqli vaxt zonasında yerləşirsə qeyd olunmalıdır
274 timestamp: Merchant server-lə e-Gateway server arasında zaman fərqi 1 saatı aşmamalıdır, əks halda Gateway tranzaksiyaya imtina verəcək. Dəyər verilmədikdə, `now` avtomatik göndəriləcək
275 lang: Dil seçimi
276 name: Müştərinin adı (kartda göstərildiyi kimi)
277 m_info: Əlavə məlumatlar. Məs: {"browserScreenHeight":"1920","browserScreenWidth":"1080","browserTZ":"0","mobilePhone":{"cc":"994","subscriber":"5077777777"}}
278 """ # noqa: E501
280 @overload
281 def auth_and_save_card(
282 self: 'AzeriCardClientClass[_Async]',
283 amount: Numeric,
284 currency: str,
285 order: str,
286 desc: str,
287 trtype: AuthorizationType,
288 merch_name: str = env.AZERICARD_MERCHANT_NAME,
289 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
290 terminal: str = env.AZERICARD_MERCHANT_ID,
291 email: str = env.AZERICARD_MERCHANT_EMAIL,
292 country: Unsettable[str] = _UNSET,
293 merch_gmt: Unsettable[str] = _UNSET,
294 backref: str = env.AZERICARD_CALLBACK_URL,
295 timestamp: datetime | str = datetime.now(),
296 lang: str = env.AZERICARD_INTERFACE_LANG,
297 name: Unsettable[str] = _UNSET,
298 m_info: Unsettable[MInfo] = _UNSET,
299 ) -> Coroutine[Any, Any, DryResponse]: ...
300 def auth_and_save_card(self, *args: Any, **kwds: Any) -> Any: ...
302 @overload
303 def auth_with_saved_card(
304 self: 'AzeriCardClientClass[_Sync]',
305 amount: Numeric,
306 currency: str,
307 order: str,
308 desc: str,
309 trtype: AuthorizationType,
310 token: str,
311 merch_name: str = env.AZERICARD_MERCHANT_NAME,
312 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
313 terminal: str = env.AZERICARD_MERCHANT_ID,
314 email: str = env.AZERICARD_MERCHANT_EMAIL,
315 country: Unsettable[str] = _UNSET,
316 merch_gmt: Unsettable[str] = _UNSET,
317 backref: str = env.AZERICARD_CALLBACK_URL,
318 timestamp: datetime | str = datetime.now(),
319 lang: str = env.AZERICARD_INTERFACE_LANG,
320 name: Unsettable[str] = _UNSET,
321 m_info: Unsettable[MInfo] = _UNSET,
322 ) -> DryResponse:
323 """Ümumi saxlanmış kart ilə Authurization sorğusu
325 **Endpoint:** *https://{test}mpi.3dsecure.az/token/cgi_link*
327 Example:
328 ```python
329 from integrify.azericard import AzeriCardClient
330 from integrify.azericard.schemas.enums import AuthorizationType
332 AzeriCardClient.auth_with_saved_card(amount=100, currency='AZN', order='12345678', desc='Ödəniş', trype=AuthorizationType.DIRECT, name='Filankes', token='card-token')
333 ```
335 **Cavab formatı**: Callback sorğu baş verir
337 Args:
338 amount: Ödəniş miqdarı. Numerik dəyər.
339 currency: Sifariş valyutası: 3 simvollu valyuta: (AZN)
340 order: Satıcı sifariş ID-si, rəqəmsal. Son 6 rəqəm sistem izi audit nömrəsi kimi istifadə olunur, terminal id üçün bir gün ərzində unikal olmalıdır
341 desc: Ödənişin təsviri/açıqlaması
342 merch_name: Satıcının (merchant) adı (kart istifadəçisinin anladığı formada olmalıdır)
343 merch_url: Satıcının web site URL-i
344 trtype: Tranzaksiya növü = 0 (Pre-Avtorizasiya əməliyyatı, pulu bloklamaq/dondurmaq),Tranzaksiya növü = 1 (Avtorizasiya əməliyyatı)
345 backref: Avtorizasiya nəticəsinin yerləşdirilməsində(post) istifadə olunan Merchant URL
346 token: Yadda saxlanılmış kartın ID-si
347 email: Bildirişlər üçün Email ünvan. Qeyd olunmuş sahə doldurulduğu halda Gateway email ünvanı müəyyən etmək üçün əməliyyat nəticəsi haqqında bildiriş göndərə bilər
348 country: Merchant shop 2 simvollu ölkə kodu. Merchant sistemi Gateway serverin yerləşdiyi ölkədən fərqli ölkədə yerləşirsə qeyd olunmalıdır
349 merch_gmt: Merchant-ın UTC/GMT vaxt zonası. Merchant sistemi Gateway serverin yerləşdiyi vaxt zonasından fərqli vaxt zonasında yerləşirsə qeyd olunmalıdır
350 timestamp: Merchant server-lə e-Gateway server arasında zaman fərqi 1 saatı aşmamalıdır, əks halda Gateway tranzaksiyaya imtina verəcək. Dəyər verilmədikdə, `now` avtomatik göndəriləcək
351 lang: Dil seçimi
352 name: Müştərinin adı (kartda göstərildiyi kimi)
353 m_info: Əlavə məlumatlar. Məs: {"browserScreenHeight":"1920","browserScreenWidth":"1080","browserTZ":"0","mobilePhone":{"cc":"994","subscriber":"5077777777"}}
354 """ # noqa: E501
356 @overload
357 def auth_with_saved_card(
358 self: 'AzeriCardClientClass[_Async]',
359 amount: Numeric,
360 currency: str,
361 order: str,
362 desc: str,
363 trtype: AuthorizationType,
364 token: str,
365 merch_name: str = env.AZERICARD_MERCHANT_NAME,
366 merch_url: str = env.AZERICARD_MERCHANT_EMAIL,
367 terminal: str = env.AZERICARD_MERCHANT_ID,
368 email: str = env.AZERICARD_MERCHANT_EMAIL,
369 country: Unsettable[str] = _UNSET,
370 merch_gmt: Unsettable[str] = _UNSET,
371 backref: str = env.AZERICARD_CALLBACK_URL,
372 timestamp: datetime | str = datetime.now(),
373 lang: str = env.AZERICARD_INTERFACE_LANG,
374 name: Unsettable[str] = _UNSET,
375 m_info: Unsettable[MInfo] = _UNSET,
376 ) -> Coroutine[Any, Any, DryResponse]: ...
377 def auth_with_saved_card(self, *args: Any, **kwds: Any) -> Any: ...
379 @overload
380 def get_transaction_status(
381 self: 'AzeriCardClientClass[_Sync]',
382 tran_trtype: AuthorizationType | AuthorizationResponseType,
383 order: str,
384 terminal: str = env.AZERICARD_MERCHANT_ID,
385 timestamp: datetime | str = datetime.now(),
386 ) -> APIResponse[GetTransactionStatusResponseSchema]:
387 """Bitmiş tranzaksiyanın statusunu alma sorğusu
389 **Endpoint:** *https://{test}mpi.3dsecure.az/cgi-bin/cgi_link*
391 Example:
392 ```python
393 from integrify.azericard import AzeriCardClient
394 from integrify.azericard.schemas.enums import AuthorizationType
396 AzeriCardClient.get_transaction_status(tran_trtype=AuthorizationType.DIRECT, order='12345678')
397 ```
399 **Cavab formatı**: [`GetTransactionStatusResponseSchema`][integrify.azericard.schemas.response.GetTransactionStatusResponseSchema]
401 Args:
402 tran_trtype: Sorğu üçün orijinal əməliyyat növü, TRTYPE (Məsələn: 0, 1, 22, 24 və s.)
403 order: Satıcı sifariş ID-si, rəqəmsal. Son 6 rəqəm sistem izi audit nömrəsi kimi istifadə olunur, terminal id üçün bir gün ərzində unikal olmalıdır
404 terminal: Bank tərəfindən təyin edilmiş Merchant Terminal ID. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir.
405 timestamp: Merchant server-lə e-Gateway server arasında zaman fərqi 1 saatı aşmamalıdır, əks halda Gateway tranzaksiyaya imtina verəcək. Dəyər verilmədikdə, `now` avtomatik göndəriləcək
406 """ # noqa: E501
408 @overload
409 def get_transaction_status(
410 self: 'AzeriCardClientClass[_Async]',
411 tran_trtype: AuthorizationType | AuthorizationResponseType,
412 order: str,
413 terminal: str = env.AZERICARD_MERCHANT_ID,
414 timestamp: datetime | str = datetime.now(),
415 ) -> Coroutine[Any, Any, APIResponse[GetTransactionStatusResponseSchema]]: ...
416 def get_transaction_status(self, *args: Any, **kwds: Any) -> Any: ...
418 @overload
419 def transfer_start(
420 self: 'AzeriCardClientClass[_Sync]',
421 merchant: str,
422 srn: str,
423 amount: Numeric,
424 cur: str,
425 receiver_credentials: str,
426 redirect_link: str,
427 ) -> DryResponse:
428 """User-ə ödəniş etmək sorğusu
430 **Endpoint:** *https://{test}mt.3dsecure.az/payment/view*
432 Example:
433 ```python
434 from integrify.azericard import AzeriCardClient
436 AzeriCardClient.transfer_start(merchant='MyMerchant', srn='12345678', amount=100, cur='944', receiver_credentials='Filankəsov Filankəs', redirect_link='my-redirect-api-for-user')
437 ```
439 **Cavab formatı**: Callback sorğu baş verir
441 Args:
442 merchant: Şirkət adı
443 srn: Unikal əməliyyat nömrəsi
444 amount: Ödəniş məbləği
445 cur: Ödəniş valyutasının 3 rəqəmli kodu (944 - AZN)
446 receiver_credentials: İstifadəçinin tam adı
447 redirect_link: Əməliyyatın sonunda müştərini yönləndirmək istədiyiniz keçid linki
448 """ # noqa: E501
450 @overload
451 def transfer_start(
452 self: 'AzeriCardClientClass[_Async]',
453 merchant: str,
454 srn: str,
455 amount: Numeric,
456 cur: str,
457 receiver_credentials: str,
458 redirect_link: str,
459 ) -> Coroutine[Any, Any, DryResponse]: ...
460 def transfer_start(self, *args: Any, **kwds: Any) -> Any: ...
462 @overload
463 def transfer_confirm(
464 self: 'AzeriCardClientClass[_Sync]',
465 merchant: str,
466 srn: str,
467 amount: Numeric,
468 cur: str,
469 timestamp: datetime | str = datetime.now(),
470 ) -> APIResponse[TransferConfirmResponseSchema]:
471 """User-ə ödənişi təsdiqləmək sorğusu
473 **Endpoint:** *https://{test}mt.3dsecure.az/api/confirm*
475 Example:
476 ```python
477 from integrify.azericard import AzeriCardClient
479 AzeriCardClient.transfer_confirm(merchant='MyMerchant', srn='12345678', amount=100, cur='944')
480 ```
482 **Cavab formatı**: [TransferConfirmResponseSchema][integrify.azericard.schemas.response.TransferConfirmResponseSchema]
484 Args:
485 merchant: Şirkət adı
486 srn: Unikal əməliyyat nömrəsi
487 amount: Ödəniş məbləği
488 cur: Ödəniş valyutasının 3 rəqəmli kodu (944 - AZN)
489 timestamp: Dəyər verilmədikdə, `now` avtomatik göndəriləcək
490 """ # noqa: E501
492 @overload
493 def transfer_confirm(
494 self: 'AzeriCardClientClass[_Async]',
495 merchant: str,
496 srn: str,
497 amount: Numeric,
498 cur: str,
499 timestamp: datetime | str = datetime.now(),
500 ) -> Coroutine[Any, Any, APIResponse[TransferConfirmResponseSchema]]: ...
501 def transfer_confirm(self, *args: Any, **kwds: Any) -> Any: ...
503 @overload
504 def transfer_decline(
505 self: 'AzeriCardClientClass[_Sync]',
506 merchant: str,
507 srn: str,
508 amount: Numeric,
509 cur: str,
510 timestamp: datetime | str = datetime.now(),
511 ) -> APIResponse[TransferDeclineResponseSchema]:
512 """User-ə ödənişi imtina etmək sorğusu
514 **Endpoint:** *https://{test}mt.3dsecure.az/api/decline*
516 Example:
517 ```python
518 from integrify.azericard import AzeriCardClient
520 AzeriCardClient.transfer_decline(merchant='MyMerchant', srn='12345678', amount=100, cur='944')
521 ```
523 **Cavab formatı**: [TransferDeclineResponseSchema][integrify.azericard.schemas.response.TransferDeclineResponseSchema]
525 Args:
526 merchant: Şirkət adı
527 srn: Unikal əməliyyat nömrəsi
528 amount: Ödəniş məbləği
529 cur: Ödəniş valyutasının 3 rəqəmli kodu (944 - AZN)
530 timestamp: Dəyər verilmədikdə, `now` avtomatik göndəriləcək
531 """ # noqa: E501
533 @overload
534 def transfer_decline(
535 self: 'AzeriCardClientClass[_Async]',
536 merchant: str,
537 srn: str,
538 amount: Numeric,
539 cur: str,
540 timestamp: datetime | str = datetime.now(),
541 ) -> Coroutine[Any, Any, APIResponse[TransferDeclineResponseSchema]]: ...
542 def transfer_decline(self, *args: Any, **kwds: Any) -> Any: ...
545AzeriCardClient: 'AzeriCardClientClass[_Sync]' = AzeriCardClientClass(sync=True)
546AzeriCardAsyncClient: 'AzeriCardClientClass[_Async]' = AzeriCardClientClass(sync=False)