private IEnumerable<CreditCardTransaction> Generate(IOrder order, ICreditCard[] cards)
 {
     if (cards.IsNullOrEmpty()) yield break;
     var countCard = cards.Count();
     foreach (var card in cards)
     {
         var transaction = new CreditCardTransaction
         {
             /*Divide o total da compra pelo número de cartões enviados*/
             AmountInCents = order.AmountInCents / countCard,
             TransactionReference = order.TransactionReference,
             InstallmentCount = card.InstallmentCount
         };
         if (card.InstantBuyKey.HasValue && card.InstantBuyKey.Value != Guid.Empty)
         {
             transaction.CreditCard = new CreditCard()
             {
                 InstantBuyKey = card.InstantBuyKey.Value
             };
             yield return transaction;
             continue;
         }
         transaction.CreditCard = card.Copiar<ICreditCard, CreditCard>();
         Contract.Assert(card.CreditCardBrand.HasValue);
         GatewayApiClient.DataContracts.EnumTypes.CreditCardBrandEnum brand;
         Enum.TryParse(card.CreditCardBrand.GetValueOrDefault().ToString(), true, out brand);
         transaction.CreditCard.CreditCardBrand = brand;
         yield return transaction;
     }
 }
        /// <summary>
        /// Cria uma transação de cartão de crédito
        /// </summary>
        /// <param name="creditCardTransaction">Dados da transação de cartão de crédito</param>
        /// <param name="orderReference">Identificação do pedido na loja</param>
        /// <returns></returns>
        public HttpResponse<CreateSaleResponse> Create(CreditCardTransaction creditCardTransaction, string orderReference) {

            Collection<CreditCardTransaction> creditCardTransactionCollection = new Collection<CreditCardTransaction>();
            creditCardTransactionCollection.Add(creditCardTransaction);

            return this.Create(creditCardTransactionCollection, orderReference);
        }
        /// <summary>
        /// Cria uma transação de cartão de crédito
        /// </summary>
        /// <param name="creditCardTransaction">Dados da transação de cartão de crédito</param>
        /// <returns></returns>
        public HttpResponse<CreateSaleResponse> Create(CreditCardTransaction creditCardTransaction)
        {
            Collection<CreditCardTransaction> creditCardTransactionCollection = new Collection<CreditCardTransaction>();
            creditCardTransactionCollection.Add(creditCardTransaction);

            return this.Create(creditCardTransactionCollection);
        }
Esempio n. 4
0
        internal static bool ProcessPayment(CustomerTicket ticket, Guid instantBuy, string securityCode)
        {
            var amountTransaction = (long)(ticket.Quantity * ticket.Event.Price);

            try
            {
                Log.Info($"Create transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");

                // Cria a transação.
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents = amountTransaction,
                    CreditCard = new CreditCard()
                    {
                        InstantBuyKey = instantBuy,
                        SecurityCode = securityCode
                    },
                };

                // Cria requisição.
                var createSaleRequest = new CreateSaleRequest()
                {
                    // Adiciona a transação na requisição.
                    CreditCardTransactionCollection = new Collection<CreditCardTransaction>(new CreditCardTransaction[] { transaction }),
                };

                Log.Info($"Make request for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");

                var serviceClient = new GatewayServiceClient(merchantKey, hostUri);

                // Autoriza a transação e recebe a resposta do gateway.
                var httpResponse = serviceClient.Sale.Create(createSaleRequest);

                Log.Info($"Request Status for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer} with status {httpResponse.HttpStatusCode}");
                if (httpResponse.Response.CreditCardTransactionResultCollection != null)
                {
                    var transactionStatus = httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCardTransactionStatus;
                    Log.Info($"Transaction Status for ticket {ticket.Id} with status {transactionStatus.ToString()}");

                    if (transactionStatus == CreditCardTransactionStatusEnum.NotAuthorized)
                        ticket.Status = Enum.StatusEnum.NotAuthorized;

                    if (transactionStatus == CreditCardTransactionStatusEnum.Captured)
                        ticket.Status = Enum.StatusEnum.Authorized;
                    
                    return true;
                }

                return false;
            }
            catch (System.Exception ex)
            {
                Log.Error($"Request Error for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}", ex);
                throw ex;
            }
            finally
            {
                Log.Info($"End Request for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");
            }

        }
