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)); } }
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); } } }
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)); } }
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); } }