Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions craftgate/adapter/payment_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from craftgate.request.refund_payment_transaction_mark_as_refunded_request import \
RefundPaymentTransactionMarkAsRefundedRequest
from craftgate.request.refund_payment_transaction_request import RefundPaymentTransactionRequest
from craftgate.request.retrieve_card_from_ivr_request import RetrieveCardFromIvrRequest
from craftgate.request.retrieve_loyalties_request import RetrieveLoyaltiesRequest
from craftgate.request.retrieve_provider_card_request import RetrieveProviderCardRequest
from craftgate.request.search_stored_cards_request import SearchStoredCardsRequest
Expand All @@ -52,6 +53,7 @@
from craftgate.response.init_pos_apm_payment_response import InitPosApmPaymentResponse
from craftgate.response.init_three_ds_payment_response import InitThreeDSPaymentResponse
from craftgate.response.instant_transfer_banks_response import InstantTransferBanksResponse
from craftgate.response.ivr_card_tokenization_response import IVRCardTokenizationResponse
from craftgate.response.multi_payment_response import MultiPaymentResponse
from craftgate.response.payment_refund_response import PaymentRefundResponse
from craftgate.response.payment_response import PaymentResponse
Expand Down Expand Up @@ -612,6 +614,18 @@ def retrieve_provider_cards(self, request: RetrieveProviderCardRequest) -> Store
response_type=StoredCardListResponse
)

def retrieve_card_from_ivr(self, request: RetrieveCardFromIvrRequest) -> IVRCardTokenizationResponse:
query = RequestQueryParamsBuilder.build_query_params(request)
path = "/payment/v1/ivr-cards{}".format(query)
headers = self._create_headers(None, path)
return self._http_client.request(
method="GET",
url=self.request_options.base_url + path,
headers=headers,
body=None,
response_type=IVRCardTokenizationResponse
)

def is_3d_secure_callback_verified(self, three_d_secure_callback_key: str, params: dict) -> bool:
hash_val = params.get("hash")
hash_string = "{}###{}###{}###{}###{}###{}###{}".format(
Expand Down
10 changes: 10 additions & 0 deletions craftgate/request/retrieve_card_from_ivr_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from typing import Optional

class RetrieveCardFromIvrRequest(object):
def __init__(
self,
card_user_key: Optional[str] = None,
call_token: Optional[str] = None,
) -> None:
self.card_user_key = card_user_key
self.call_token = call_token
16 changes: 16 additions & 0 deletions craftgate/response/ivr_card_tokenization_response.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from typing import Optional

class IVRCardTokenizationResponse(object):
def __init__(
self,
bin_number: Optional[str] = None,
last_four_digits: Optional[str] = None,
card_user_key: Optional[str] = None,
card_token: Optional[str] = None,
secure_fields_token: Optional[str] = None
) -> None:
self.bin_number = bin_number
self.last_four_digits = last_four_digits
self.card_user_key = card_user_key
self.card_token = card_token
self.secure_fields_token = secure_fields_token
11 changes: 11 additions & 0 deletions tests/test_payment_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
RetrieveProviderCardRequest, SearchStoredCardsRequest, StoreCardRequest, UpdateCardRequest, \
UpdatePaymentTransactionRequest, VerifyCard, VerifyCardRequest
from craftgate.request.init_multi_payment_request import InitMultiPaymentRequest
from craftgate.request.retrieve_card_from_ivr_request import RetrieveCardFromIvrRequest
from craftgate.response import MultiPaymentResponse, PaymentTransactionApprovalListResponse, PaymentTransactionResponse, \
StoredCardListResponse
from craftgate.response.ivr_card_tokenization_response import IVRCardTokenizationResponse


class PaymentSample(unittest.TestCase):
Expand Down Expand Up @@ -1635,6 +1637,15 @@ def test_retrieve_provider_card(self):
print(resp)
self.assertIsNotNone(resp)

def test_retrieve_card_from_ivr(self):
req = RetrieveCardFromIvrRequest()
req.card_user_key = "45f12c74-3000-465c-96dc-876850e7dd7a"
req.call_token = "0309ac2d-c5a5-4b4f-a91f-5c444ba07b24"

resp: IVRCardTokenizationResponse = self.payment.retrieve_card_from_ivr(req)
print(resp)
self.assertIsNotNone(resp)

def test_should_validate_3d_secure_callback_verified(self):
merchant_key = "merchantThreeDsCallbackKeySndbox"
params = {
Expand Down
Loading