public async Task CanGetPaymentShipping()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.Shipping = new ShippingDetails()
            {
                Address = new Address()
                {
                    AddressLine1 = "221B Baker Street", AddressLine2 = null, City = "London", Country = "UK", State = "n/a", Zip = "NW1 6XE"
                },
                Phone = new Phone()
                {
                    CountryCode = "44", Number = "124312431243"
                }
            };
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.Shipping.ShouldNotBeNull();
            paymentDetails.Shipping.Address.ShouldNotBeNull();
            paymentDetails.Shipping.Address.AddressLine1.ShouldBe(paymentRequest.Shipping.Address.AddressLine1);
            paymentDetails.Shipping.Address.AddressLine2.ShouldBe(paymentRequest.Shipping.Address.AddressLine2);
            paymentDetails.Shipping.Address.City.ShouldBe(paymentRequest.Shipping.Address.City);
            paymentDetails.Shipping.Address.Country.ShouldBe(paymentRequest.Shipping.Address.Country);
            paymentDetails.Shipping.Address.State.ShouldBe(paymentRequest.Shipping.Address.State);
            paymentDetails.Shipping.Address.Zip.ShouldBe(paymentRequest.Shipping.Address.Zip);
            paymentDetails.Shipping.Phone.CountryCode.ShouldBe(paymentRequest.Shipping.Phone.CountryCode);
            paymentDetails.Shipping.Phone.Number.ShouldBe(paymentRequest.Shipping.Phone.Number);
        }
        public async Task CanGetThreeDsPaymentBeforeAuth()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.ThreeDS = true;
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            paymentResponse.IsPending.ShouldBe(true);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Pending.Id);

            paymentDetails.ShouldNotBeNull();
            paymentDetails.Id.ShouldBe(paymentResponse.Pending.Id);
            paymentDetails.Customer.ShouldNotBeNull();
            paymentDetails.Customer.Id.ShouldBe(paymentResponse.Pending.Customer.Id);
            paymentDetails.Customer.Email.ShouldBe(paymentRequest.Customer.Email);
            paymentDetails.Amount.ShouldBe(paymentRequest.Amount);
            paymentDetails.Currency.ShouldBe(paymentRequest.Currency);
            paymentDetails.Reference.ShouldNotBeNullOrWhiteSpace();
            paymentDetails.PaymentType.ShouldBe(PaymentType.Regular);
            paymentDetails.Risk.ShouldNotBeNull();
            paymentDetails.RequestedOn.ShouldBeGreaterThan(DateTime.MinValue);
            paymentDetails.ThreeDS.ShouldNotBeNull();
            paymentDetails.ThreeDS.Downgraded.ShouldBe(false);
            paymentDetails.ThreeDS.Enrolled.ShouldNotBeNullOrEmpty();
            paymentDetails.RequiresRedirect().ShouldBe(true);
            paymentDetails.GetRedirectLink().ShouldNotBeNull();
            paymentDetails.Links.ShouldNotBeNull();
            paymentDetails.Links.ShouldNotBeEmpty();
            paymentDetails.Status.ShouldBe(PaymentStatus.Pending);
            paymentDetails.Source.AsCard().ShouldNotBeNull();
            paymentDetails.Approved.ShouldBeFalse();
        }
        public async Task CanGetNonThreeDsPayment()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.PaymentType = PaymentType.Recurring;
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.ShouldNotBeNull();
            paymentDetails.Id.ShouldBe(paymentResponse.Payment.Id);
            paymentDetails.Customer.ShouldNotBeNull();
            paymentDetails.Customer.Id.ShouldBe(paymentResponse.Payment.Customer.Id);
            paymentDetails.Customer.Email.ShouldBe(paymentRequest.Customer.Email);
            paymentDetails.Amount.ShouldBe(paymentResponse.Payment.Amount);
            paymentDetails.Currency.ShouldBe(paymentResponse.Payment.Currency);
            paymentDetails.PaymentType.ShouldBe(paymentRequest.PaymentType);
            paymentDetails.BillingDescriptor.ShouldNotBeNull();
            paymentDetails.Reference.ShouldNotBeNullOrWhiteSpace();
            paymentDetails.Risk.ShouldNotBeNull();
            paymentDetails.RequestedOn.ShouldBeGreaterThan(paymentResponse.Payment.ProcessedOn.AddMinutes(-1));
            paymentDetails.ThreeDS.ShouldBeNull();
            paymentDetails.Links.ShouldNotBeNull();
            paymentDetails.Links.ShouldNotBeEmpty();
            paymentDetails.Status.ShouldBe(PaymentStatus.Authorized);
            paymentDetails.Source.AsCard().ShouldNotBeNull();
            paymentDetails.Approved.ShouldBeTrue();
        }
