internal static HttpResponseMessage CreatePurchase(LatitudePayCreatePosPurchaseRequest request)
        {
            if (!String.IsNullOrWhiteSpace(request.IdempotencyKey))
            {
                var existingRequest = (from p in _Payments where request.IdempotencyKey == p.InitialRequest.IdempotencyKey select p).FirstOrDefault();
                if (existingRequest != null)
                {
                    return(ToJsonHttpResponse(existingRequest.InitialResponseStatus, existingRequest.InitialResponse));
                }
            }

            var token           = System.Guid.NewGuid().ToString();
            var responseContent = new LatitudePayCreatePosPurchaseResponse()
            {
                CommissionAmount = 0M,
                ExpiryDate       = DateTimeOffset.Now.AddMinutes(10),
                Reference        = "GPV-" + System.Guid.NewGuid().ToString(),
                Token            = token,
                StatusUrl        = new Uri($"http://api.genoapay.com/v3/sale/pos/{token}/status")
            };

            var mockPayment = new MockLatitudePayPayment()
            {
                InitialResponseStatus = HttpStatusCode.OK,
                InitialRequest        = request,
                InitiallyReceivedAt   = DateTimeOffset.Now,
                InitialResponse       = responseContent,
                CurrentPaymentStatus  = LatitudePayConstants.StatusPending,
                IsCancelled           = false
            };

            _Payments.Add(mockPayment);

            return(ToJsonHttpResponse(mockPayment.InitialResponseStatus, mockPayment.InitialResponse));
        }
        private static LatitudePayCreatePosPurchaseRequest CreateMinimalPurchaseRequest()
        {
            var request = new LatitudePayCreatePosPurchaseRequest()
            {
                Reference       = System.Guid.NewGuid().ToString(),
                BillingAddress  = null,
                ShippingAddress = null,
                Customer        = new LatitudePayCustomer()
                {
                    MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                },
                Products = new LatitudePayProduct[] { new LatitudePayProduct()
                                                      {
                                                          Name = "Test", Price = new LatitudePayMoney(1, "NZD"), Quantity = 1, Sku = "Test"
                                                      } },
                ShippingLines = null,
                TaxAmount     = new LatitudePayMoney(0M, "NZD"),
                TotalAmount   = new LatitudePayMoney(35.5M, "NZD"),
                ReturnUrls    = null
            };

            request.IdempotencyKey = request.Reference;
            return(request);
        }
        public async Task PurchaseWithMinimalDetails()
        {
            using (var client = TestUtils.GetMockClient())
            {
                var request = new LatitudePayCreatePosPurchaseRequest()
                {
                    Reference       = System.Guid.NewGuid().ToString(),
                    BillingAddress  = null,
                    ShippingAddress = null,
                    Customer        = new LatitudePayCustomer()
                    {
                        MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                    },
                    Products = new LatitudePayProduct[] { new LatitudePayProduct()
                                                          {
                                                              Name = "Test", Price = new LatitudePayMoney(1, "NZD"), Quantity = 1, Sku = "Test"
                                                          } },
                    ShippingLines = null,
                    TaxAmount     = new LatitudePayMoney(0M, "NZD"),
                    TotalAmount   = new LatitudePayMoney(35.5M, "NZD"),
                    ReturnUrls    = null
                };
                request.IdempotencyKey = request.Reference;

                var purchaseResponse = await client.CreatePosPurchaseAsync(request);

                Assert.IsNotNull(purchaseResponse);
                Assert.IsFalse(String.IsNullOrWhiteSpace(purchaseResponse.Token));
                Assert.IsNotNull(purchaseResponse.StatusUrl);

                await client.CancelPurchaseAsync(new LatitudePayCancelPurchaseRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token
                });
            }
        }
        public async Task ThrowsWhenCalledAfterDisposed()
        {
            var client = TestUtils.GetMockClient();

            client.Dispose();

            var request = new LatitudePayCreatePosPurchaseRequest()
            {
                Reference      = System.Guid.NewGuid().ToString(),
                BillingAddress = new LatitudePayAddress()
                {
                    AddressLine1 = "124 Fifth Avenue",
                    Suburb       = "Auckland",
                    CityTown     = "Auckland",
                    State        = "Auckland",
                    Postcode     = "1010",
                    CountryCode  = "NZ"
                },
                ShippingAddress = new LatitudePayAddress()
                {
                    AddressLine1 = "124 Fifth Avenue",
                    Suburb       = "Auckland",
                    CityTown     = "Auckland",
                    State        = "Auckland",
                    Postcode     = "1010",
                    CountryCode  = "NZ"
                },
                Customer = new LatitudePayCustomer()
                {
                    Address = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    FirstName    = "John",
                    Surname      = "Doe",
                    MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                },
                Products = new List <LatitudePayProduct>()
                {
                    new LatitudePayProduct()
                    {
                        Name        = "Tennis Ball Multipack",
                        Price       = new LatitudePayMoney(30, "NZD"),
                        Sku         = "abc123",
                        Quantity    = 1,
                        TaxIncluded = true
                    }
                },
                ShippingLines = new List <LatitiudePayShippingLine>()
                {
                    new LatitiudePayShippingLine()
                    {
                        Carrier = "NZ Post",
                        Price   = new LatitudePayMoney(5.5M, "NZD")
                    }
                },
                TaxAmount   = new LatitudePayMoney(5.325M, "NZD"),
                TotalAmount = new LatitudePayMoney(35.5M, "NZD"),
                ReturnUrls  = new LatitudePayReturnUrls()
                {
                    SuccessUrl  = new Uri("http://genoapay.com/success"),
                    FailUrl     = new Uri("http://genoapay.com/fail"),
                    CallbackUrl = new Uri("http://genoapay.com/fail-safe-callback")
                }
            };

            request.IdempotencyKey = request.Reference;

            var purchaseResponse = await client.CreatePosPurchaseAsync(request);
        }
        public async Task Refund()
        {
            using (var client = TestUtils.GetMockClient())
            {
                var request = new LatitudePayCreatePosPurchaseRequest()
                {
                    Reference      = "TBR-" + System.Guid.NewGuid().ToString(),
                    BillingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    ShippingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    Customer = new LatitudePayCustomer()
                    {
                        Address = new LatitudePayAddress()
                        {
                            AddressLine1 = "124 Fifth Avenue",
                            Suburb       = "Auckland",
                            CityTown     = "Auckland",
                            State        = "Auckland",
                            Postcode     = "1010",
                            CountryCode  = "NZ"
                        },
                        FirstName    = "John",
                        Surname      = "Doe",
                        MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                    },
                    Products = new List <LatitudePayProduct>()
                    {
                        new LatitudePayProduct()
                        {
                            Name        = "Tennis Ball Multipack",
                            Price       = new LatitudePayMoney(30, "NZD"),
                            Sku         = "abc123",
                            Quantity    = 1,
                            TaxIncluded = true
                        }
                    },
                    ShippingLines = new List <LatitiudePayShippingLine>()
                    {
                        new LatitiudePayShippingLine()
                        {
                            Carrier = "NZ Post",
                            Price   = new LatitudePayMoney(5.5M, "NZD")
                        }
                    },
                    TaxAmount   = new LatitudePayMoney(5.325M, "NZD"),
                    TotalAmount = new LatitudePayMoney(35.5M, "NZD"),
                    ReturnUrls  = new LatitudePayReturnUrls()
                    {
                        SuccessUrl  = new Uri("http://genoapay.com/success"),
                        FailUrl     = new Uri("http://genoapay.com/fail"),
                        CallbackUrl = new Uri("http://genoapay.com/fail-safe-callback")
                    }
                };

                var purchaseResponse = await client.CreatePosPurchaseAsync(request);

                Assert.IsNotNull(purchaseResponse);
                Assert.IsFalse(String.IsNullOrWhiteSpace(purchaseResponse.Token));
                Assert.IsNotNull(purchaseResponse.StatusUrl);

                //Wait until payment enters final status
                var statusRequest = new LatitudePayPurchaseStatusRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token
                };
                var finalStatus = false;
                LatitudePayPurchaseStatusResponse paymentStatus;
                while (!finalStatus)
                {
                    await Task.Delay(5000).ConfigureAwait(false);

                    paymentStatus = await client.GetPurchaseStatusAsync(statusRequest).ConfigureAwait(false);

                    finalStatus = !String.Equals(paymentStatus.Status, LatitudePayConstants.StatusPending, StringComparison.OrdinalIgnoreCase);
                }

                var refundRequest = new LatitudePayCreateRefundRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token, Amount = request.TotalAmount, Reason = "Test refund", Reference = System.Guid.NewGuid().ToString()
                };
                var refundResponse = await client.CreateRefundAsync(refundRequest);

                Assert.IsNotNull(refundResponse);
                Assert.IsFalse(String.IsNullOrEmpty(refundResponse.RefundId));
                Assert.IsFalse(String.IsNullOrEmpty(refundResponse.Reference));
            }
        }
