diff --git a/craftgate/model/apm_type.py b/craftgate/model/apm_type.py index 48b1751..850167b 100644 --- a/craftgate/model/apm_type.py +++ b/craftgate/model/apm_type.py @@ -8,6 +8,8 @@ class ApmType(str, Enum): SODEXO_GIFT = "SODEXO_GIFT" EDENRED = "EDENRED" EDENRED_GIFT = "EDENRED_GIFT" + TOKENFLEX = "TOKENFLEX" + TOKENFLEX_GIFT = "TOKENFLEX_GIFT" PAYPAL = "PAYPAL" KLARNA = "KLARNA" AFTERPAY = "AFTERPAY" diff --git a/craftgate/model/payment_method.py b/craftgate/model/payment_method.py index 71dc38e..d5c12b5 100644 --- a/craftgate/model/payment_method.py +++ b/craftgate/model/payment_method.py @@ -8,6 +8,8 @@ class PaymentMethod(str, Enum): PAYONEER = "PAYONEER" SODEXO = "SODEXO" SODEXO_GIFT = "SODEXO_GIFT" + TOKENFLEX = "TOKENFLEX" + TOKENFLEX_GIFT = "TOKENFLEX_GIFT" EDENRED = "EDENRED" EDENRED_GIFT = "EDENRED_GIFT" ALIPAY = "ALIPAY" diff --git a/craftgate/model/payment_provider.py b/craftgate/model/payment_provider.py index 478f99b..2e8f08c 100644 --- a/craftgate/model/payment_provider.py +++ b/craftgate/model/payment_provider.py @@ -11,6 +11,7 @@ class PaymentProvider(str, Enum): PAYONEER = "PAYONEER" SODEXO = "SODEXO" EDENRED = "EDENRED" + TOKENFLEX = "TOKENFLEX" INSTANT_TRANSFER = "INSTANT_TRANSFER" ALIPAY = "ALIPAY" PAYPAL = "PAYPAL" diff --git a/tests/test_payment_sample.py b/tests/test_payment_sample.py index eb4929f..bf64c8f 100644 --- a/tests/test_payment_sample.py +++ b/tests/test_payment_sample.py @@ -778,6 +778,82 @@ def test_complete_edenred_apm_payment(self): self.assertIsNotNone(getattr(resp, "payment_id", None)) self.assertEqual(PaymentStatus.SUCCESS, resp.payment_status) + def test_init_tokenflex_apm_payment(self): + items = [] + for name, price in [("item 1", "0.60"), ("item 2", "0.40")]: + pi = PaymentItem() + pi.name = name + pi.external_id = str(uuid.uuid4()) + pi.price = Decimal(price) + items.append(pi) + + req = InitApmPaymentRequest() + req.apm_type = ApmType.TOKENFLEX + req.price = Decimal("1") + req.paid_price = Decimal("1") + req.currency = Currency.TRY + req.payment_group = PaymentGroup.LISTING_OR_SUBSCRIPTION + req.conversation_id = "456d1297-908e-4bd6-a13b-4be31a6e47d5" + req.external_id = "optional-externalId" + req.callback_url = "https://www.your-website.com/craftgate-apm-callback" + req.additional_params = {"paymentCode": "123456"} + req.items = items + + resp = self.payment.init_apm_payment(req) + print(resp) + self.assertIsNotNone(getattr(resp, "payment_id", None)) + self.assertIsNone(getattr(resp, "redirect_url", None)) + self.assertEqual(PaymentStatus.WAITING, resp.payment_status) + self.assertEqual(ApmAdditionalAction.OTP_REQUIRED, resp.additional_action) + + def test_complete_tokenflex_apm_payment(self): + req = CompleteApmPaymentRequest() + req.payment_id = 1 + req.additional_params = {"otpCode": "784294"} + + resp = self.payment.complete_apm_payment(req) + print(resp) + self.assertIsNotNone(getattr(resp, "payment_id", None)) + self.assertEqual(PaymentStatus.SUCCESS, resp.payment_status) + + def test_init_tokenflex_gift_apm_payment(self): + items = [] + for name, price in [("item 1", "0.60"), ("item 2", "0.40")]: + pi = PaymentItem() + pi.name = name + pi.external_id = str(uuid.uuid4()) + pi.price = Decimal(price) + items.append(pi) + + req = InitApmPaymentRequest() + req.apm_type = ApmType.TOKENFLEX_GIFT + req.price = Decimal("1") + req.paid_price = Decimal("1") + req.currency = Currency.TRY + req.payment_group = PaymentGroup.LISTING_OR_SUBSCRIPTION + req.conversation_id = "456d1297-908e-4bd6-a13b-4be31a6e47d5" + req.external_id = "optional-externalId" + req.callback_url = "https://www.your-website.com/craftgate-apm-callback" + req.additional_params = {"paymentCode": "123456"} + req.items = items + + resp = self.payment.init_apm_payment(req) + print(resp) + self.assertIsNotNone(getattr(resp, "payment_id", None)) + self.assertIsNone(getattr(resp, "redirect_url", None)) + self.assertEqual(PaymentStatus.WAITING, resp.payment_status) + self.assertEqual(ApmAdditionalAction.OTP_REQUIRED, resp.additional_action) + + def test_complete_tokenflex_gift_apm_payment(self): + req = CompleteApmPaymentRequest() + req.payment_id = 1 + req.additional_params = {"otpCode": "784294"} + + resp = self.payment.complete_apm_payment(req) + print(resp) + self.assertIsNotNone(getattr(resp, "payment_id", None)) + self.assertEqual(PaymentStatus.SUCCESS, resp.payment_status) + def test_init_paypal_apm_payment(self): items = [] for name, price in [("item 1", "0.60"), ("item 2", "0.40")]: