Ejemplo n.º 1
0
 public override Transaction DoAuthorize(AuthorizeTransactionRequest authorizeRequest)
 {
     //New orders are already authorized in GoogleCheckout
     //authorize should never be called from merchant admin. authorization updates take place
     //on google checkout call-backs.
     throw new NotSupportedException("Direct Credit Card Authorization Requests are not supported.");
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Submits an authorization request
        /// </summary>
        /// <param name="authorizeRequest">The authorization request</param>
        /// <returns>Transaction that represents the result of the authorization request</returns>
        public override Transaction DoAuthorize(AuthorizeTransactionRequest authorizeRequest)
        {
            Transaction transaction = new Transaction();

            transaction.PaymentGatewayId = this.PaymentGatewayId;
            //always use authorize capture.
            transaction.TransactionType = TransactionType.AuthorizeCapture;

            string          serialNumber = authorizeRequest.Payment.AccountData;
            GiftCertificate gc           = GiftCertificateDataSource.LoadForSerialNumber(serialNumber);

            string errorMessage = string.Empty;

            if (gc == null)
            {
                errorMessage = "No gift certificate found with given serial number.";
            }
            else if (gc.IsExpired())
            {
                errorMessage = "Gift certificate is expired.";
            }
            else if (gc.Balance < authorizeRequest.Amount)
            {
                errorMessage = "Gift certificate does not have enough balance to complete this transaction.";
            }
            else
            {
                LSDecimal newAmount = gc.Balance - authorizeRequest.Amount;
                gc.Balance = newAmount;
                GiftCertificateTransaction trans = new GiftCertificateTransaction();
                trans.TransactionDate = LocaleHelper.LocalNow;
                trans.Amount          = authorizeRequest.Amount;
                trans.OrderId         = authorizeRequest.Payment.OrderId;
                trans.Description     = string.Format("An amount of {0:lc} used in purchase. Remaining balance is {1:lc}.", authorizeRequest.Amount, newAmount);
                gc.Transactions.Add(trans);
                gc.Save();
            }

            if (string.IsNullOrEmpty(errorMessage))
            {
                transaction.TransactionStatus = TransactionStatus.Successful;
                transaction.ResponseCode      = "0";
                transaction.ResponseMessage   = "SUCCESS";
                transaction.Amount            = authorizeRequest.Amount;
            }
            else
            {
                transaction.TransactionStatus = TransactionStatus.Failed;
                transaction.ResponseCode      = "1";
                transaction.ResponseMessage   = errorMessage;
                transaction.Amount            = authorizeRequest.Amount;
            }

            return(transaction);
        }
Ejemplo n.º 3
0
        public override Transaction DoAuthorize(AuthorizeTransactionRequest 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");
            }
            //BUILD REQUEST
            Dictionary <string, string> sensitiveData = new Dictionary <string, string>();
            bool   capture     = this.UseAuthCapture || authorizeRequest.Capture;
            string requestData = InitializeAuthRequest(payment, order, user, sensitiveData, capture);

            //RECORD REQUEST
            if (this.UseDebugMode)
            {
                this.RecordCommunication(this.Name, CommunicationDirection.Send, requestData, sensitiveData);
            }
            //SEND REQUEST AND GET RESPONSE
            string responseData = SendRequestToGateway(requestData);

            if (responseData != null)
            {
                //RECORD RESPONSE
                if (this.UseDebugMode)
                {
                    this.RecordCommunication(this.Name, CommunicationDirection.Receive, responseData, null);
                }
                return(ProcessResponse(payment, responseData, capture ? TransactionType.AuthorizeCapture : TransactionType.Authorize, authorizeRequest.Amount));
            }
            else
            {
                throw new Exception("Operation Failed, Response is null.");
            }
        }
Ejemplo n.º 4
0
        public override Transaction DoAuthorize(AuthorizeTransactionRequest authorizeRequest)
        {
            Payment payment = authorizeRequest.Payment;

            if (payment == null)
            {
                throw new ArgumentNullException("request.Payment");
            }
            if (authorizeRequest.Capture || this.UseAuthCapture)
            {
                return(CreateTransaction(TransactionType.AuthorizeCapture, authorizeRequest.Amount));
            }
            else
            {
                return(CreateTransaction(authorizeRequest.TransactionType, authorizeRequest.Amount));
            }
        }
