예제 #1
0
 public MundiPaggClient()
 {
     //   var key = new Guid("5e62ba71-73d4-4ca0-8c03-26d1f78d6c71");
     //     const string link = "https://sandbox.mundipaggone.com";
     // Creates the client that will send the transaction.
     _serviceClient = new GatewayServiceClient();
 }
예제 #2
0
        internal static CreditCardData GetCreditCardByToken(CustomerPaymentTokenizer tokenizer)
        {
            try
            {
                Log.Info($"Create Search for instant buy key {tokenizer.Token}");

                var serviceClient = new GatewayServiceClient(merchantKey, hostUri);

                Guid instantBuyKey = Guid.Parse(tokenizer.Token);

                Log.Info($"Make request for instant buy key {tokenizer.Token}");
                var httpResponse = serviceClient.CreditCard.GetInstantBuyData(instantBuyKey);

                if (httpResponse.HttpStatusCode == HttpStatusCode.OK &&
                    httpResponse.Response.CreditCardDataCollection.Any() == true)
                {
                    return(httpResponse.Response.CreditCardDataCollection.FirstOrDefault());
                }

                return(default(CreditCardData));
            }
            catch (System.Exception ex)
            {
                Log.Error($"Request Error for instant buy key {tokenizer.Token}", ex);
                throw ex;
            }
            finally
            {
                Log.Info($"End Request for instant buy key {tokenizer.Token}");
            }
        }
 public static void Initialize(TestContext context)
 {
     serviceClient = new GatewayServiceClient(
         merchantKey,
         new Uri(hostUri)
         );
 }
