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
3 changes: 3 additions & 0 deletions craftgate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,6 @@ def settlement_reporting(self):

def wallet(self):
return WalletAdapter(self.options)

def meal_voucher_card_tokenization(self):
return MealVoucherCardTokenizationAdapter(self.options)
1 change: 1 addition & 0 deletions craftgate/adapter/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .bank_account_tracking_adapter import BankAccountTrackingAdapter
from .meal_voucher_card_tokenization_adapter import MealVoucherCardTokenizationAdapter
from .base_adapter import BaseAdapter
from .bkm_express_payment_adapter import BkmExpressPaymentAdapter
from .file_reporting_adapter import FileReportingAdapter
Expand Down
11 changes: 0 additions & 11 deletions craftgate/adapter/bkm_express_payment_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,6 @@ def complete(self, request: CompleteBkmExpressRequest) -> PaymentResponse:
response_type=PaymentResponse
)

def retrieve_payment(self, ticket_id: str) -> PaymentResponse:
path = "/payment/v1/bkm-express/payments/{}".format(ticket_id)
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=PaymentResponse
)

def retrieve_payment_by_token(self, token: str) -> PaymentResponse:
path = "/payment/v1/bkm-express/{}".format(token)
headers = self._create_headers(None, path)
Expand Down
50 changes: 50 additions & 0 deletions craftgate/adapter/meal_voucher_card_tokenization_adapter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from craftgate.adapter.base_adapter import BaseAdapter
from craftgate.net.base_http_client import BaseHttpClient
from craftgate.request.init_meal_voucher_card_tokenization_request import InitMealVoucherCardTokenizationRequest
from craftgate.request.meal_voucher_card_tokenization_regenerate_request import \
MealVoucherCardTokenizationRegenerateRequest
from craftgate.request.meal_voucher_card_tokenization_complete_request import \
MealVoucherCardTokenizationCompleteRequest
from craftgate.request_options import RequestOptions
from craftgate.response.init_meal_voucher_card_tokenization_response import InitMealVoucherCardTokenizationResponse
from craftgate.response.meal_voucher_card_tokenization_complete_response import \
MealVoucherCardTokenizationCompleteResponse


class MealVoucherCardTokenizationAdapter(BaseAdapter):
def __init__(self, request_options: RequestOptions) -> None:
super(MealVoucherCardTokenizationAdapter, self).__init__(request_options)
self._http_client = BaseHttpClient()

def init(self, request: InitMealVoucherCardTokenizationRequest) -> InitMealVoucherCardTokenizationResponse:
path = "/payment/v1/meal-voucher/card-tokenizations/init"
headers = self._create_headers(request, path)
return self._http_client.request(
method="POST",
url=self.request_options.base_url + path,
headers=headers,
body=request,
response_type=InitMealVoucherCardTokenizationResponse
)

def regenerate(self, session_id: str, request: MealVoucherCardTokenizationRegenerateRequest) -> InitMealVoucherCardTokenizationResponse:
path = f"/payment/v1/meal-voucher/card-tokenizations/{session_id}/regenerate"
headers = self._create_headers(request, path)
return self._http_client.request(
method="POST",
url=self.request_options.base_url + path,
headers=headers,
body=request,
response_type=InitMealVoucherCardTokenizationResponse
)

