private TransactionResponse ProcessCreditRequest(TransactionRequest transactionRequest, TransactionData transData, ITokenizedPayment payment, decimal amount)
        {
            var transactionDetail = GetTransactionDetails(transData, transactionRequest);

            if (transactionDetail.transactionStatus != AuthorizeTokenExGateway.SettledStatus)
            {
                throw new PaymentException(PaymentException.ErrorType.StatusError, "", "Refund payment requires transaction status to be settled.");
            }

            // clone the Refund method in order to set InvoiceNumber
            var request = new AuthorizeNet.APICore.createCustomerProfileTransactionRequest
            {
                transaction = new AuthorizeNet.APICore.profileTransactionType
                {
                    Item = new AuthorizeNet.APICore.profileTransRefundType
                    {
                        amount            = amount,
                        customerProfileId = payment.Properties[AuthorizeTokenExGateway.ProviderProfileIdPropertyName] as string,
                        transId           = transData.transId,
                        order             = new AuthorizeNet.APICore.orderExType
                        {
                            purchaseOrderNumber = transData.purchaseOrderNum,
                            invoiceNumber       = transData.invoiceNum
                        }
                    }
                }
            };

            return(new TransactionResponse(_authorizeTokenExService.SendRequest(request), false));
        }
        private TransactionResponse ProcessCaptureOnlyRequest(TransactionRequest transactionRequest, TransactionData transData, ITokenizedPayment payment, decimal amount)
        {
            if (IsTransactionCapturedOrSettled(transData, transactionRequest))
            {
                return(new TransactionResponse(null, true));
            }

            // clone the capture method in order to set InvoiceNumber
            var request = new AuthorizeNet.APICore.createCustomerProfileTransactionRequest
            {
                transaction = new AuthorizeNet.APICore.profileTransactionType
                {
                    Item = new AuthorizeNet.APICore.profileTransCaptureOnlyType
                    {
                        approvalCode      = transData.AuthorizationCode,
                        customerProfileId = payment.Properties[AuthorizeTokenExGateway.ProviderProfileIdPropertyName] as string,
                        amount            = amount,
                        order             = new AuthorizeNet.APICore.orderExType
                        {
                            purchaseOrderNumber = transData.purchaseOrderNum,
                            invoiceNumber       = transData.invoiceNum
                        }
                    }
                }
            };

            return(new TransactionResponse(_authorizeTokenExService.SendRequest(request), false));
        }