예제 #4
0
        /// <summary>
        /// Obtém os dados de uma transação já existente.
        /// </summary>
        public void GetTransaction()
        {
            try
            {
                Guid merchantKey = Guid.Parse("F2A1F485-CFD4-49F5-8862-0EBC438AE923");
                Guid orderKey    = Guid.Parse("219d7581-78e2-4aa9-b708-b7c585780bfc");

                // Cria o cliente para consultar o pedido no gateway.
                IGatewayServiceClient client = new GatewayServiceClient(merchantKey, _endpoint);

                // Consulta o pedido.
                var httpResponse = client.Sale.QueryOrder(orderKey);

                if (httpResponse.HttpStatusCode == HttpStatusCode.OK)
                {
                    foreach (var sale in httpResponse.Response.SaleDataCollection)
                    {
                        Console.WriteLine("Número do pedido: {0}", sale.OrderData.OrderReference);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #5
0
        public string CartaoDeCredito(Pedido pedido)
        {
            string retorno = string.Empty;

            try
            {
                // Cria a transação.
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents = 10000,
                    CreditCard    = new CreditCard()
                    {
                        //CreditCardBrand = CreditCardBrandEnum.Visa,
                        CreditCardBrand  = ((CreditCardBrandEnum)(pedido.Cliente.CartaoDeCredito.Bandeira)),
                        CreditCardNumber = pedido.Cliente.CartaoDeCredito.Numero,
                        ExpMonth         = int.Parse(pedido.Cliente.CartaoDeCredito.Validade.Split('/')[0]),
                        ExpYear          = int.Parse(pedido.Cliente.CartaoDeCredito.Validade.Split('/')[1]),
                        HolderName       = pedido.Cliente.CartaoDeCredito.Nome,
                        SecurityCode     = pedido.Cliente.CartaoDeCredito.CodigoSeguranca
                    },
                    InstallmentCount = 1
                };

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

                // Coloque a sua MerchantKey aqui.
                Guid merchantKey = pedido.TokenLoja;

                // Cria o client que enviará a transação.
                var serviceClient = new GatewayServiceClient(merchantKey, new Uri("https://transaction.stone.com.br"));

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

                Console.WriteLine("Código retorno: {0}", httpResponse.HttpStatusCode);
                Console.WriteLine("Chave do pedido: {0}", httpResponse.Response.OrderResult.OrderKey);
                if (httpResponse.Response.CreditCardTransactionResultCollection != null)
                {
                    //retorno = httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCardTransactionStatus.ToString();
                    retorno = CreditCardTransactionStatusEnum.AuthorizedPendingCapture.ToString();
                }
            }
            catch (Exception ex)
            {
                retorno = CreditCardTransactionStatusEnum.WithError.ToString();
            }

            return(retorno);
        }
예제 #6
0
        public async Task <IActionResult> Pay()
        {
            StringBuilder console = new StringBuilder();

            // Cria a transação.
            var transaction = new CreditCardTransaction()
            {
                AmountInCents = 10000,
                CreditCard    = new CreditCard()
                {
                    CreditCardBrand  = CreditCardBrandEnum.Visa,
                    CreditCardNumber = "4111111111111111",
                    ExpMonth         = 10,
                    ExpYear          = 22,
                    HolderName       = "LUKE SKYWALKER",
                    SecurityCode     = "123"
                },
                InstallmentCount = 1
            };

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

            // Coloque a sua MerchantKey aqui.
            Guid merchantKey = Guid.Parse("0d96500c-fe5e-4454-bd3a-d2a6b83e81a3");

            // Cria o client que enviará a transação.


            var serviceClient = new GatewayServiceClient(merchantKey, new Uri("https://sandbox.mundipaggone.com"));

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

            console.AppendLine(string.Format("Código retorno: {0}", httpResponse.HttpStatusCode));
            console.AppendLine(string.Format("Chave do pedido: {0}", httpResponse.Response.OrderResult.OrderKey));

            if (httpResponse.Response.CreditCardTransactionResultCollection != null)
            {
                console.AppendLine(string.Format("Status transação: {0}", httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCardTransactionStatus));
            }

            ViewBag.Result = console.ToString();

            return(View());
        }
예제 #7
0
        private DataContracts.LocalDb.Transaction StonePayment(PaymentRequest pPaymentRequest, Acquirer pAcquirer)
        {
            //Create transaction.
            var transaction = new CreditCardTransaction()
            {
                AmountInCents = 10000,
                CreditCard    = new CreditCard()
                {
                    CreditCardBrand  = CreditCardBrandEnum.Mastercard,
                    CreditCardNumber = pPaymentRequest.CreditCardNumber,
                    ExpMonth         = Convert.ToInt32(pPaymentRequest.ExpMonth),
                    ExpYear          = Convert.ToInt32(pPaymentRequest.ExpYear),
                    HolderName       = pPaymentRequest.HolderName,
                    SecurityCode     = pPaymentRequest.SecurityCode
                },
                InstallmentCount = 1,
                Options          = new CreditCardTransactionOptions {
                    PaymentMethodCode = 1
                }
            };

            //Create request.
            var createSaleRequest = new CreateSaleRequest()
            {
                // Adiciona a transação na requisição.
                CreditCardTransactionCollection = new Collection <CreditCardTransaction>(new CreditCardTransaction[] { transaction }),
                Order = new StonePaymentGateway.DataContracts.Order()
                {
                    OrderReference = "Simulador"
                }
            };

            Guid merchantKey   = Guid.Parse(pAcquirer.MerchanteKey);
            var  serviceClient = new GatewayServiceClient(merchantKey, new Uri("https://transaction.stone.com.br"));
            var  httpResponse  = serviceClient.Sale.Create(createSaleRequest);
            var  result        = httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault();
            var  transactionDb = new DataContracts.LocalDb.Transaction();

            transactionDb.Authorization     = result.AuthorizationCode;
            transactionDb.AuthAmountInCents = result.AuthorizedAmountInCents.ToString();
            transactionDb.CardExpiration    = pPaymentRequest.ExpYear + pPaymentRequest.ExpMonth;
            transactionDb.CardNumber        = pPaymentRequest.CreditCardNumber;
            transactionDb.Date             = (DateTime)result.CapturedDate;
            transactionDb.MerchanteKey     = pAcquirer.MerchanteKey;
            transactionDb.Message          = result.AcquirerMessage;
            transactionDb.CardName         = pPaymentRequest.HolderName;
            transactionDb.CardSecurityCode = pPaymentRequest.SecurityCode;

            return(transactionDb);
        }
예제 #8
0
 /// <summary>Snippet for PostResource</summary>
 public void PostResourceRequestObject()
 {
     // Snippet: PostResource(HttpBody, CallSettings)
     // Create client
     GatewayServiceClient gatewayServiceClient = GatewayServiceClient.Create();
     // Initialize request argument(s)
     HttpBody request = new HttpBody
     {
         ContentType = "",
         Data        = ByteString.Empty,
         Extensions  = { new Any(), },
     };
     // Make the request
     HttpBody response = gatewayServiceClient.PostResource(request);
     // End snippet
 }
예제 #9
0
        /// <summary>Snippet for PostResourceAsync</summary>
        public async Task PostResourceRequestObjectAsync()
        {
            // Snippet: PostResourceAsync(HttpBody, CallSettings)
            // Additional: PostResourceAsync(HttpBody, CancellationToken)
            // Create client
            GatewayServiceClient gatewayServiceClient = await GatewayServiceClient.CreateAsync();

            // Initialize request argument(s)
            HttpBody request = new HttpBody
            {
                ContentType = "",
                Data        = ByteString.Empty,
                Extensions  = { new Any(), },
            };
            // Make the request
            HttpBody response = await gatewayServiceClient.PostResourceAsync(request);

            // End snippet
        }
예제 #10
0
        /// <summary>
        /// Cria e envia uma transação de cartão de crédito.
        /// </summary>
        /// <param name="transactionModel">Transação no modelo genérico de entrada no sistema.</param>
        public HttpResponse <CreateSaleResponse> CreateCreditCardTransaction(TransactionModel transactionModel)
        {
            try
            {
                // Cria a transação.
                var transaction = TransformTransactionClassToStone(transactionModel);

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

                // Coloque a sua MerchantKey aqui.
                Guid merchantKey = Guid.Parse("f2a1f485-cfd4-49f5-8862-0ebc438ae923");

                // Cria o client que enviará a transação.
                var serviceClient = new GatewayServiceClient(merchantKey, _endpoint);

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

                //Console.WriteLine("Código retorno: {0}", httpResponse.HttpStatusCode);
                //Console.WriteLine("Chave do pedido: {0}", httpResponse.Response.OrderResult.OrderKey);
                if (httpResponse.Response.CreditCardTransactionResultCollection != null)
                {
                    Console.WriteLine("Status transação: {0}", httpResponse.Response.CreditCardTransactionResultCollection.FirstOrDefault().CreditCardTransactionStatus);
                }

                return(httpResponse);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #11
0
        static void Main(string[] args)
        {
            Guid merchantKey = Guid.Parse(ConfigurationManager.AppSettings["merchantKey"]);
            var  client      = new GatewayServiceClient(merchantKey, new Uri("https://transaction.stone.com.br"));

            #region help with brands

            /*
             | Bandeira   | Comeca com                                  | Máximo de número | Máximo de número cvc |
             | ---------- | ------------------------------------------- | ---------------- | -------------------- |
             | Visa       | 4                                           | 13,16            | 3                    |
             | Mastercard | 5                                           | 16               | 3                    |
             | Diners     | 301,305,36,38                               | 14,16            | 3                    |
             | Elo        | 636368,438935,504175,451416,509048,509067,  |                  | 3(?)
             |            | 509049,509069,509050,509074,509068,509040,
             |            | 509045,509051,509046,509066,509047,509042,
             |            | 509052,509043,509064,509040                 |                  |
             |            | 36297, 5067,4576,4011                       | 16               | 3
             | Amex       | 34,37                                       | 15               | 4                    |
             | Discover   | 6011,622,64,65                              | 16               | 4                    |
             | Aura       | 50                                          | 16               | 3                    |
             | jcb        | 35                                          | 16               | 3                    |
             | Hipercard  | 38,60                                       | 13,16,19         | 3                    |
             */
            #endregion

            var begin = 7;
            Console.SetCursorPosition(1, 1);
            Console.WriteLine("choice a option:");
            Console.SetCursorPosition(1, 2);
            Console.WriteLine("1 - to create a InstanBuyKey");
            Console.SetCursorPosition(1, 3);
            Console.WriteLine("2 - to find a credit card");
            Console.SetCursorPosition(1, 4);
            Console.WriteLine("3 - to create a transaction fake");
            Console.SetCursorPosition(1, 5);
            Console.WriteLine("4 - to cancel a transaction");
            Console.SetCursorPosition(1, begin);
            var readKey            = Console.Read();
            var serializerSettings = new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver(),
                Formatting       = Formatting.Indented
            };
            switch (readKey)
            {
            case 49:     //key 1
                var createInstantBuyDataRequest = new CreateInstantBuyDataRequest()
                {
                    CreditCardBrand        = CreditCardBrandEnum.Mastercard,
                    CreditCardNumber       = "1111222233334444",
                    ExpMonth               = 01,
                    ExpYear                = 20,
                    HolderName             = "John White".ToUpper(),
                    IsOneDollarAuthEnabled = false,
                    SecurityCode           = "123"
                };
                var createCreditCardResponse = client.CreditCard.CreateCreditCard(createInstantBuyDataRequest);
                if (createCreditCardResponse.HttpStatusCode == HttpStatusCode.Created && createCreditCardResponse.Response.Success == true)
                {
                    Console.SetCursorPosition(1, begin);
                    Console.Write(new string(' ', Console.WindowWidth));
                    Console.SetCursorPosition(1, begin);
                    Console.WriteLine("InstantBuy Key: {0}", createCreditCardResponse.Response.InstantBuyKey);
                }
                break;

            case 50:     //key 2
                var instantBuyKey         = Guid.Parse(ConfigurationManager.AppSettings["instantBuyKey"]);
                var getCreditCardResponse = client.CreditCard.GetCreditCard(instantBuyKey);
                var result = getCreditCardResponse.RawResponse;

                var obj  = JsonConvert.DeserializeObject(result);
                var json = JsonConvert.SerializeObject(obj, serializerSettings);
                //
                Console.SetCursorPosition(1, begin);
                Console.Write(new string(' ', Console.WindowWidth));
                Console.SetCursorPosition(1, begin);
                Console.WriteLine(json);
                break;

            case 51:     //key 3
                var value       = 86.21100000000001;
                var transaction = new CreditCardTransaction()
                {
                    AmountInCents    = (long)(value * 100),
                    InstallmentCount = 1,
                    //this param is simulation payment
                    Options = new CreditCardTransactionOptions {
                        PaymentMethodCode = 1
                    },
                    CreditCardOperation = CreditCardOperationEnum.AuthAndCapture,
                    CreditCard          = new CreditCard()
                    {
                        InstantBuyKey = Guid.Parse(ConfigurationManager.AppSettings["instantBuyKey"])
                    }
                };
                var createSaleRequest = new CreateSaleRequest()
                {
                    CreditCardTransactionCollection = new Collection <CreditCardTransaction>(new CreditCardTransaction[] { transaction }),
                    Order = new Order {
                        OrderReference = Guid.NewGuid().ToString()
                    }
                };
                var serviceClient = new GatewayServiceClient();
                var httpResponse  = serviceClient.Sale.Create(createSaleRequest);
                var jsonResponse  = JsonConvert.SerializeObject(httpResponse, serializerSettings);
                //
                Console.SetCursorPosition(1, begin);
                Console.Write(new string(' ', Console.WindowWidth));
                Console.SetCursorPosition(1, begin);
                Console.WriteLine(jsonResponse);
                break;

            case 52:     //key 4
                var orderKey           = Guid.Parse("094c775d-ea43-429f-97b9-4474c3fdqwe");
                var saleManageResponse = client.Sale.Manage(ManageOperationEnum.Cancel, orderKey);

                if (saleManageResponse.HttpStatusCode == HttpStatusCode.OK &&
                    saleManageResponse.Response.CreditCardTransactionResultCollection.Any() &&
                    saleManageResponse.Response.CreditCardTransactionResultCollection.All(p => p.Success == true))
                {
                    var respManage     = client.Sale.Manage(ManageOperationEnum.Cancel, orderKey).RawResponse;
                    var objRespManage  = JsonConvert.DeserializeObject(respManage);
                    var jsonRespManage = JsonConvert.SerializeObject(objRespManage, serializerSettings);
                    Console.SetCursorPosition(1, begin);
                    Console.Write(new string(' ', Console.WindowWidth));
                    Console.SetCursorPosition(1, begin);
                    Console.WriteLine(jsonRespManage);
                }
                break;

            default:
                Console.WriteLine("Not found key!");
                break;
            }
            //
            Console.ReadKey();
        }
 public AbstractMundipaggConsumer() : base()
 {
     this.serviceClient = new GatewayServiceClient(MERCHANT_KEY, new Uri(HOST_URI));
 }
예제 #13
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}");
            }
        }
예제 #14
0
        public CheckoutResult VerifyPartner(Partner partner)
        {
            var result               = new CheckoutResult();
            var checkoutMapper       = new CheckoutMapper();
            var configurationUtility = new ConfigurationUtility();

            // MerchantKey
            Guid merchantKey = configurationUtility.MundiPaggMerchantKey;

            if (merchantKey == null)
            {
                result.Message = Resources.Resources.InvalidMerchantKey;
                result.Valid   = false;

                return(result);
            }

            // Cria o client que enviará a transação.
            var serviceClient = new GatewayServiceClient(merchantKey, configurationUtility.MundiPaggApiUrl);

            try
            {
                // Autoriza a transação e recebe a resposta do gateway.
                var httpResponse = serviceClient.Sale.Create(checkoutMapper.MapSaleRequest(partner));

                if (httpResponse.Response.CreditCardTransactionResultCollection != null)
                {
                    if (httpResponse.Response.CreditCardTransactionResultCollection[0].Success)
                    {
                        result.Valid = true;
                        return(result);
                    }
                    else
                    {
                        result.Message = @Resources.Resources.InvalidTransaction;
                        result.Valid   = false;
                        return(result);
                    }
                }
                else
                {
                    for (var i = 0; i < httpResponse.Response.ErrorReport.ErrorItemCollection.Count; i++)
                    {
                        result.Message += httpResponse.Response.ErrorReport.ErrorItemCollection[i].Description + ' ';
                    }

                    result.Valid = false;
                    return(result);
                }
            }
            catch (Exception ex)
            {
                #region Exception Log

                //var customData = new Dictionary<string, object>();

                //customData.Add("MerchantKey", merchantKey);
                //customData.Add("Exception", ex);

                //RollbarDotNet.Rollbar.Report("VerifyPartner Exception!", RollbarDotNet.ErrorLevel.Critical, customData);

                #endregion

                result.Message = @Resources.Resources.ExceptionError;
                result.Valid   = false;
            }

            return(result);
        }
예제 #15
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();
        }
