Ejemplo n.º 1
0
        public async Task WhenHandlingPaymentRequestGatewayShouldCallPaymentProcessor()
        {
            var request = new GatewayPaymentRequest
            {
                MerchantId = Guid.NewGuid().ToString(),
                MerchantReferenceNumber = Guid.NewGuid().ToString(),
                LongNumber = "1111 1111 1111 1111"
            };

            paymentProcessor.Setup(p => p.HandlePaymentRequest(It.IsAny <PaymentProcessorRequest>()))
            .Returns(Task.FromResult(new PaymentProcessorResponse {
                IsSuccess = true
            }));

            var gatewayResponse = await gateway.HandlePaymentRequest(request);

            Check.That(gatewayResponse).IsNotNull();
            paymentProcessor.Verify(p => p.HandlePaymentRequest(It.IsAny <PaymentProcessorRequest>()), Times.Once);

            var storedRequest = await repository.RetrieveRequest(gatewayResponse.GatewayId);

            Check.That(storedRequest).IsNotNull();
            Check.That(storedRequest.MerchantId).Equals(request.MerchantId);
            Check.That(storedRequest.MerchantReferenceNumber).Equals(request.MerchantReferenceNumber);
            Check.That(storedRequest.LongNumber).IsNotEqualTo(request.LongNumber);
            Check.That(storedRequest.TruncatedNumber).IsNotNull();

            var responseDetails = await repository.RetrieveDetails(request.MerchantId, request.MerchantReferenceNumber);

            Check.That(responseDetails).IsNotNull();
            Check.That(responseDetails.MerchantId).Equals(request.MerchantId);
            Check.That(responseDetails.MerchantReferenceNumber).Equals(request.MerchantReferenceNumber);
        }
        public void WillEncryptLongNumberAndProduceTruncatedOne()
        {
            var request = new GatewayPaymentRequest
            {
                LongNumber = "1111222233334444"
            };

            var encrypted = CardEncryptor.EncryptCardData(request);

            Check.That(encrypted.TruncatedNumber).Equals("4444");
            Check.That(encrypted.LongNumber).IsNotEqualTo(request.LongNumber);
        }
 public static PaymentProcessorRequest MapRequest(GatewayPaymentRequest request)
 {
     return(new PaymentProcessorRequest
     {
         CCV = request.CVV,
         LongCardNumber = request.LongNumber,
         NameOnCard = request.NameOnCard,
         ValidFrom = request.ValidFrom,
         ValidTo = request.ValidTo,
         PaymentAmount = request.PaymentAmount,
         PaymentCurrency = request.PaymentCurrency
     });
 }
Ejemplo n.º 4
0
        public async Task <GatewayResponse> HandlePaymentRequest(GatewayPaymentRequest request)
        {
            var encyptedRequest = CardEncryptor.EncryptCardData(request);
            var gatewayId       = await repository.RegisterPaymentRequest(encyptedRequest);

            var paymentRequest = PaymentProcessorMapper.MapRequest(request);
            var result         = await paymentProcessor.HandlePaymentRequest(paymentRequest);

            var response = PaymentProcessorMapper.MapResponse(result, encyptedRequest);

            await repository.RegisterResponse(response);

            return(response);
        }
 public static GatewayResponse MapResponse(PaymentProcessorResponse response, GatewayPaymentRequest request)
 {
     return(new GatewayResponse
     {
         MerchantId = request.MerchantId,
         MerchantReferenceNumber = request.MerchantReferenceNumber,
         TimeStamp = request.TimeStamp,
         GatewayId = request.GatewayId,
         IsSuccess = response.IsSuccess,
         FailureReason = response.FailureReason,
         PaymentProcessorId = response.PaymentProcessorReference,
         TruncatedCardNumber = request.TruncatedNumber,
         PaymentAmount = request.PaymentAmount,
         PaymentCurrency = request.PaymentCurrency
     });
 }
Ejemplo n.º 6
0
        public static GatewayPaymentRequest EncryptCardData(GatewayPaymentRequest originalRequest)
        {
            var encrypted = new GatewayPaymentRequest
            {
                CVV        = originalRequest.CVV,
                LongNumber = "**********",
                MerchantId = originalRequest.MerchantId,
                MerchantReferenceNumber = originalRequest.MerchantReferenceNumber,
                NameOnCard      = originalRequest.NameOnCard,
                PaymentAmount   = originalRequest.PaymentAmount,
                PaymentCurrency = originalRequest.PaymentCurrency,
                TimeStamp       = originalRequest.TimeStamp,
                TruncatedNumber = originalRequest.LongNumber.Substring(Math.Max(0, originalRequest.LongNumber.Length - 4)),
                ValidFrom       = originalRequest.ValidFrom,
                ValidTo         = originalRequest.ValidTo
            };

            return(encrypted);
        }
 public Task <string> RegisterPaymentRequest(GatewayPaymentRequest request)
 {
     request.GatewayId = Guid.NewGuid().ToString();
     requests.Add(request);
     return(Task.FromResult(request.GatewayId));
 }