예제 #4
0
        public GetPaymentResponse GetPaymentByPaymentId(GetPaymentRequest req)
        {
            var res = new GetPaymentResponse();

            try
            {
                long id = long.Parse(req.PaymentId);
                using (var container = new TransactionModelContainer())
                {
                    var payment = container.Payments
                                  .Include("PaymentItems")
                                  .FirstOrDefault(x => x.Id == id);

                    if (payment == null)
                    {
                        throw new Exception("Payment is not found");
                    }

                    res.SetPaymentResponse(payment);
                    res.Succeed();
                }
            }
            catch (Exception ex)
            {
                res.Fail(ex);
                CreateLog(ex);
            }
            return(res);
        }
예제 #5
0
        void when_get_payments()
        {
            context["given a valid request"] = () =>
            {
                PaymentRequest paymentRequest;
                beforeAllAsync = async() =>
                {
                    var source = new Source()
                    {
                        { "type", "ideal" }, { "bic", "INGBNL2A" }, { "description", "Web Payment Demo Unit Test" }
                    };

                    currency       = Currency.EUR;
                    amount         = 100;
                    paymentRequest = new PaymentRequest(source, amount, currency);
                    result         = await controller.RequestPayment(paymentRequest); // POST payments

                    payment = (result as ObjectResult).Value as Resource;
                    result  = await controller.GetPayment((payment as PaymentPending).Id); // GET payments

                    getPayment = (result as ObjectResult).Value as GetPaymentResponse;
                };

                it["should return 200 - OK"] = () =>
                {
                    (result as OkObjectResult).StatusCode.ShouldBe(StatusCodes.Status200OK);
                };

                it["should return the correct payment"] = () =>
                {
                    (getPayment as GetPaymentResponse).Id.ShouldBe((payment as PaymentPending).Id);
                };
            };
        }
        public async Task Get_PaymentReturns_ReturnsOkResult()
        {
            var mockPaymentRepo        = new Mock <IPaymentRepository>();
            var mockLogger             = new Mock <ILogger <PaymentsController> >();
            var mockMapper             = new Mock <IMapper>();
            var mockBankRequestService = new Mock <IBankRequestService>();
            var mockEncryptionService  = new Mock <IEncryptionService>();

            var mapperResponse = new GetPaymentResponse
            {
                Name          = "Fred Bloggs",
                CardNumber    = "4111111111111111",
                Id            = Guid.NewGuid(),
                PaymentStatus = "Completed"
            };

            mockPaymentRepo.Setup(x => x.GetPaymentAsync(It.IsAny <Guid>())).ReturnsAsync(() => new Payment());
            mockMapper.Setup(x => x.Map <GetPaymentResponse>(It.IsAny <Payment>())).Returns(mapperResponse);
            mockEncryptionService.Setup(x => x.Decrypt(It.IsAny <byte[]>())).Returns("4111111111111111");

            var paymentsController = new PaymentsController(mockPaymentRepo.Object, mockBankRequestService.Object, mockEncryptionService.Object, mockMapper.Object, mockLogger.Object);

            var response = await paymentsController.Get(Guid.NewGuid());

            var okResponse         = Assert.IsType <OkObjectResult>(response);
            var getPaymentResponse = Assert.IsType <GetPaymentResponse>(okResponse.Value);

            Assert.Equal(mapperResponse.CardNumber.MaskCard(), getPaymentResponse.CardNumber);
            Assert.Equal(mapperResponse.Name, getPaymentResponse.Name);
            Assert.Equal(mapperResponse.Id, getPaymentResponse.Id);
            Assert.Equal(mapperResponse.PaymentStatus, getPaymentResponse.PaymentStatus);
        }
