public async Task <AuthoriseResponse> Post([FromBody] AuthoriseRequest request)
        {
            var random = new Random().Next(0, 4);

            if (random == 4)
            {
                throw new Exception("Random Exception");
            }

            await Task.Delay(random * 1000);

            var cardNumber = new CardNumber(request.CardNumber);

            if (request.SecurityCode == 200 && cardNumber.IsValid)
            {
                return(request.Respond(AuthStatus.Authorised));
            }

            if (request.SecurityCode == 404)
            {
                return(request.Respond(AuthStatus.Unknown));
            }

            if (request.SecurityCode == 500)
            {
                throw new Exception();
            }

            if (request.SecurityCode == 501)
            {
                return(request.Respond(AuthStatus.Error));
            }

            return(request.Respond(AuthStatus.Declined));
        }
        public async Task Payment_authorisation_failed()
        {
            var expectedRejectionRequest = new AuthoriseRequest()
            {
                CardDetails = new CardDetails()
                {
                    CardNumber   = "424242424242",
                    ExpiryDate   = "0129",
                    SecurityCode = "222"
                },
                MerchantAccount = "CheckoutCom",
                Amount          = 25.00m,
                CurrencyCode    = "GBP"
            };

            var response = await PaymentServiceClient.Authorise(expectedRejectionRequest);

            Assert.That(response.HttpStatusCode, Is.EqualTo(HttpStatusCode.UnprocessableEntity));
            Assert.NotNull(response.Content.Id);
            Assert.That(response.Content.Id, Is.Not.EqualTo("psp_reference_id"));
            Assert.That(response.Content.Status, Is.EqualTo("Failed"));
            Assert.IsNotEmpty(response.Content.Errors);

            ThenValidPaymentAndOrderBody(expectedRejectionRequest, response.Content);
        }
Beispiel #3
0
        public async Task Retrieve_an_existing_payment()
        {
            var request = new AuthoriseRequest()
            {
                CardDetails = new CardDetails()
                {
                    CardNumber   = "424242424242",
                    ExpiryDate   = "0129",
                    SecurityCode = "111"
                },
                MerchantAccount = "CheckoutCom",
                Amount          = 25.00m,
                CurrencyCode    = "GBP"
            };

            var authoriseResponse = await PaymentServiceClient.Authorise(request);

            var paymentResponse = await PaymentServiceClient.GetPayment(authoriseResponse.Content.Id, "CheckoutCom");

            Assert.That(paymentResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK));

            Assert.That(paymentResponse.Content.Id, Is.EqualTo(paymentResponse.Content.Id));
            Assert.That(paymentResponse.Content.Amount, Is.EqualTo(paymentResponse.Content.Amount));
            Assert.That(paymentResponse.Content.CurrencyCode, Is.EqualTo(paymentResponse.Content.CurrencyCode));
            Assert.That(paymentResponse.Content.Status, Is.EqualTo(paymentResponse.Content.Status));
            Assert.That(paymentResponse.Content.CardDetails.CardNumber, Is.EqualTo(paymentResponse.Content.CardDetails.CardNumber));
            Assert.That(paymentResponse.Content.CardDetails.ExpiryDate, Is.EqualTo(paymentResponse.Content.CardDetails.ExpiryDate));
            Assert.That(paymentResponse.Content.CardDetails.SecurityCode, Is.EqualTo(paymentResponse.Content.CardDetails.SecurityCode));
        }
 public void ThenValidPaymentAndOrderBody(AuthoriseRequest request, AuthoriseResponse response)
 {
     Assert.That(response.Amount, Is.EqualTo(request.Amount));
     Assert.That(response.CurrencyCode, Is.EqualTo(request.CurrencyCode));
     Assert.That(response.CardDetails.CardNumber, Is.EqualTo(GetFirstSixAndLastFour(response.CardDetails.CardNumber)));
     Assert.IsNull(response.CardDetails.SecurityCode);
     Assert.That(response.CardDetails.ExpiryDate, Is.EqualTo(request.CardDetails.ExpiryDate));
 }
