Esempio n. 1
0
        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);
        }