Ejemplo n.º 6
0
        public async Task ThrowsLatitudePayApiExceptionForBadRequest()
        {
            using (var client = TestUtils.GetSandboxClient())
            {
                var request = new LatitudePayCreatePosPurchaseRequest()
                {
                    Reference      = System.Guid.NewGuid().ToString(),
                    BillingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    ShippingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    Customer = new LatitudePayCustomer()
                    {
                        MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                    },
                    Products = new List <LatitudePayProduct>()
                    {
                        new LatitudePayProduct()
                        {
                            Name        = "Tennis Ball Multipack",
                            Price       = new LatitudePayMoney(30, "NZD"),
                            Sku         = "abc123",
                            Quantity    = 1,
                            TaxIncluded = true
                        }
                    },
                    ShippingLines = new List <LatitiudePayShippingLine>()
                    {
                        new LatitiudePayShippingLine()
                        {
                            Carrier = "NZ Post",
                            Price   = new LatitudePayMoney(5.5M, "NZD")
                        }
                    },
                    TaxAmount   = new LatitudePayMoney(5.325M, "inv"),
                    TotalAmount = new LatitudePayMoney(35.5M, "NZD"),
                    ReturnUrls  = new LatitudePayReturnUrls()
                    {
                        SuccessUrl  = new Uri("http://genoapay.com/success"),
                        FailUrl     = new Uri("http://genoapay.com/fail"),
                        CallbackUrl = new Uri("http://genoapay.com/fail-safe-callback")
                    }
                };
                request.IdempotencyKey = request.Reference;

                try
                {
                    var purchaseResponse = await client.CreatePosPurchaseAsync(request);

                    Assert.Fail("No exception thrown, expected LatitudePayApiException");
                }
                catch (LatitudePayApiException ex)
                {
                    Assert.AreEqual(400, ex.StatusCode);
                    Assert.AreEqual("Invalid tax amount (or currency) specified, at least one cart item includes taxes\n", ex.Message);
                }
            }
        }