Beispiel #5
0
        public void SetUp()
        {
            var fixture = new Fixture();

            _authoriseRequest = fixture.Create <AuthoriseRequest>();

            _acquirerRequestMapper = new AcquirerRequestMapper();
        }
        public async Task Payment_authorisation_with_invalid_payment()
        {
            var invalidRequest = new AuthoriseRequest();

            var response = await PaymentServiceClient.Authorise(invalidRequest);

            Assert.That(response.HttpStatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
            Assert.IsNotEmpty(response.Content.Errors);
        }
        public ActionResult Confirm()
        {
            IPayment         payment          = _payments.GetPayment(_global.GetAllConfigs().FirstOrDefault(x => x.Key == "PaymentClass").Value);
            AuthoriseRequest authoriseRequest = new AuthoriseRequest()
            {
            };
            var response = payment.Authorise(authoriseRequest);

            return(View());
        }
Beispiel #8
0
        public async Task <ApiResponse <AuthoriseResponse> > Authorise(AuthoriseRequest request)
        {
            var response = await _httpClient.PostAsJsonAsync("payment/authorise", request);

            var content = await response.Content.ReadAsStringAsync();

            return(new ApiResponse <AuthoriseResponse>
            {
                Content = JsonConvert.DeserializeObject <AuthoriseResponse>(content),
                HttpStatusCode = response.StatusCode,
                Header = response.Headers
            });
        }
Beispiel #9
0
        public async Task<IActionResult> Authorise(AuthoriseRequest request)
        {
            var processor = _paymentProcessorFactory.Get<AuthoriseRequest>();

            var result = await processor.ExecuteAsync(request);

            var response = _mapper.Map<ProcessorResponse, AuthoriseResponse>(result);

            if (response.Status == PaymentStatus.Failed)
            {
                return UnprocessableEntity(response);
            }
            return Ok(response);
        }
Beispiel #10
0
        public void SetUp()
        {
            _fixture          = new Fixture();
            _acquirerRequest  = _fixture.Create <AcquirerRequest>();
            _acquirerResponse = _fixture.Create <AcquirerResponse>();
            _authoriseRequest = _fixture.Create <AuthoriseRequest>();
            _authoriseRequest.CardDetails.CardNumber = "4242 4242 4242 4242";

            _repositoryMock        = new Mock <IRepository <Payment> >();
            _acquirerHandlerMock   = new Mock <IAcquirerHandler>();
            _cardDetailsMaskerMock = new Mock <ICardDetailsMasker>();
            _mapperMock            = new Mock <IMapper>();

            _authorisationProcessor = new PaymentAuthorisationProcessor(_repositoryMock.Object, _acquirerHandlerMock.Object, _cardDetailsMaskerMock.Object, _mapperMock.Object);

            _mapperMock.Setup(x => x.Map <AuthoriseRequest, AcquirerRequest>(It.IsAny <AuthoriseRequest>())).Returns(_acquirerRequest);
            _acquirerHandlerMock.Setup(x => x.ProcessAsync(_acquirerRequest)).ReturnsAsync(_acquirerResponse);
        }
        public async Task <AuthoriseResponse> AuthoriseTransaction(AuthoriseRequest request)
        {
            var user       = RouteData.GetUser();
            var cardNumber = new CardNumber(request.CardNumber);
            var stopwatch  = new Stopwatch();

            stopwatch.Start();
            var response = await _cardAuthoriser.AuthoriseAsync(request);

            stopwatch.Stop();
            response.ProcessingTimeMs = Convert.ToInt32(stopwatch.ElapsedMilliseconds);

            var transaction = Transaction.Create(response, cardNumber, user);

            _dbContext.Transactions.Add(transaction);
            await _dbContext.SaveChangesAsync();

            return(response);
        }
        public AuthoriseResponse Authorise(AuthoriseRequest request)
        {
            AuthoriseResponse response = new AuthoriseResponse();
            var options = new PaymentIntentCreateOptions
            {
                Amount             = Convert.ToInt64(request.amount * 100),
                Currency           = request.currency,
                PaymentMethodTypes = new List <string>
                {
                    "card",
                },
                CaptureMethod = "manual",
                //Metadata = request.metadata as Dictionary<string, string>,
            };
            var service = new PaymentIntentService();

            service.Create(options);
            return(response);
        }
        public ActionResult Login([FromBody] AuthoriseRequest loginDetails)
        {
            string salt;

            try
            {
                salt = _context.Salt.FromSqlInterpolated($"EXECUTE dbo.GetUserSalt {loginDetails.UserId}").ToList().ElementAt(0).Salt;
            } catch
            {
                return(Unauthorized($"User \"{loginDetails.UserId}\" does not exist"));
            }

            string hashed = GenerateHash(loginDetails.Password, Convert.FromBase64String(salt));

            if (AreCredentialsCorrect(loginDetails.UserId, hashed))
            {
                return(Ok("\"" + GenerateToken(loginDetails.UserId) + "\""));
            }
            return(Unauthorized("Credentials are wrong"));
        }
        public ActionResult Register([FromBody] AuthoriseRequest loginDetails)
        {
            byte[] salt = new byte[128 / 8];
            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetBytes(salt);
            }

            string hashed = GenerateHash(loginDetails.Password, salt);

            try
            {
                _ = _context.Database.ExecuteSqlInterpolated($"EXECUTE dbo.CreateUser {loginDetails.UserId}, {hashed}, {Convert.ToBase64String(salt)}"); // this is used for no return values.
            } catch
            {
                return(BadRequest($"Username \"{loginDetails.UserId}\" has already been taken"));
            }

            return(Ok("\"" + GenerateToken(loginDetails.UserId) + "\""));
        }
        public async Task <AuthoriseResponse> AuthoriseAsync(AuthoriseRequest request)
        {
            var json         = JsonSerializer.Serialize(request);
            var content      = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
            var pollyContext = new Context();

            var httpResponse = await PolicyHandlers.CountRetryPolicy()
                               .ExecuteAsync(c => _client.PostAsync("api/authorise", content), pollyContext);

            if (!httpResponse.IsSuccessStatusCode)
            {
                var errorResponse = AuthoriseResponse.CreateFailedResponse(
                    request, pollyContext.GetRetryCount());

                return(errorResponse);
            }

            var result = await httpResponse.Content.DeserializeAsync <AuthoriseResponse>();

            result.RetryAttempts = pollyContext.GetRetryCount();

            return(result);
        }
        public async Task Authorise_a_payment_successfully()
        {
            var expectedSuccessRequest = new AuthoriseRequest()
            {
                CardDetails = new CardDetails()
                {
                    CardNumber   = "424242424242",
                    ExpiryDate   = "0129",
                    SecurityCode = "111"
                },
                MerchantAccount = "CheckoutCom",
                Amount          = 25.00m,
                CurrencyCode    = "GBP"
            };

            var response = await PaymentServiceClient.Authorise(expectedSuccessRequest);

            Assert.That(response.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK));
            Assert.NotNull(response.Content.Id);
            Assert.That(response.Content.Id, Is.Not.EqualTo("psp_reference_id"));
            Assert.That(response.Content.Status, Is.EqualTo("Accepted"));

            ThenValidPaymentAndOrderBody(expectedSuccessRequest, response.Content);
        }
Beispiel #17
0
 public Task <AuthoriseResult> Authorise(AuthoriseRequest request) => Task.FromException <AuthoriseResult>(new Exception("ERROR AUTHORISING PAYMENT"));
Beispiel #18
0
 public Task <AuthoriseResult> Authorise(AuthoriseRequest request)
 {
     LastRequest = request;
     return(Task.FromResult(authResult));
 }
Beispiel #19
0
 public AuthoriseResponse Authorise(AuthoriseRequest request)
 {
     throw new NotImplementedException();
 }
Beispiel #20
0
 public Task <AuthoriseResult> Authorise(AuthoriseRequest request) => Task.FromResult(AuthoriseResult.Approved);
Beispiel #21
0
 public Task <AuthoriseResult> Authorise(AuthoriseRequest request) => Task.FromResult(AuthoriseResult.Denied);