Ejemplo n.º 5
0
        public async Task <ResponseViewModel> AuthorizeTransaction(SaleViewModel sale, string merchantOrderId)
        {
            var soapSendRequestMessage = new AuthorizeTransactionRequest();

            soapSendRequestMessage.Version   = "v1.0";
            soapSendRequestMessage.RequestId = Guid.NewGuid();
            soapSendRequestMessage.OrderData = new OrderDataRequest
            {
                MerchantId = new Guid(ConfigurationManager.AppSettings["merchantId"]),
                OrderId    = merchantOrderId
            };

            soapSendRequestMessage.CustomerData = new CustomerDataRequest
            {
                CustomerName = sale.CustomerName
            };

            soapSendRequestMessage.PaymentDataCollection = new PaymentDataRequest[1];
            var payment = new CreditCardDataRequest
            {
                CardNumber         = sale.CreditCardCardNumber,
                Amount             = sale.PaymentAmount,
                CardExpirationDate = sale.CreditCardExpirationDate,
                CardHolder         = sale.CreditCardHolder,
                CardSecurityCode   = sale.CreditCardSecurityCode,
                PaymentMethod      = 997,
                Currency           = "BRL",
                Country            = "BRA",
                NumberOfPayments   = (short)(sale.PaymentInstallments),
                PaymentPlan        = 0,
                TransactionType    = 1
            };

            soapSendRequestMessage.PaymentDataCollection[0] = payment;

            var soapResponse =
                await PagadorTransactionWrapper.AuthorizeTransactionAsync(soapSendRequestMessage);

            var responseObject = new ResponseViewModel
            {
                PaymentId = soapResponse.PaymentDataCollection[0].BraspagTransactionId
            };

            return(responseObject);
        }
