public override Transaction DoVoid(VoidTransactionRequest voidRequest)
        {
            VerifyStatus();
            Payment payment = voidRequest.Payment;

            if (payment == null)
            {
                throw new ArgumentNullException("request.Payment");
            }
            Transaction authorizeTransaction = voidRequest.AuthorizeTransaction;

            if (authorizeTransaction == null)
            {
                throw new ArgumentNullException("transactionRequest.AuthorizeTransaction");
            }

            CreditCardRequest request = InitializeVoidRequest(payment, authorizeTransaction);

            CreditCardResponse response = null;

            //RECORD REQUEST
            if (this.UseDebugMode)
            {
                string reqDebug = BuildRequestDebug(request);
                this.RecordCommunication(this.Name, CommunicationDirection.Send, reqDebug, null);
            }

            //TODO : Test mode is not supported.
            if (this.UseTestMode)
            {
                response = (CreditCardResponse)TransactionClient.doTransaction(request, this.AccountToken);
            }
            else
            {
                response = (CreditCardResponse)TransactionClient.doTransaction(request, this.AccountToken);
            }

            if (response != null)
            {
                //RECORD RESPONSE
                if (this.UseDebugMode)
                {
                    string respDebug = BuildResponseDebug(response);
                    this.RecordCommunication(this.Name, CommunicationDirection.Receive, respDebug, null);
                }

                return(ProcessResponse(payment, response, TransactionType.Void, voidRequest.Amount));
            }
            else
            {
                throw new Exception("Operation Failed, Response is null.");
            }
        }
        public override AuthorizeRecurringTransactionResponse DoAuthorizeRecurring(AuthorizeRecurringTransactionRequest authorizeRequest)
        {
            VerifyStatus();
            Payment payment = authorizeRequest.Payment;

            if (payment == null)
            {
                throw new ArgumentNullException("request.Payment");
            }
            Order order = payment.Order;

            if (order == null)
            {
                throw new ArgumentNullException("request.Payment.Order");
            }
            User user = order.User;

            if (user == null)
            {
                throw new ArgumentNullException("request.Payment.Order.User");
            }

            AuthorizeRecurringTransactionResponse response = new AuthorizeRecurringTransactionResponse();
            AuthorizeTransactionRequest           authRequest;
            Transaction tr1, tr2, errTrans;

            //VALIDATE THE PAYMENT PERIOD
            int payPeriod = GetPayPeriod(authorizeRequest);

            if (payPeriod == int.MinValue)
            {
                errTrans = Transaction.CreateErrorTransaction(this.PaymentGatewayId, authorizeRequest, "E", "The specified payment interval is not valid for this processor.");
                return(new AuthorizeRecurringTransactionResponse(errTrans));
            }

            if (authorizeRequest.RecurringChargeSpecified)
            {
                //make a sale transaction first
                authRequest         = new AuthorizeTransactionRequest(authorizeRequest.Payment, authorizeRequest.RemoteIP);
                authRequest.Capture = true;
                authRequest.Amount  = authorizeRequest.Amount;
                tr1 = DoAuthorize(authRequest);
                if (tr1.TransactionStatus != TransactionStatus.Successful)
                {
                    errTrans = Transaction.CreateErrorTransaction(PaymentGatewayId, authorizeRequest, "E", "Authorization Failed.");
                    errTrans.TransactionType = TransactionType.AuthorizeRecurring;
                    response.AddTransaction(tr1);
                    response.AddTransaction(errTrans);
                    response.Status = TransactionStatus.Failed;
                    return(response);
                }
                response.AddTransaction(tr1);
            }

            RecurringRequest  request     = InitializeAuthRecurringRequest(authorizeRequest, payPeriod);
            RecurringResponse recResponse = null;

            //RECORD REQUEST : TODO

            /*if (this.UseDebugMode)
             * {
             *  string reqDebug = BuildRequestDebug(request);
             *  this.RecordCommunication(this.Name, CommunicationDirection.Send, reqDebug);
             * }*/

            //TODO : Test mode is not supported.
            if (this.UseTestMode)
            {
                recResponse = (RecurringResponse)TransactionClient.doTransaction(request, this.AccountToken);
            }
            else
            {
                recResponse = (RecurringResponse)TransactionClient.doTransaction(request, this.AccountToken);
            }

            if (recResponse != null)
            {
                //RECORD RESPONSE
                if (this.UseDebugMode)
                {
                    string respDebug = BuildRecurringResponseDebug(recResponse);
                    this.RecordCommunication(this.Name, CommunicationDirection.Receive, respDebug, null);
                }

                tr2 = ProcessRecurringResponse(authorizeRequest, recResponse);
                response.AddTransaction(tr2);
                response.Status = tr2.TransactionStatus;

                return(response);
            }
            else
            {
                throw new Exception("Operation Failed, Response is null.");
            }
        }