예제 #7
0
        public static void SetPaymentResponse(this GetPaymentResponse res, Payment payment)
        {
            res.PaymentId                 = payment.Id;
            res.PaymentCode               = payment.PaymentCode;
            res.CreateBy                  = payment.CreatedBy;
            res.CreateDate                = payment.CreatedDate;
            res.UpdateBy                  = payment.UpdatedBy;
            res.UpdateDate                = payment.UpdatedDate;
            res.CustomerIDMPartyID        = payment.CustomerIdmPartyId;
            res.CustomerCode              = null;
            res.CustomerName              = payment.CustomerName;
            res.CustomerAddress           = payment.CustomerAddress;
            res.CustomerAccountNumber     = payment.CustomerRefundAccountNo;
            res.CustomerAccountName       = payment.CustomerRefundAccountName;
            res.CustomerAccountBankId     = payment.CustomerRefundBankId;
            res.CustomerMobilePhoneNumber = payment.CustomerMobilePhoneNo;
            res.Remark                    = payment.Remark;
            res.Ref1                      = payment.Ref1;
            res.Ref2                      = payment.Ref2;
            res.Ref3                      = payment.Ref3;
            res.PaymentStatus             = payment.Status;
            res.RemainingAmount           = payment.RemainingAmount();
            res.GrandTotal                = payment.GrandTotal();
            res.TotalVatAmount            = payment.TotalVat();
            res.TotalWithholdingTaxAmount = payment.TotalWithholdingTax();
            res.TotalBeforeAdjustment     = payment.TotalNoDiscount();
            res.TotalAdjustment           = payment.TotalDiscount();

            if (payment.PaymentItems.Count > 0)
            {
                var items = payment.PaymentItems.ToArray();
                res.PaymentItems = new GetPaymentItemResponse[items.Count()];
                for (int i = 0; i < items.Length; i++)
                {
                    res.PaymentItems[i] = new GetPaymentItemResponse
                    {
                        //ServiceCode = items[i].ServiceCode.ToString(),
                        //ServiceName = items[i].ServiceName,
                        ItemDescription       = items[i].ItemDescription,
                        Quantity              = items[i].Qty,
                        UnitAmount            = items[i].UnitAmount,
                        VatPercent            = items[i].VatPercent,
                        WithholdingTaxPercent = items[i].WithholdingTexPercent,
                        WithholdingTaxAmount  = items[i].WithHoldingTaxAmount(),
                        IsRevenue             = items[i].ServiceIsRevenue,
                        IsLegalPerson         = items[i].IsLegalPerson,
                        VatAmount             = items[i].VATAmount(),
                        Remark        = items[i].Remark,
                        SubTotal      = items[i].SubTotal(),
                        PaymentItemId = items[i].Id,
                        GroupRef1     = items[i].GroupRef1,
                        GroupRef2     = items[i].GroupRef2,
                        GroupRef3     = items[i].GroupRef3,
                        NetTotal      = items[i].NetTotal()
                    };
                }
            }
        }
        public void ShouldDeserializeDefaultGetPaymentResponseInstrumentSender()
        {
            var fileContent = GetJsonFileContent("./Resources/Sender/GetPaymentResponseInstrumentSender.json");
            GetPaymentResponse getPaymentResponse =
                (GetPaymentResponse) new JsonSerializer().Deserialize(fileContent, typeof(GetPaymentResponse));

            getPaymentResponse.ShouldNotBeNull();
            getPaymentResponse.Sender.ShouldNotBeNull();
            getPaymentResponse.Sender.Type().ShouldBe(PaymentSenderType.Instrument);
            getPaymentResponse.Sender.ShouldBeAssignableTo(typeof(PaymentInstrumentSender));
        }