Esempio n. 5
0
        internal static bool ProcessPayment(CustomerTicket ticket, CustomerPayment payment, out Guid instantBuy)
        {
            var amountTransaction = (long)(ticket.Quantity * ticket.Event.Price);
            var expiration = payment.Expiration.Split('/');
            var expMonth = Convert.ToInt32(expiration.FirstOrDefault());
            var expYear = Convert.ToInt32(expiration.LastOrDefault());

            instantBuy = Guid.Empty;

            try
            {
                Log.Info($"Create transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");

                // Cria a transação.
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents = amountTransaction,
                    CreditCard = new CreditCard()
                    {
                        CreditCardBrand = ConvertCreditCardBrand(payment),
                        CreditCardNumber = payment.CreditCardNumber,
                        ExpMonth = expMonth,
                        ExpYear = expYear,
                        HolderName = payment.HolderName,
                        SecurityCode = payment.SecurityCode
                    },
                };

                // Cria requisição.
                var createSaleRequest = new CreateSaleRequest()
                {
                    // Adiciona a transação na requisição.
                    CreditCardTransactionCollection = new Collection<CreditCardTransaction>(new CreditCardTransaction[] { transaction }),
                };

                Log.Info($"Make request for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");

                var serviceClient = new GatewayServiceClient(merchantKey, hostUri);

                // Autoriza a transação e recebe a resposta do gateway.
                var httpResponse = serviceClient.Sale.Create(createSaleRequest);

                Log.Info($"Request Status for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer} with status {httpResponse.HttpStatusCode}");
                if (httpResponse.Response.CreditCardTransactionResultCollection != null)
                {
                    var transactionStatus = httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCardTransactionStatus;
                    Log.Info($"Transaction Status for ticket {ticket.Id} with status {transactionStatus.ToString()}");

                    if (transactionStatus == CreditCardTransactionStatusEnum.NotAuthorized)
                        ticket.Status = Enum.StatusEnum.NotAuthorized;

                    if (transactionStatus == CreditCardTransactionStatusEnum.Captured)
                        ticket.Status = Enum.StatusEnum.Authorized;

                    if (payment.KeepSave)
                        instantBuy = httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCard.InstantBuyKey;
                    
                    return true;

                }

                return false;
            }
            catch (System.Exception ex)
            {
                Log.Error($"Request Error for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}", ex);
                throw ex;
            }
            finally
            {
                Log.Info($"End Request for transaction for ticket {ticket.Id} and for customer {ticket.IdCustomer}");
            }

        }
        public string SendRequest(Infra.Models.CreditCard c)
        {
            try
            {
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents = 100,
                    CreditCard = new GatewayApiClient.DataContracts.CreditCard()
                    {
                        CreditCardNumber = c.Number,
                        CreditCardBrand = CreditCardBrandEnum.Visa,
                        ExpMonth = c.Expiry.Date.Month,
                        ExpYear = c.Expiry.Date.Year,
                        SecurityCode = c.Cvc,
                        HolderName = c.Name
                    }
                };

                Guid merchantKey = Guid.Parse("2feddd0e-174d-4a1e-889b-e7f6785ccf11");

                string statusCode = String.Empty;
                string errorCode = String.Empty;
                string descriptionError = String.Empty;

                var serviceClient = new GatewayServiceClient(merchantKey);
                var httpResponse = serviceClient.Sale.Create(transaction);

                if (httpResponse.HttpStatusCode.ToString() != "Created")
                {
                    errorCode = httpResponse.Response.ErrorReport.ErrorItemCollection[0].ErrorCode.ToString();
                    descriptionError = httpResponse.Response.ErrorReport.ErrorItemCollection[0].Description.ToString();
                    switch (errorCode)
                    {
                        case "400":
                            TempData["AlertMessage"] = "Algum campo não foi enviado ou foi enviado de maneira incorreta. " + descriptionError;
                            break;
                        case "404":
                            TempData["AlertMessage"] = "Recurso não encontrado. " + descriptionError;
                            break;
                        case "500":
                            TempData["AlertMessage"] = "Erro nos servidores da MundiPagg, tente novamente mais tarde. " + descriptionError;
                            break;
                        case "504":
                            TempData["AlertMessage"] = "Tempo comunicação excedida entre a MundiPagg e a adquirente. " + descriptionError;
                            break;
                        default:
                            break;
                    }

                    return TempData["AlertMessage"].ToString();
                }
                else
                {
                    var httpResponse2 = serviceClient.Sale.QueryOrder(httpResponse.Response.OrderResult.OrderKey);
                    statusCode = httpResponse2.HttpStatusCode.ToString();

                    return statusCode;
                }
            }
            catch (Exception e)
            {
                TempData["AlertMessage"] = "Ocorreu um erro ao cadastrar o Cartão de Crédito. Por favor, tente novamente";
                throw new Exception("Erro: " + e.Message);
            }
        }
        //------Private Methods-----

        //send the transaction to Mundipagg API
        private bool AuthorizeTransaction(Transaction item)
        {

            var cardBrand = CardTypetoEnum(item.CardType);
            //if the card is not supported by Mundipagg Api return
            if (cardBrand == null) return false;           

            // Creates the credit card transaction.
            var transaction = new CreditCardTransaction()
            {
                AmountInCents = (long)double.Parse(item.Value) * 100,
                CreditCard = new CreditCard()
                {
                    CreditCardNumber = item.CardNumber,
                    CreditCardBrand = cardBrand,
                    ExpMonth = item.CardExpMonth,
                    ExpYear = item.CardExpYear,
                    SecurityCode = item.CardCVV,
                    HolderName = item.CardName,
                }
            };

            try
            {
                // Creates the client that will send the transaction.
                var guid = new Guid("85328786-8BA6-420F-9948-5352F5A183EB");
                var uri = new Uri("https://sandbox.mundipaggone.com");
                var serviceClient = new GatewayServiceClient(guid,uri);

                // Authorizes the credit card transaction and returns the gateway response.
                var httpResponse = serviceClient.Sale.Create(transaction);

                // API response code
                Debug.WriteLine("Status: {0}", httpResponse.HttpStatusCode);

                var createSaleResponse = httpResponse.Response;
                if (httpResponse.HttpStatusCode == HttpStatusCode.Created)
                {
                    foreach (var creditCardTransaction in createSaleResponse.CreditCardTransactionResultCollection)
                    {
                        Debug.WriteLine(creditCardTransaction.AcquirerMessage);                        
                    }
                    return true;
                }
                else
                {
                    if (createSaleResponse.ErrorReport != null)
                    {
                        foreach (ErrorItem errorItem in createSaleResponse.ErrorReport.ErrorItemCollection)
                        {
                            Debug.WriteLine("Error {0}: {1}", errorItem.ErrorCode, errorItem.Description);                            
                        }
                    }
                    return false;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return false;         
            }
        }
        /// <summary>
        /// Cria uma transação de cartão de crédito
        /// </summary>
        /// <param name="creditCardTransaction">Dados da transação de cartão de crédito</param>
        /// <returns></returns>
        public HttpResponse<CreateSaleResponse> Create(CreditCardTransaction creditCardTransaction) {

            return this.Create(creditCardTransaction, null);
        }
        private CreditCardTransaction CreateCreditCardTransactionWithToken(UserCreditCard userCreditCardInfo, Guid instantBuyKey)
        {
            var transaction = new CreditCardTransaction()
            {
                AmountInCents = userCreditCardInfo.AmountInCents * 100,
                CreditCard = new CreditCard()
                {
                    InstantBuyKey = instantBuyKey
                },
                InstallmentCount = userCreditCardInfo.InstallmentCount
            };

            return transaction;
        }
        private CreditCardTransaction CreateCreditCardTransaction(UserCreditCard userCreditCardInfo)
        {
            var transaction = new CreditCardTransaction()
            {
                AmountInCents = userCreditCardInfo.AmountInCents  * 100,
                CreditCard = new CreditCard()
                {
                    CreditCardNumber = userCreditCardInfo.CreditCardNumber,
                    CreditCardBrand = userCreditCardInfo.CreditCardBrand,
                    ExpMonth = userCreditCardInfo.ExpMonth,
                    ExpYear = userCreditCardInfo.ExpYear,
                    SecurityCode = userCreditCardInfo.SecurityCode,
                    HolderName = userCreditCardInfo.HolderName
                },
                InstallmentCount = userCreditCardInfo.InstallmentCount
            };

            return transaction;
        }
Esempio n. 11
0
        private void MainTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            MainTimer.Stop();

            // Recupera a última mensagem da fila.
            var queue = new MessageQueue(_queue_name);
            var message = queue.Receive().Body.ToString();

            // Deserializa o conteúdo da mensagem.
            var jsonSerializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
            var dt = JsonConvert.DeserializeObject<ItemSoldViewModel>(message, jsonSerializerSettings);

            // Envia a mensagem para a MundiPagg.
            if (dt != null)
            {
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents = (long)(dt.Value * 100),
                    CreditCard = new CreditCard()
                    {
                        CreditCardNumber = dt.CardNumber1 + dt.CardNumber2 + dt.CardNumber3 + dt.CardNumber4,
                        CreditCardBrand = CreditCardBrandEnum.Visa,
                        ExpMonth = dt.ExpMonth,
                        ExpYear = dt.ExpYear,
                        SecurityCode = dt.SecurityCode,
                        HolderName = dt.HolderName
                    }
                };

                var ok = true;

                try
                {
                    var serviceClient = new GatewayServiceClient();
                    var httpResponse = serviceClient.Sale.Create(transaction);

                    var createSaleResponse = httpResponse.Response;
                    if (httpResponse.HttpStatusCode == HttpStatusCode.Created)
                    {
                        foreach (var creditCardTransaction in createSaleResponse.CreditCardTransactionResultCollection)
                        {
                            //SendEmailOK();
                        }
                    }
                    else
                    {
                        if (createSaleResponse.ErrorReport != null)
                        {
                            foreach (ErrorItem errorItem in createSaleResponse.ErrorReport.ErrorItemCollection)
                            {
                                ok = false;
                            }
                        }
                    }
                }
                catch
                {
                    ok = false;
                }

                if (!ok)
                {
                    //SendEmailError();
                }
            }

            MainTimer.Start();
        }