public static TransactionResult ProcessVoid(TransactionRequest voidRequest, SquareSettings squareSettings, ILogger logger) { var order = voidRequest.Order; var config = GetConfiguration(squareSettings); var paymentId = voidRequest.GetParameterAs <string>("paymentId"); var paymentsApi = new PaymentsApi(config); //perform the call var paymentResponse = paymentsApi.CancelPayment(paymentId); var transactionResult = new TransactionResult() { OrderGuid = order.Guid, TransactionGuid = Guid.NewGuid().ToString(), }; if (paymentResponse != null) { var payment = paymentResponse.Payment; transactionResult.Success = true; transactionResult.TransactionAmount = (decimal)(payment.AmountMoney.Amount ?? 0) / 100; transactionResult.ResponseParameters = new Dictionary <string, object>() { { "PaymentId", payment.Id }, { "ReferenceId", payment.ReferenceId } }; if (payment.Status == "COMPLETED") { transactionResult.NewStatus = PaymentStatus.Complete; } else { transactionResult.NewStatus = PaymentStatus.Failed; var errors = string.Join(",", paymentResponse.Errors); logger.Log <TransactionResult>(LogLevel.Warning, "The void for Order#" + order.Id + " by square failed." + errors); transactionResult.Exception = new Exception("An error occurred while voiding payment. Error Details: " + errors); transactionResult.Success = false; } } else { logger.Log <TransactionResult>(LogLevel.Warning, "The void for Order#" + order.Id + " by square failed. No response received."); transactionResult.Success = false; transactionResult.Exception = new Exception("An error occurred while voiding payment"); } return(transactionResult); }