Ejemplo n.º 7
0
        public async Task ThrowsUnauthorisedException_ForAuthorisationFailure()
        {
            var config = new LatitudePayClientConfiguration()
            {
                ApiKey      = "InvalidKey",
                ApiSecret   = "InvalidSecret",
                Environment = LatitudePayEnvironment.Uat
            };

            using (var client = new LatitudePayClient(config))
            {
                var request = new LatitudePayCreatePosPurchaseRequest()
                {
                    Reference      = System.Guid.NewGuid().ToString(),
                    BillingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    ShippingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    Customer = new LatitudePayCustomer()
                    {
                        Address = new LatitudePayAddress()
                        {
                            AddressLine1 = "124 Fifth Avenue",
                            Suburb       = "Auckland",
                            CityTown     = "Auckland",
                            State        = "Auckland",
                            Postcode     = "1010",
                            CountryCode  = "NZ"
                        },
                        FirstName    = "John",
                        Surname      = "Doe",
                        MobileNumber = Environment.GetEnvironmentVariable("LatitudePay_TestMobileNumber")
                    },
                    Products = new List <LatitudePayProduct>()
                    {
                        new LatitudePayProduct()
                        {
                            Name        = "Tennis Ball Multipack",
                            Price       = new LatitudePayMoney(30, "NZD"),
                            Sku         = "abc123",
                            Quantity    = 1,
                            TaxIncluded = true
                        }
                    },
                    ShippingLines = new List <LatitiudePayShippingLine>()
                    {
                        new LatitiudePayShippingLine()
                        {
                            Carrier = "NZ Post",
                            Price   = new LatitudePayMoney(5.5M, "NZD")
                        }
                    },
                    TaxAmount   = new LatitudePayMoney(5.325M, "NZD"),
                    TotalAmount = new LatitudePayMoney(35.5M, "NZD"),
                    ReturnUrls  = new LatitudePayReturnUrls()
                    {
                        SuccessUrl  = new Uri("http://genoapay.com/success"),
                        FailUrl     = new Uri("http://genoapay.com/fail"),
                        CallbackUrl = new Uri("http://genoapay.com/fail-safe-callback")
                    }
                };
                request.IdempotencyKey = request.Reference;

                var purchaseResponse = await client.CreatePosPurchaseAsync(request);

                Assert.IsNotNull(purchaseResponse);
                Assert.IsFalse(String.IsNullOrWhiteSpace(purchaseResponse.Token));
                Assert.IsNotNull(purchaseResponse.StatusUrl);

                //Wait until payment enters final status
                var statusRequest = new LatitudePayPurchaseStatusRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token
                };
                var finalStatus = false;
                LatitudePayPurchaseStatusResponse paymentStatus = null;
                while (!finalStatus)
                {
                    await Task.Delay(5000).ConfigureAwait(false);

                    paymentStatus = await client.GetPurchaseStatusAsync(statusRequest).ConfigureAwait(false);

                    finalStatus = !String.Equals(paymentStatus.Status, LatitudePayConstants.StatusPending, StringComparison.OrdinalIgnoreCase);
                }

                Assert.AreEqual(LatitudePayConstants.StatusApproved, paymentStatus.Status);
                Assert.IsFalse(String.IsNullOrEmpty(paymentStatus.Token));
                Assert.IsFalse(String.IsNullOrEmpty(paymentStatus.Message));
            }
        }