Esempio n. 3
0
        public PayPros Initiate(PayPros payment, string cardNumber)
        {
            #region CREATE REQUEST
            CreditCardRequest request = new CreditCardRequest();
            try
            {
                request.setCreditCardNumber(cardNumber);
                if (!string.IsNullOrEmpty(payment.CCV))
                {
                    request.setCreditCardVerificationNumber(payment.CCV);
                }
                request.setExpireMonth(payment.CCExpireMonth);
                request.setExpireYear(payment.CCExpireYear);
                request.setChargeType(CreditCardRequest.SALE);
                request.setPurchaseOrderNumber(payment.PaymentAccount);
                request.setChargeTotal((double)payment.PaymentAmount);

                request.setPartialApprovalFlag(false);

                if (!string.IsNullOrEmpty(payment.RequestingOrigin))
                {
                    request.setCustomerIpAddress(payment.RequestingOrigin);
                }

                switch (_account)
                {
                case PaymentAccounts.UBO:
                    request.setIndustry("DIRECT_MARKETING");
                    break;

                case PaymentAccounts.Judicial:
                    break;

                default:
                    break;
                }

                switch (_method)
                {
                case PaymentMethods.Web:
                    request.setTransactionConditionCode(5);
                    break;

                case PaymentMethods.Phone:
                    request.setTransactionConditionCode(2);
                    break;

                default:
                    break;
                }
            }
            catch (Exception)
            {
                throw new ArgumentException("Unable to create request");
            }
            #endregion

            #region PROCESS REQUEST
            string             payprosToken = (payment.IsTest ? testTokens[_account] : accountTokens[_account]);
            CreditCardResponse response     = (CreditCardResponse)TransactionClient.doTransaction(request, payprosToken);
            payment.responseCode     = (payment.IsTest ? (-1 * response.getResponseCode()) : response.getResponseCode());//flip sign of response code for test payments (keeps it from being written for processing)
            payment.responseText     = response.getResponseCodeText();
            payment.retryRecommended = response.getRetryRecommended();
            payment.timestamp        = response.getTimeStamp();
            #endregion

            #region RECORD RESPONSE
            double authorizedAmount = 0;
            if (double.TryParse(response.getAuthorizedAmount(), out authorizedAmount))
            {
                payment.PaymentAmount = (decimal)authorizedAmount;
            }

            long orderID;
            if (long.TryParse(response.getOrderId(), out orderID))
            {
                payment.orderID = orderID;
            }

            long batchID;
            if (long.TryParse(response.getBatchId(), out batchID))
            {
                payment.batchID = batchID;
            }

            long bankApprovalCode;
            if (long.TryParse(response.getBankApprovalCode(), out bankApprovalCode))
            {
                payment.bankApprovalCode = bankApprovalCode;
            }

            long bankTransactionId;
            if (long.TryParse(response.getBankTransactionId(), out bankTransactionId))
            {
                payment.bankTransactionId = bankTransactionId;
            }

            int creditCardVerification;
            if (int.TryParse(response.getCreditCardVerificationResponse(), out creditCardVerification))
            {
                payment.creditCardVerificationResponse = creditCardVerification;
            }
            #endregion

            return(payment);
        }