예제 #16
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}");
            }
        }
예제 #17
0
        public PaymentResult PayWithCreditCard(BillingWithCreditCardBase billingData)
        {
            Contract.Requires(billingData != null);
            Contract.Ensures(Contract.Result <PaymentResult>() != null);
            ValidatorHelper.ThrowesIfHasDataAnnotationError(nameof(billingData), billingData);

            Log.Information("Iniciada cobrança no Cartao de Credito");

            var mundpaggCreditCardTransaction = Mapper.Map <CreditCardTransaction>(billingData);

            mundpaggCreditCardTransaction.CreditCard.BillingAddress = Mapper.Map <BillingAddress>((billingData as BillingWithNewCreditCard)?.BillingAddress);

            var requestData = new CreateSaleRequest()
            {
                CreditCardTransactionCollection = new Collection <CreditCardTransaction>(new[] { mundpaggCreditCardTransaction }),
                Order = new Order()
                {
                    OrderReference = billingData.Id.ToString()
                }
            };

            Log.Debug("Dados Cartao de Credito. {dadosDaCobranca}", billingData);

            try
            {
                Log.Debug("Criando Client do Gateway de Pagamentos");
                var client = new GatewayServiceClient();

                Log.Debug("Enviando dados de Cobrança para o Gateway");
                var response = client.Sale.Create(requestData);
                Log.Debug("Enviando dados de Cobrança para o Gateway - Finaliazado");

                var orderGenerated = response.HttpStatusCode == HttpStatusCode.Created;
                var succeful       = orderGenerated && (response.Response?.CreditCardTransactionResultCollection.All(t => t.Success) ?? false);
                var orderId        = response.Response?.OrderResult?.OrderKey.ToString();
                var message        = GetMessage(errorWasValidation: orderGenerated == false, gatewayResponse: response.Response); //TODO
                var rawData        = response.RawResponse;
                var savedCc        = response.Response?.CreditCardTransactionResultCollection?.SingleOrDefault()?.CreditCard;


                var savedCreditCard = savedCc == null ? null : new SavedCreditCard(savedCc.InstantBuyKey.ToString(), Mapper.Map <CreditCardBrand>(savedCc.CreditCardBrand), savedCc.MaskedCreditCardNumber);
                var result          = new PaymentResult(succeful, orderId, message, rawData, savedCreditCard);

                Log.Debug("Resultado da Cobranca, {ResultadoDoPagamento}", result);

                if (result.PaymentBilledSuccessful)
                {
                    Log.Information("Cobrança no Cartao de Credito realizada com Sucesso.");
                }
                else
                {
                    Log.Error("Erro durante a cobrança de cartão de credito. Cobrança não realizada. {mensagem}", message);
                }

                return(result);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Erro GRAVE INTERNO durante a cobrança de cartão de credito. Cobrança não realizada. {Exception}", ex);
                return(new PaymentResult(false, null, "ERRO Interno do Sistema", ex.Message, null));
            }
        }