def complete(self, session_id: str, request: MealVoucherCardTokenizationCompleteRequest) -> MealVoucherCardTokenizationCompleteResponse:
path = f"/payment/v1/meal-voucher/card-tokenizations/{session_id}/complete"
headers = self._create_headers(request, path)
return self._http_client.request(
method="POST",
url=self.request_options.base_url + path,
headers=headers,
body=request,
response_type=MealVoucherCardTokenizationCompleteResponse
)
5 changes: 4 additions & 1 deletion craftgate/request/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .apple_pay_merchant_session_create_request import ApplePayMerchantSessionCreateRequest
from .approve_payment_transactions_request import ApprovePaymentTransactionsRequest
from .bnpl_payment_offer_request import BnplPaymentOfferRequest
from .bnpl_limit_inquiry_request import BnplLimitInquiryRequest
from .check_masterpass_user_request import CheckMasterpassUserRequest
from .clone_card_request import CloneCardRequest
from .complete_apm_payment_request import CompleteApmPaymentRequest
Expand Down Expand Up @@ -28,12 +29,12 @@
from .fraud_value_list_request import FraudValueListRequest
from .init_apm_deposit_payment_request import InitApmDepositPaymentRequest
from .init_apm_payment_request import InitApmPaymentRequest
from .bnpl_limit_inquiry_request import BnplLimitInquiryRequest
from .init_bkm_express_request import InitBkmExpressRequest
from .init_bnpl_payment_request import InitBnplPaymentRequest
from .init_checkout_card_verify_request import InitCheckoutCardVerifyRequest
from .init_checkout_payment_request import InitCheckoutPaymentRequest
from .init_garanti_pay_payment_request import InitGarantiPayPaymentRequest
from .init_meal_voucher_card_tokenization_request import InitMealVoucherCardTokenizationRequest
from .init_juzdan_payment_request import InitJuzdanPaymentRequest
from .init_pos_apm_payment_request import InitPosApmPaymentRequest
from .init_three_ds_payment_request import InitThreeDSPaymentRequest
Expand All @@ -42,6 +43,8 @@
from .masterpass_payment_threeds_init_request import MasterpassPaymentThreeDSInitRequest
from .masterpass_payment_token_generate_request import MasterpassPaymentTokenGenerateRequest
from .masterpass_retrieve_loyalties_request import MasterpassRetrieveLoyaltiesRequest
from .meal_voucher_card_tokenization_regenerate_request import MealVoucherCardTokenizationRegenerateRequest
from .meal_voucher_card_tokenization_complete_request import MealVoucherCardTokenizationCompleteRequest
from .post_auth_payment_request import PostAuthPaymentRequest
from .refund_payment_request import RefundPaymentRequest
from .refund_payment_transaction_mark_as_refunded_request import RefundPaymentTransactionMarkAsRefundedRequest
Expand Down
15 changes: 15 additions & 0 deletions craftgate/request/dto/meal_voucher_card_tokenization_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Optional


class MealVoucherCardTokenizationData:
def __init__(
self,
card_number: Optional[str] = None,
user_reference_number: Optional[str] = None,
gsm_number: Optional[str] = None,
callback_url: Optional[str] = None
) -> None:
self.card_number = card_number
self.user_reference_number = user_reference_number
self.gsm_number = gsm_number
self.callback_url = callback_url
14 changes: 14 additions & 0 deletions craftgate/request/init_meal_voucher_card_tokenization_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import Optional

from craftgate.model.apm_type import ApmType
from craftgate.request.dto.meal_voucher_card_tokenization_data import MealVoucherCardTokenizationData


class InitMealVoucherCardTokenizationRequest:
def __init__(
self,
apm_type: Optional[ApmType] = None,
meal_voucher_card_tokenization_data: Optional[MealVoucherCardTokenizationData] = None
) -> None:
self.apm_type = apm_type
self.meal_voucher_card_tokenization_data = meal_voucher_card_tokenization_data
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from typing import Optional


class MealVoucherCardTokenizationCompleteRequest:
def __init__(
self,
validation_code: Optional[str] = None
) -> None:
self.validation_code = validation_code
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from typing import Optional
from craftgate.request.dto.meal_voucher_card_tokenization_data import MealVoucherCardTokenizationData


class MealVoucherCardTokenizationRegenerateRequest:
def __init__(
self,
meal_voucher_card_tokenization_data: Optional[MealVoucherCardTokenizationData] = None
) -> None:
self.meal_voucher_card_tokenization_data = meal_voucher_card_tokenization_data
3 changes: 3 additions & 0 deletions craftgate/response/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
from .init_checkout_payment_response import InitCheckoutPaymentResponse
from .init_garanti_pay_payment_response import InitGarantiPayPaymentResponse
from .init_juzdan_payment_response import InitJuzdanPaymentResponse
from .init_meal_voucher_card_tokenization_response import InitMealVoucherCardTokenizationResponse
MealVoucherCardTokenizationInitResponse = InitMealVoucherCardTokenizationResponse
from .meal_voucher_card_tokenization_complete_response import MealVoucherCardTokenizationCompleteResponse
from .init_pos_apm_payment_response import InitPosApmPaymentResponse
from .init_three_ds_payment_response import InitThreeDSPaymentResponse
from .installment_list_response import InstallmentListResponse
Expand Down
16 changes: 16 additions & 0 deletions craftgate/response/init_meal_voucher_card_tokenization_response.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from typing import Optional
from craftgate.model.apm_additional_action import ApmAdditionalAction


