internal static HttpResponseMessage CancelPurchase(LatitudePayCancelPurchaseRequest request) { var existingPayment = (from p in _Payments where request.PaymentPlanToken == p.InitialResponse.Token select p).FirstOrDefault(); if (existingPayment == null) { return(ToJsonHttpResponse(HttpStatusCode.NotFound, new { error = "Payment not found" })); } if (existingPayment.IsCancelled || existingPayment.CurrentPaymentStatus == LatitudePayConstants.StatusDeclined) { return(ToJsonHttpResponse(HttpStatusCode.NotFound, new { error = "Payment is already declined" })); } existingPayment.IsCancelled = true; existingPayment.CurrentPaymentStatus = LatitudePayConstants.StatusDeclined; existingPayment.StatusMessage = "Cancelled by merchant"; existingPayment.CancelledDate = DateTimeOffset.Now; return(ToJsonHttpResponse(existingPayment.InitialResponseStatus, new LatitudePayCancelPurchaseResponse() { CancelledDate = existingPayment.CancelledDate.Date, Token = existingPayment.InitialResponse.Token })); }
public async Task Cancel() { using (var client = TestUtils.GetMockClient()) { 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 = 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 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); } }