Skip to content

Commit 53b1f30

Browse files
authored
Add card verification endpoints (#21)
* Add card verification endpoints * Add card verify retrieve endpoint
1 parent cf56972 commit 53b1f30

14 files changed

Lines changed: 237 additions & 6 deletions

craftgate/adapter/payment_adapter.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from craftgate.request.init_apm_deposit_payment_request import InitApmDepositPaymentRequest
1717
from craftgate.request.init_apm_payment_request import InitApmPaymentRequest
1818
from craftgate.request.init_bnpl_payment_request import InitBnplPaymentRequest
19+
from craftgate.request.init_checkout_card_verify_request import InitCheckoutCardVerifyRequest
1920
from craftgate.request.init_checkout_payment_request import InitCheckoutPaymentRequest
2021
from craftgate.request.init_garanti_pay_payment_request import InitGarantiPayPaymentRequest
2122
from craftgate.request.init_pos_apm_payment_request import InitPosApmPaymentRequest
@@ -31,6 +32,7 @@
3132
from craftgate.request.store_card_request import StoreCardRequest
3233
from craftgate.request.update_card_request import UpdateCardRequest
3334
from craftgate.request.update_payment_transaction_request import UpdatePaymentTransactionRequest
35+
from craftgate.request.verify_card_request import VerifyCardRequest
3436
from craftgate.request_options import RequestOptions
3537
from craftgate.response.apm_deposit_payment_response import ApmDepositPaymentResponse
3638
from craftgate.response.apm_payment_complete_response import ApmPaymentCompleteResponse
@@ -40,6 +42,7 @@
4042
from craftgate.response.deposit_payment_response import DepositPaymentResponse
4143
from craftgate.response.fund_transfer_deposit_payment_response import FundTransferDepositPaymentResponse
4244
from craftgate.response.init_bnpl_payment_response import InitBnplPaymentResponse
45+
from craftgate.response.init_checkout_card_verify_response import InitCheckoutCardVerifyResponse
4346
from craftgate.response.init_checkout_payment_response import InitCheckoutPaymentResponse
4447
from craftgate.response.init_garanti_pay_payment_response import InitGarantiPayPaymentResponse
4548
from craftgate.response.init_pos_apm_payment_response import InitPosApmPaymentResponse
@@ -52,9 +55,11 @@
5255
from craftgate.response.payment_transaction_refund_list_response import PaymentTransactionRefundListResponse
5356
from craftgate.response.payment_transaction_refund_response import PaymentTransactionRefundResponse
5457
from craftgate.response.payment_transaction_response import PaymentTransactionResponse
58+
from craftgate.response.retrieve_checkout_card_verify_response import RetrieveCheckoutCardVerifyResponse
5559
from craftgate.response.retrieve_loyalties_response import RetrieveLoyaltiesResponse
5660
from craftgate.response.stored_card_list_response import StoredCardListResponse
5761
from craftgate.response.stored_card_response import StoredCardResponse
62+
from craftgate.response.verify_card_response import VerifyCardResponse
5863
from craftgate.utils.hash_generator import HashGenerator
5964
from craftgate.utils.request_query_params_builder import RequestQueryParamsBuilder
6065

@@ -130,6 +135,28 @@ def init_checkout_payment(self, request: InitCheckoutPaymentRequest) -> InitChec
130135
response_type=InitCheckoutPaymentResponse
131136
)
132137