class InitMealVoucherCardTokenizationResponse:
def __init__(
self,
session_id: Optional[str] = None,
additional_action: Optional[ApmAdditionalAction] = None,
html_content: Optional[str] = None,
redirect_url: Optional[str] = None
) -> None:
self.session_id = session_id
self.additional_action = additional_action
self.html_content = html_content
self.redirect_url = redirect_url
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from typing import Optional
from decimal import Decimal


class MealVoucherCardTokenizationCompleteResponse:
def __init__(
self,
session_id: Optional[str] = None,
masked_card_number: Optional[str] = None,
fingerprint: Optional[str] = None,
balance: Optional[Decimal] = None
) -> None:
self.session_id = session_id
self.masked_card_number = masked_card_number
self.fingerprint = fingerprint
self.balance = balance
7 changes: 0 additions & 7 deletions tests/test_bkm_express_payment_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@ def test_complete_bkm_express(self):
self.assertIsNotNone(response)
self.assertIsNotNone(response.order_id)

def test_retrieve_payment_by_ticket_id(self):
ticket_id = os.environ.get("BKM_TICKET_ID", "ce6d93c3-b399-406d-8efc-fdba0b37768c")

response = self.bkm_express_payment.retrieve_payment(ticket_id)
print(response)
self.assertIsNotNone(response)

def test_retrieve_payment_by_token(self):
token = os.environ.get("BKM_TOKEN", "cb90071c-1f2c-4fb7-9049-c5f13f9f7286")

Expand Down
67 changes: 67 additions & 0 deletions tests/test_meal_voucher_card_tokenization_sample.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import os
import unittest

from craftgate import Craftgate, RequestOptions
from craftgate.model import ApmType
from craftgate.request import InitMealVoucherCardTokenizationRequest, MealVoucherCardTokenizationRegenerateRequest, \
MealVoucherCardTokenizationCompleteRequest
from craftgate.request.dto.meal_voucher_card_tokenization_data import MealVoucherCardTokenizationData


class MealVoucherCardTokenizationSample(unittest.TestCase):
API_KEY = os.environ.get("CG_API_KEY", "YOUR_API_KEY")
SECRET_KEY = os.environ.get("CG_SECRET_KEY", "YOUR_SECRET_KEY")
BASE_URL = os.environ.get("CG_BASE_URL", "https://sandbox-api.craftgate.io")

@classmethod
def setUpClass(cls):
options = RequestOptions(
api_key=cls.API_KEY,
secret_key=cls.SECRET_KEY,
base_url=cls.BASE_URL
)
cls.meal_voucher_card_tokenization = Craftgate(options).meal_voucher_card_tokenization()

def test_init_meal_voucher_card_tokenization(self):
request = InitMealVoucherCardTokenizationRequest(
apm_type=ApmType.SETCARD,
meal_voucher_card_tokenization_data=MealVoucherCardTokenizationData(
callback_url="https://www.yourdomain.com/callback"
)
)

response = self.meal_voucher_card_tokenization.init(request)

self.assertIsNotNone(response.session_id)
self.assertIsNotNone(response.html_content)
self.assertIsNotNone(response)

def test_regenerate_meal_voucher_card_tokenization(self):
session_id = "session-id"
request = MealVoucherCardTokenizationRegenerateRequest(
meal_voucher_card_tokenization_data=MealVoucherCardTokenizationData(
callback_url="https://www.yourdomain.com/callback"
)
)

response = self.meal_voucher_card_tokenization.regenerate(session_id, request)

print(response)
self.assertIsNotNone(response.session_id)
self.assertIsNotNone(response)

def test_complete_meal_voucher_card_tokenization(self):
session_id = "session-id"
request = MealVoucherCardTokenizationCompleteRequest(
validation_code="123456"
)

response = self.meal_voucher_card_tokenization.complete(session_id, request)

print(response)
self.assertIsNotNone(response.session_id)
self.assertIsNotNone(response)


if __name__ == "__main__":
unittest.main()
Loading