예제 #9
0
        private async Task <IActionResult> GetThreeDsPaymentAsync(string sessionId)
        {
            GetPaymentResponse payment = await _checkoutApi.Payments.GetAsync(sessionId);

            if (payment == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            return(View(payment));
        }
        public async Task CanGetPaymentDescription()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.Description = "Too descriptive";
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.Description.ShouldBe(paymentRequest.Description);
        }
        public async Task CanGetPaymentIp()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.PaymentIp = "10.1.2.3";
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.PaymentIp.ShouldBe(paymentRequest.PaymentIp);
        }
예제 #12
0
        private async Task GetPaymentDetailsAsync(MerchantOrderViewModel merchantOrder)
        {
            HttpResponseMessage response = _getToSecureHttpEndpointWithRetries.Get(apiClientUrl: "https://localhost:44379/payments/" + merchantOrder.PaymentId, idServerUrl: "https://localhost:5001", "client", "secret", "CheckoutApi").Result;

            if (response.IsSuccessStatusCode)
            {
                GetPaymentResponse deserialisedResponse = await response.Content.ReadAsAsync <GetPaymentResponse>();

                merchantOrder.MaskedCardNumber = deserialisedResponse.MaskedCardNumber;
                merchantOrder.ProviderVerifiedPaymentStatus = deserialisedResponse.Succeeded;
            }
        }
예제 #13
0
        public ActionResult <IPayment> Get(string id)
        {
            var payment = _paymentRepository.Read(id);

            if (payment == null)
            {
                return(NotFound());
            }

            GetPaymentResponse resp = new GetPaymentResponse(payment.Id, payment.CardNumber, payment.CardHolderName, payment.Amount, payment.Currency, payment.BankSuccess);

            return(Ok(resp));
        }