Ejemplo n.º 8
0
        public async Task Cancel_Genoapay()
        {
            using (var client = TestUtils.GetGenoapaySandboxClient())
            {
                var request = new LatitudePayCreatePosPurchaseRequest()
                {
                    Reference      = "TBC-" + System.Guid.NewGuid().ToString(),
                    BillingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    ShippingAddress = new LatitudePayAddress()
                    {
                        AddressLine1 = "124 Fifth Avenue",
                        Suburb       = "Auckland",
                        CityTown     = "Auckland",
                        State        = "Auckland",
                        Postcode     = "1010",
                        CountryCode  = "NZ"
                    },
                    Customer = new LatitudePayCustomer()
                    {
                        Address = new LatitudePayAddress()
                        {
                            AddressLine1 = "124 Fifth Avenue",
                            Suburb       = "Auckland",
                            CityTown     = "Auckland",
                            State        = "Auckland",
                            Postcode     = "1010",
                            CountryCode  = "NZ"
                        },
                        FirstName    = "John",
                        Surname      = "Doe",
                        MobileNumber = "025555555"                         //UAT environment allows us to use any mobile number that starts 02x-xxx-xxx, and this number shouldn't actually be in use so shouldn't bother anyone from automated tests
                    },
                    Products = new List <LatitudePayProduct>()
                    {
                        new LatitudePayProduct()
                        {
                            Name        = "Tennis Ball Multipack",
                            Price       = new LatitudePayMoney(30, "NZD"),
                            Sku         = "abc123",
                            Quantity    = 1,
                            TaxIncluded = true
                        }
                    },
                    ShippingLines = new List <LatitiudePayShippingLine>()
                    {
                        new LatitiudePayShippingLine()
                        {
                            Carrier = "NZ Post",
                            Price   = new LatitudePayMoney(5.5M, "NZD")
                        }
                    },
                    TaxAmount   = new LatitudePayMoney(5.325M, "NZD"),
                    TotalAmount = new LatitudePayMoney(35.5M, "NZD"),
                    ReturnUrls  = new LatitudePayReturnUrls()
                    {
                        SuccessUrl  = new Uri("http://genoapay.com/success"),
                        FailUrl     = new Uri("http://genoapay.com/fail"),
                        CallbackUrl = new Uri("http://genoapay.com/fail-safe-callback")
                    }
                };

                var purchaseResponse = await client.CreatePosPurchaseAsync(request);

                Assert.IsNotNull(purchaseResponse);
                Assert.IsFalse(String.IsNullOrWhiteSpace(purchaseResponse.Token));
                Assert.IsNotNull(purchaseResponse.StatusUrl);

                //Wait until payment enters final status
                var cancelRequest = new LatitudePayCancelPurchaseRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token
                };

                await Task.Delay(5000).ConfigureAwait(false);

                var cancelResponse = await client.CancelPurchaseAsync(cancelRequest).ConfigureAwait(false);

                Assert.IsNotNull(cancelResponse);
                Assert.IsFalse(String.IsNullOrWhiteSpace(cancelResponse.Token));

                var statusRequest = new LatitudePayPurchaseStatusRequest()
                {
                    PaymentPlanToken = purchaseResponse.Token
                };
                var paymentStatus = await client.GetPurchaseStatusAsync(statusRequest).ConfigureAwait(false);

                Assert.IsNotNull(paymentStatus);
                Assert.AreEqual(LatitudePayConstants.StatusDeclined, paymentStatus.Status);
            }
        }