Skip to content
Merged
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
12 changes: 12 additions & 0 deletions craftgate/adapter/fraud_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from craftgate.model.fraud_check_status import FraudCheckStatus
from craftgate.model.fraud_value_type import FraudValueType
from craftgate.net.base_http_client import BaseHttpClient
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest
from craftgate.request.fraud_value_list_request import FraudValueListRequest
from craftgate.request.search_fraud_checks_request import SearchFraudChecksRequest
from craftgate.request.update_fraud_check_request import UpdateFraudCheckRequest
Expand Down Expand Up @@ -95,6 +96,17 @@ def add_value_to_value_list(self, request: FraudValueListRequest) -> None:
response_type=None
)

def add_card_fingerprint_to_value_list(self, list_name: str, request: FraudAddCardFingerprintToListRequest) -> None:
path = "/fraud/v1/value-lists/{}/card-fingerprints".format(list_name)
headers = self._create_headers(request, path)
self._http_client.request(
method="POST",
url=self.request_options.base_url + path,
headers=headers,
body=request,
response_type=None
)

def remove_value_from_value_list(self, list_name: str, value_id: str) -> None:
path = "/fraud/v1/value-lists/{}/values/{}".format(list_name, value_id)
headers = self._create_headers(None, path)
Expand Down
6 changes: 6 additions & 0 deletions craftgate/model/fraud_operation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from enum import Enum


class FraudOperation(str, Enum):
PAYMENT = "PAYMENT"
LOYALTY = "LOYALTY"
15 changes: 15 additions & 0 deletions craftgate/model/fraud_result.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Optional

from craftgate.model.fraud_action import FraudAction


class FraudResult:
def __init__(
self,
id: Optional[int] = None,
score: Optional[float] = None,
action: Optional[FraudAction] = None
) -> None:
self.id = id
self.score = score
self.action = action
17 changes: 17 additions & 0 deletions craftgate/request/fraud_add_card_fingerprint_to_list_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from typing import Optional

from craftgate.model.fraud_operation import FraudOperation


class FraudAddCardFingerprintToListRequest(object):
def __init__(
self,
label: Optional[str] = None,
operation: Optional[FraudOperation] = None,
operation_id: Optional[str] = None,
duration_in_seconds: Optional[int] = None
) -> None:
self.label = label
self.operation = operation
self.operation_id = operation_id
self.duration_in_seconds = duration_in_seconds
10 changes: 9 additions & 1 deletion craftgate/request/retrieve_loyalties_request.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from typing import Optional

from craftgate.request.dto.fraud_check_parameters import FraudCheckParameters


class RetrieveLoyaltiesRequest(object):
def __init__(
Expand All @@ -9,11 +11,17 @@ def __init__(
expire_month: Optional[str] = None,
cvc: Optional[str] = None,
card_user_key: Optional[str] = None,
card_token: Optional[str] = None
card_token: Optional[str] = None,
client_ip: Optional[str] = None,
conversation_id: Optional[str] = None,
fraud_params: Optional[FraudCheckParameters] = None,
) -> None:
self.card_number = card_number
self.expire_year = expire_year
self.expire_month = expire_month
self.cvc = cvc
self.card_user_key = card_user_key
self.card_token = card_token
self.client_ip = client_ip
self.conversation_id = conversation_id
self.fraud_params = fraud_params
5 changes: 4 additions & 1 deletion craftgate/response/retrieve_loyalties_response.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from typing import List, Optional

from craftgate.model.fraud_result import FraudResult
from craftgate.model.loyalty import Loyalty
from craftgate.response.dto.merchant_pos import MerchantPos

Expand All @@ -12,11 +13,13 @@ def __init__(
card_issuer_bank_id: Optional[int] = None,
force3ds: Optional[bool] = None,
pos: Optional[MerchantPos] = None,
loyalties: Optional[List[Loyalty]] = None
loyalties: Optional[List[Loyalty]] = None,
fraud_result: Optional[FraudResult] = None
) -> None:
self.card_brand = card_brand
self.card_issuer_bank_name = card_issuer_bank_name
self.card_issuer_bank_id = card_issuer_bank_id
self.force3ds = force3ds
self.pos = pos
self.loyalties = loyalties
self.fraud_result = fraud_result
11 changes: 11 additions & 0 deletions tests/test_fraud_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

from craftgate import Craftgate, RequestOptions
from craftgate.model import FraudAction, FraudValueType, FraudCheckStatus
from craftgate.model.fraud_operation import FraudOperation
from craftgate.request import FraudValueListRequest, SearchFraudChecksRequest
from craftgate.request.fraud_add_card_fingerprint_to_list_request import FraudAddCardFingerprintToListRequest


class FraudAdapterSample(unittest.TestCase):
Expand Down Expand Up @@ -35,6 +37,15 @@ def test_add_value_to_value_list(self):
)
self.fraud.add_value_to_value_list(req)

def test_add_card_fingerprint_to_value_list(self):
req = FraudAddCardFingerprintToListRequest(
operation=FraudOperation.PAYMENT,
operation_id="12420", #payment_id
label="John Doe's card",
duration_in_seconds=600
)
self.fraud.add_card_fingerprint_to_value_list("test", req)

def test_retrieve_value_list(self):
resp = self.fraud.retrieve_value_list("test")
print(resp)
Expand Down
14 changes: 11 additions & 3 deletions tests/test_payment_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import uuid
from decimal import Decimal

from craftgate import Craftgate, RequestOptions, PaymentTransaction
from craftgate import Craftgate, RequestOptions, PaymentTransaction, FraudCheckParameters
from craftgate.model import AdditionalAction, ApmAdditionalAction, ApmType, CardAssociation, CardProvider, CardType, \
Currency, Loyalty, LoyaltyParams, LoyaltyType, PaymentGroup, PaymentPhase, PaymentStatus, PaymentType, \
PosApmPaymentProvider, RefundDestinationType, RefundStatus, Reward, WalletTransactionType
Expand Down Expand Up @@ -1288,17 +1288,25 @@ def test_retrieve_payment_by_id(self):

def test_retrieve_loyalties(self):
req = RetrieveLoyaltiesRequest()
req.card_number = "5188961939192544"
req.card_number = "4043080000000003"
req.expire_year = "2044"
req.expire_month = "07"
req.cvc = "000"

req.client_ip = "127.0.0.1"
req.conversation_id = "456d1297-908e-4bd6-a13b-4be31a6e47d5"
req.fraud_params = FraudCheckParameters()
req.fraud_params.buyer_email = "buyer@email.com"
req.fraud_params.buyer_phone_number = "905555555555"
req.fraud_params.buyer_external_id = "buyerExternalId444"
req.fraud_params.custom_fraud_variable = "sessionId213123"

resp = self.payment.retrieve_loyalties(req)
print(resp)
self.assertIsNotNone(resp)
self.assertEqual("Bonus", resp.card_brand)
self.assertIsNotNone(resp.loyalties)
self.assertTrue(len(resp.loyalties) > 0)
self.assertGreater(len(resp.loyalties), 0)
self.assertEqual(LoyaltyType.REWARD_MONEY, resp.loyalties[0].type)
self.assertIsNotNone(resp.loyalties[0].reward)
self.assertEqual(Decimal("12.35"), resp.loyalties[0].reward.card_reward_money)
Expand Down