138+
def init_checkout_card_verify(self, request: InitCheckoutCardVerifyRequest) -> InitCheckoutCardVerifyResponse:
139+
path = "/payment/v1/checkout-card-verify/init"
140+
headers = self._create_headers(request, path)
141+
return self._http_client.request(
142+
method="POST",
143+
url=self.request_options.base_url + path,
144+
headers=headers,
145+
body=request,
146+
response_type=InitCheckoutCardVerifyResponse
147+
)
148+
149+
def retrieve_checkout_card_verify(self, token: str) -> RetrieveCheckoutCardVerifyResponse:
150+
path = "/payment/v1/checkout-card-verify/{}".format(token)
151+
headers = self._create_headers(None, path)
152+
return self._http_client.request(
153+
method="GET",
154+
url=self.request_options.base_url + path,
155+
headers=headers,
156+
body=None,
157+
response_type=RetrieveCheckoutCardVerifyResponse
158+
)
159+
133160
def retrieve_checkout_payment(self, token: str) -> PaymentResponse:
134161
path = "/payment/v1/checkout-payments/{}".format(token)
135162
headers = self._create_headers(None, path)
@@ -413,6 +440,17 @@ def delete_stored_card(self, request: DeleteStoredCardRequest) -> None:
413440
response_type=None
414441
)
415442

443+
def verify_card(self, request: VerifyCardRequest) -> VerifyCardResponse:
444+
path = "/payment/v1/cards/verify"
445+
headers = self._create_headers(request, path)
446+
return self._http_client.request(
447+
method="POST",
448+
url=self.request_options.base_url + path,
449+
headers=headers,
450+
body=request,
451+
response_type=VerifyCardResponse
452+
)
453+
416454
def approve_payment_transactions(self,
417455
request: ApprovePaymentTransactionsRequest) -> PaymentTransactionApprovalListResponse:
418456
path = "/payment/v1/payment-transactions/approve"

craftgate/model/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from .card_expiry_status import CardExpiryStatus
1313
from .card_provider import CardProvider
1414
from .card_type import CardType
15+
from .card_verification_auth_type import CardVerificationAuthType
16+
from .card_verify_status import CardVerifyStatus
1517
from .currency import Currency
1618
from .file_status import FileStatus
1719
from .fraud_action import FraudAction
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from enum import Enum
2+
3+
4+
class CardVerificationAuthType(str, Enum):
5+
NON_THREE_DS = "NON_THREE_DS"
6+
THREE_DS = "THREE_DS"
7+
NONE = "NONE"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from enum import Enum
2+
3+
4+
class CardVerifyStatus(str, Enum):
5+
SUCCESS = "SUCCESS"
6+
FAILURE = "FAILURE"
7+
THREE_DS_PENDING = "THREE_DS_PENDING"

craftgate/request/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from .init_apm_payment_request import InitApmPaymentRequest
3131
from .init_bkm_express_request import InitBkmExpressRequest
3232
from .init_bnpl_payment_request import InitBnplPaymentRequest
33+
from .init_checkout_card_verify_request import InitCheckoutCardVerifyRequest
3334
from .init_checkout_payment_request import InitCheckoutPaymentRequest
3435
from .init_garanti_pay_payment_request import InitGarantiPayPaymentRequest
3536
from .init_juzdan_payment_request import InitJuzdanPaymentRequest
@@ -77,3 +78,4 @@
7778
from .update_payout_account_request import UpdatePayoutAccountRequest
7879
from .update_product_request import UpdateProductRequest
7980
from .update_wallet_request import UpdateWalletRequest
81+
from .verify_card_request import VerifyCardRequest