예제 #14
0
        public async Task <IActionResult> GetPayment(string paymentId)
        {
            try
            {
                GetPaymentResponse paymentResponse = await api.Payments.GetAsync(paymentId);

                return(Ok(paymentResponse));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
        public void ShouldDeserializeDefaultGetPaymentResponseCorporateSender()
        {
            var fileContent = GetJsonFileContent("./Resources/Sender/GetPaymentResponseCorporateSender.json");
            GetPaymentResponse getPaymentResponse =
                (GetPaymentResponse) new JsonSerializer().Deserialize(fileContent, typeof(GetPaymentResponse));

            getPaymentResponse.ShouldNotBeNull();
            getPaymentResponse.Sender.ShouldNotBeNull();
            getPaymentResponse.Sender.Type().ShouldBe(PaymentSenderType.Corporate);
            getPaymentResponse.Sender.ShouldBeAssignableTo(typeof(PaymentCorporateSender));
            PaymentCorporateSender sender = (PaymentCorporateSender)getPaymentResponse.Sender;

            sender.CompanyName.ShouldNotBeEmpty();
        }
        public void ShouldDeserializeDefaultGetPaymentResponseAlternativeSender()
        {
            var fileContent = GetJsonFileContent("./Resources/Sender/GetPaymentResponseAlternativeSender.json");
            GetPaymentResponse getPaymentResponse =
                (GetPaymentResponse) new JsonSerializer().Deserialize(fileContent, typeof(GetPaymentResponse));

            getPaymentResponse.ShouldNotBeNull();
            getPaymentResponse.Sender.ShouldNotBeNull();
            getPaymentResponse.Sender.Type().ShouldBeNull();
            getPaymentResponse.Sender.ShouldBeAssignableTo(typeof(ResponseAlternativeSender));
            ResponseAlternativeSender sender = (ResponseAlternativeSender)getPaymentResponse.Sender;

            sender["type"].ShouldBe("xyz");
        }
        private async Task <IActionResult> GetThreeDsPaymentAsync(string sessionId)
        {
            GetPaymentResponse payment = await _checkoutApi.Payments.GetAsync(sessionId);

            //if (payment.Approved)
            //{
            //    return Redirect(_appSettings.ClientURL + "customer/payment-success");
            //}
            //else
            //{
            //    return Redirect(_appSettings.ClientURL + "customer/payment-failure");
            //}
            if (!payment.Approved)
            {
                if (payment.Actions != null)
                {
                    List <Checkout.Payments.PaymentActionSummary> paymentActionSummaries =
                        payment.Actions.ToList();

                    if (!string.IsNullOrEmpty(paymentActionSummaries[0].ResponseCode))
                    {
                        paymentActionSummaries[0].ResponseSummary = new PaymentStatusCodes().GetPaymentStatus(paymentActionSummaries[0].ResponseCode);
                    }
                }
            }

            if (payment.Approved)
            {
                CustomerRegistration customer = _customerService.GetCustomerwithEmail(
                    ((Checkout.Payments.CustomerResponse)payment.Customer).Email);

                await _paymentResponseService.InsertPaymentDetails(new PaymentResponseDto {
                    Amount            = Convert.ToDecimal(payment.Amount),
                    Cardscheme        = ((Checkout.Payments.CardSourceResponse)payment.Source).Scheme,
                    Currency          = payment.Currency,
                    CardType          = ((Checkout.Payments.CardSourceResponse)payment.Source).CardType,
                    PaymentCustomerId = ((Checkout.Payments.CustomerResponse)payment.Customer).Id,
                    PaymentSourceId   = ((Checkout.Payments.CardSourceResponse)payment.Source).Id,
                    TransactionId     = payment.Id,
                    PaymentDate       = payment.RequestedOn,
                    PaymentStatus     = "Approved",
                    CustomerId        = customer.Id,
                    Card            = Convert.ToInt32(((Checkout.Payments.CardSourceResponse)payment.Source).Last4),
                    TransactionType = ((Checkout.Payments.CardSourceResponse)payment.Source).Type,
                    OrderId         = 0
                });
            }
            return(Ok(payment));
        }
        public async Task CanGetPaymentMetadata()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();
            var metadata = new KeyValuePair <string, object>("test", "1234");

            paymentRequest.Metadata.Add(metadata.Key, metadata.Value);
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.Metadata.ShouldNotBeNull();
            paymentDetails.Metadata.ShouldNotBeEmpty();
            paymentDetails.Metadata.ShouldHaveSingleItem();
            paymentDetails.Metadata.ShouldContain(d => d.Key == metadata.Key && d.Value.Equals(metadata.Value));
        }
        public async Task CanGetPaymentRecipient()
        {
            PaymentRequest <CardSource> paymentRequest = TestHelper.CreateCardPaymentRequest();

            paymentRequest.Recipient =
                new PaymentRecipient(new DateTime(1985, 05, 15), "4242424242", "W1T", "Wensle");
            PaymentResponse paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            GetPaymentResponse paymentDetails = await _api.Payments.GetAsync(paymentResponse.Payment.Id);

            paymentDetails.Recipient.ShouldNotBeNull();
            paymentDetails.Recipient.AccountNumber.ShouldBe(paymentRequest.Recipient.AccountNumber);
            paymentDetails.Recipient.DateOfBirth.ShouldBe(paymentRequest.Recipient.DateOfBirth);
            paymentDetails.Recipient.LastName.ShouldBe(paymentRequest.Recipient.LastName);
            paymentDetails.Recipient.Zip.ShouldBe(paymentRequest.Recipient.Zip);
        }
예제 #20
0
        private async Task ShouldGetPaymentDetails()
        {
            var paymentResponse = new GetPaymentResponse();

            _apiClient.Setup(apiClient =>
                             apiClient.Get <GetPaymentResponse>(PaymentsPath + "/payment_id", _authorization,
                                                                CancellationToken.None))
            .ReturnsAsync(() => paymentResponse);

            IPaymentsClient paymentsClient = new PaymentsClient(_apiClient.Object, _configuration.Object);

            var response = await paymentsClient.GetPaymentDetails("payment_id", CancellationToken.None);

            response.ShouldNotBeNull();
            response.ShouldBeSameAs(paymentResponse);
        }
예제 #21
0
        public async Task GivenExistingPayment_WhenGetPaymentIsCalled_ThenPaymentIsReturned()
        {
            var transactionId = Guid.NewGuid();
            var getPaymentByTransactionIdQueryResponse = new GetPaymentByTransactionIdQueryResponse();
            var mappedGetPaymentResponse = new GetPaymentResponse();

            _mediator.Send(Arg.Is <GetPaymentByTransactionIdQuery>(r => r.TransactionId.Equals(transactionId) && r.ApiKey.Equals(_apiKey)))
            .Returns(new Result <GetPaymentByTransactionIdQueryResponse> {
                Value = getPaymentByTransactionIdQueryResponse
            });
            _mapper.Map <GetPaymentResponse>(getPaymentByTransactionIdQueryResponse).Returns(mappedGetPaymentResponse);

            var response = await _controller.GetPayment(transactionId);

            response.Should().BeOfType <OkObjectResult>();

            var getPaymentResponse = ((OkObjectResult)response).Value as GetPaymentResponse;

            getPaymentResponse.Should().Be(mappedGetPaymentResponse);
        }
예제 #22
0
        public async Task CanGetAlternativePayment()
        {
            var alternativePaymentSource = new AlternativePaymentSource("giropay")
            {
                { "bic", "TESTDETT421" },
                { "purpose", "CKO giropay test" }
            };

            PaymentPending payment = await RequestAlternativePaymentAsync(alternativePaymentSource);

            GetPaymentResponse verifiedPayment = await _api.Payments.GetAsync(payment.Id);

            verifiedPayment.ShouldNotBeNull();
            verifiedPayment.Id.ShouldBe(payment.Id);

            var verifiedSource = verifiedPayment.Source.AsAlternativePayment();

            foreach (string key in verifiedSource.Keys)
            {
                verifiedSource[key].ShouldBe(alternativePaymentSource[key]);
            }
        }
        /// <summary>
        /// Maps payment list to payment response - Get
        /// </summary>
        /// <param name="paymentList"></param>
        /// <returns>Ordered list of Payments</returns>
        public IEnumerable <GetPaymentResponse> MapPayments(Task <IEnumerable <Payment> > paymentList)
        {
            List <GetPaymentResponse> listPayment = new List <GetPaymentResponse>();

            CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

            foreach (var item in paymentList.Result.ToList())
            {
                GetPaymentResponse payment = new GetPaymentResponse();

                payment.Id          = item.Id.ToString();
                payment.DueDate     = item.DueDate;
                payment.Status      = item.Status;
                payment.Category    = item.Category;
                payment.Description = item.Description;
                payment.Amount      = Math.Round(item.Amount / 100, 2).ToString("C2", CultureInfo.CurrentCulture);

                listPayment.Add(payment);
            }

            return(listPayment.OrderBy(date => date.DueDate.Year)
                   .ThenBy(date => date.DueDate.Month)
                   .ThenBy(date => date.DueDate.Day));
        }
예제 #24
0
        public GetPaymentResponse GetPaymentByPaymentId(GetPaymentRequest req)
        {
            var res = new GetPaymentResponse();
            try
            {
                long id = long.Parse(req.PaymentId);
                using (var container = new TransactionModelContainer())
                {
                    var payment = container.Payments
                                    .Include("PaymentItems")
                                    .FirstOrDefault(x => x.Id == id);

                    if (payment == null) throw new Exception("Payment is not found");

                    res.SetPaymentResponse(payment);
                    res.Succeed();
                }
            }
            catch (Exception ex)
            {
                res.Fail(ex);
                CreateLog(ex);
            }
            return res;
        }