Ejemplo n.º 6
0
        //POST PARAMETERS
        public AuthorizeTransactionRequest AddingAuthorizeParameters(SoapViewModel soapCreditCard)
        {
            var serviceOrderData = new OrderDataRequest
            {
                MerchantId = new Guid(soapCreditCard.MerchanId),
                OrderId    = "0000"
            };

            var serviceCustomer = new CustomerDataRequest
            {
                CustomerIdentity     = soapCreditCard.Identity,
                CustomerIdentityType = soapCreditCard.CustomerIdentityType,
                CustomerName         = soapCreditCard.CustomerName,
                CustomerEmail        = soapCreditCard.CustomerEmail
            };

            var servicePayment = new CreditCardDataRequest
            {
                PaymentMethod      = soapCreditCard.PaymentMethod,
                Amount             = soapCreditCard.Amount,
                Currency           = soapCreditCard.Currency,
                Country            = soapCreditCard.Country,
                NumberOfPayments   = (short)soapCreditCard.NumberPayments,
                PaymentPlan        = 0, // cash
                TransactionType    = 1, // preauth
                CardHolder         = soapCreditCard.CustomerName,
                CardNumber         = soapCreditCard.CardNumber,
                CardSecurityCode   = soapCreditCard.SecurityCode,
                CardExpirationDate = soapCreditCard.Expiration
            };

            var authorizationRequest = new AuthorizeTransactionRequest
            {
                RequestId             = new Guid("00000000-0000-0000-0000-000000000000"),
                Version               = "1.0",
                CustomerData          = serviceCustomer,
                OrderData             = serviceOrderData,
                PaymentDataCollection = new PaymentDataRequest[] { servicePayment }
            };

            return(authorizationRequest);
        }
        public override Transaction DoAuthorize(AuthorizeTransactionRequest authorizeRequest)
        {
            VerifyGatewayConfig();
            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");
            }

            Dictionary <string, string> sensitiveData = new Dictionary <string, string>();
            String requestData = InitializeAuthRequest(payment, order, user, sensitiveData);

            //RECORD REQUEST
            if (this.UseDebugMode)
            {
                this.RecordCommunication(this.Name, CommunicationDirection.Send, requestData, sensitiveData);
            }
            //send request and get response
            String responseData = SendRequest(requestData);

            //RECORD RESPONSE
            if (this.UseDebugMode)
            {
                this.RecordCommunication(this.Name, CommunicationDirection.Receive, responseData, null);
            }
            return(ProcessResponse(payment, responseData, TransactionType.AuthorizeCapture));
        }
 public Task <AuthorizeTransactionResponse> AuthorizeTransactionAsync(AuthorizeTransactionRequest request)
 {
     return(_pagadorTransactionSoapClient.AuthorizeTransactionAsync(request));
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Submits an authorization request
 /// </summary>
 /// <param name="authorizeRequest">The authorization request</param>
 /// <returns>Transaction that represents the result of the authorization request</returns>
 public abstract Transaction DoAuthorize(AuthorizeTransactionRequest authorizeRequest);
Ejemplo n.º 10
0
        private CreditCardRequest InitializeAuthRequest(AuthorizeTransactionRequest authorizeRequest)
        {
            Payment payment = authorizeRequest.Payment;
            Order   order   = payment.Order;
            User    user    = order.User;

            VerifyPaymentInstrument(payment);
            CreditCardRequest request = new CreditCardRequest();

            AccountDataDictionary accountData = new AccountDataDictionary(payment.AccountData);

            //set user info
            if (accountData.ContainsKey("AccountName") && !string.IsNullOrEmpty(accountData["AccountName"]))
            {
                string[] names = accountData["AccountName"].Split(" ".ToCharArray());
                request.setBillFirstName(names[0]);
                if (names.Length > 1)
                {
                    request.setBillLastName(string.Join(" ", names, 1, names.Length - 1));
                }
                else
                {
                    //no last name. what to do? send empty string? TODO : check the API
                    request.setBillLastName(string.Empty);
                }
            }
            else
            {
                request.setBillFirstName(order.BillToFirstName);
                request.setBillLastName(order.BillToLastName);
            }

            request.setBillEmail(order.BillToEmail);
            request.setBillCompany(order.BillToCompany);
            request.setBillAddressOne(order.BillToAddress1);
            request.setBillAddressTwo(order.BillToAddress2);
            request.setBillCity(order.BillToCity);
            request.setBillStateOrProvince(order.BillToProvince);
            request.setBillPostalCode(order.BillToPostalCode);
            request.setBillCountryCode(order.BillToCountryCode);
            request.setBillPhone(order.BillToPhone);
            request.setBillFax(order.BillToFax);
            request.setOrderUserId(user.UserId.ToString());

            SetCreditCardData(request, payment, accountData);

            // set charge details
            if (this.UseAuthCapture)
            {
                request.setChargeType(CreditCardRequest.SALE);
            }
            else
            {
                request.setChargeType(CreditCardRequest.AUTH);
            }
            request.setChargeTotal((double)authorizeRequest.Amount);
            //TODO set tax and shipping
            //request.setTaxAmount();
            //request.setShippingCharge();
            if (!string.IsNullOrEmpty(payment.CurrencyCode))
            {
                request.setCurrency(payment.CurrencyCode);
            }

            request.setOrderId(order.OrderId.ToString());
            request.setInvoiceNumber(order.OrderNumber.ToString());
            //TODO add description if present
            //if(!string.IsNullOrEmpty(order.Notes)) {
            //    request.setOrderDescription(order.Notes);
            //}

            HttpContext context = HttpContext.Current;

            if (context != null)
            {
                request.setCustomerIpAddress(context.Request.ServerVariables["REMOTE_HOST"]);
            }

            return(request);
        }
Ejemplo n.º 11
0
        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.");
            }
        }
Ejemplo n.º 12
0
        public override Transaction DoAuthorize(AuthorizeTransactionRequest 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");
            }

            CreditCardRequest request = InitializeAuthRequest(authorizeRequest);

            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);
                }

                if (this.UseAuthCapture)
                {
                    return(ProcessResponse(payment, response, TransactionType.AuthorizeCapture, authorizeRequest.Amount));
                }
                else
                {
                    return(ProcessResponse(payment, response, TransactionType.Authorize, authorizeRequest.Amount));
                }
            }
            else
            {
                throw new Exception("Operation Failed, Response is null.");
            }
        }
Ejemplo n.º 13
0
        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;

            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);
            }

            Dictionary <string, string> sensitiveData = new Dictionary <string, string>();
            string requestData = InitializeAuthRecurringRequest(authorizeRequest, sensitiveData);

            //RECORD REQUEST
            if (this.UseDebugMode)
            {
                this.RecordCommunication(this.Name, CommunicationDirection.Send, requestData, sensitiveData);
            }

            string responseData = SendRequestToGateway(requestData);

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

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

                return(response);
            }
            else
            {
                throw new Exception("Operation Failed, Response is null.");
            }
        }