craftgate/request/dto/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
from .tokenized_card import TokenizedCard
1212
from .update_merchant_pos_commission import UpdateMerchantPosCommission
1313
from .update_merchant_pos_user import UpdateMerchantPosUser
14+
from .verify_card import VerifyCard
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from typing import Optional
2+
3+
4+
class VerifyCard(object):
5+
def __init__(
6+
self,
7+
card_holder_name: Optional[str] = None,
8+
card_number: Optional[str] = None,
9+
expire_year: Optional[str] = None,
10+
expire_month: Optional[str] = None,
11+
cvc: Optional[str] = None,
12+
card_alias: Optional[str] = None,
13+
card_user_key: Optional[str] = None
14+
) -> None:
15+
self.card_holder_name = card_holder_name
16+
self.card_number = card_number
17+
self.expire_year = expire_year
18+
self.expire_month = expire_month
19+
self.cvc = cvc
20+
self.card_alias = card_alias
21+
self.card_user_key = card_user_key
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from decimal import Decimal
2+
from typing import Optional
3+
4+
from craftgate.model.card_verification_auth_type import CardVerificationAuthType
5+
from craftgate.model.currency import Currency
6+
7+
8+
class InitCheckoutCardVerifyRequest(object):
9+
def __init__(
10+
self,
11+
verification_price: Optional[Decimal] = None,
12+
currency: Optional[Currency] = None,
13+
conversation_id: Optional[str] = None,
14+
callback_url: Optional[str] = None,
15+
card_user_key: Optional[str] = None,
16+
payment_authentication_type: Optional[CardVerificationAuthType] = None,
17+
ttl: Optional[int] = None
18+
) -> None:
19+
self.verification_price = verification_price
20+
self.currency = currency
21+
self.conversation_id = conversation_id
22+
self.callback_url = callback_url
23+
self.card_user_key = card_user_key
24+
self.payment_authentication_type = payment_authentication_type
25+
self.ttl = ttl
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from decimal import Decimal
2+
from typing import Optional
3+
4+
from craftgate.model.card_verification_auth_type import CardVerificationAuthType
5+
from craftgate.model.currency import Currency
6+
from craftgate.request.dto.verify_card import VerifyCard
7+
8+
9+
class VerifyCardRequest(object):
10+
def __init__(
11+
self,
12+
card: Optional[VerifyCard] = None,
13+
payment_authentication_type: Optional[CardVerificationAuthType] = None,
14+
verification_price: Optional[Decimal] = None,
15+
currency: Optional[Currency] = None,
16+
client_ip: Optional[str] = None,
17+
conversation_id: Optional[str] = None,
18+
callback_url: Optional[str] = None
19+
) -> None:
20+
self.card = card
21+
self.payment_authentication_type = payment_authentication_type
22+
self.verification_price = verification_price
23+
self.currency = currency
24+
self.client_ip = client_ip
25+
self.conversation_id = conversation_id
26+
self.callback_url = callback_url

craftgate/response/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from .fund_transfer_deposit_payment_response import FundTransferDepositPaymentResponse
1818
from .init_bkm_express_response import InitBkmExpressResponse
1919
from .init_bnpl_payment_response import InitBnplPaymentResponse
20+
from .init_checkout_card_verify_response import InitCheckoutCardVerifyResponse
2021
from .init_checkout_payment_response import InitCheckoutPaymentResponse
2122
from .init_garanti_pay_payment_response import InitGarantiPayPaymentResponse
2223
from .init_juzdan_payment_response import InitJuzdanPaymentResponse
@@ -63,12 +64,14 @@
6364
from .reporting_payment_transaction_refund_list_response import ReportingPaymentTransactionRefundListResponse
6465
from .reporting_payment_transaction_refund_response import ReportingPaymentTransactionRefundResponse
6566
from .retrieve_loyalties_response import RetrieveLoyaltiesResponse
67+
from .retrieve_checkout_card_verify_response import RetrieveCheckoutCardVerifyResponse
6668
from .settlement_response import SettlementResponse
6769
from .stored_card_list_response import StoredCardListResponse
6870
from .stored_card_response import StoredCardResponse
6971
from .wallet_response import WalletResponse
7072
from .wallet_transaction_list_response import WalletTransactionListResponse
7173
from .wallet_transaction_refundable_amount_response import WalletTransactionRefundableAmountResponse
7274
from .wallet_transaction_response import WalletTransactionResponse
75+
from .verify_card_response import VerifyCardResponse
7376
from .withdraw_list_response import WithdrawListResponse
7477
from .withdraw_response import WithdrawResponse

0 commit comments

Comments
 (0)