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