private static void Main(string[] args) { bool isSandbox = false; EnvironmentConfiguration.ChangeEnvironment(isSandbox); try { AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox); // TODO: Substitute the code below with a notification code for your transaction. // You receive this notification code through a post on the URL that you specify in // this page: https://pagseguro.uol.com.br/integracao/notificacao-de-transacoes.jhtml // Use notificationType to check if is PreApproval (preApproval or transaction) Transaction transaction = NotificationService.CheckTransaction(credentials, "766B9C-AD4B044B04DA-77742F5FA653-E1AB24"); Console.WriteLine(transaction); Console.ReadKey(); } catch (PagSeguroServiceException exception) { Console.WriteLine(exception.Message + "\n"); foreach (ServiceError element in exception.Errors) { Console.WriteLine(element + "\n"); } Console.ReadKey(); } }
// GET: RetornoPagamento/Edit/5 public ActionResult Retorno(string notificationType, string notificationCode) { AccountCredentials credentials = PagSeguroConfiguration.Credentials(true); if (notificationType == "transaction") { // obtendo o objeto transaction a partir do código de notificação Transaction transaction = NotificationService.CheckTransaction( credentials, notificationCode ); int status = transaction.TransactionStatus; if (status == 3) // paga { string referencia = transaction.Reference; DateTime data = transaction.LastEventDate; int id = Int32.Parse(referencia.Substring(3)); Matricula mat = db.Matriculas.Find(id); mat.DataPago = data; mat.Situacao = "P"; // pago db.Entry(mat).State = EntityState.Modified; db.SaveChanges(); } } ViewBag.Mensagem = "Processada."; return(View()); }
public IHttpActionResult ReceiveNotification(string notificationType, string notificationCode) { if (notificationType == "transaction") { // obtendo o objeto transaction a partir do código de notificação var transaction = NotificationService.CheckTransaction( _credentials, notificationCode ); var cart = _context.Users .Include(u => u.Carts.Select(c => c.Products.Select(p => p.Product))) .Single(u => u.Id == _userId) .Carts.Single(c => c.Id == Int32.Parse(transaction.Reference)); cart.TransactionCode = transaction.Code; if (transaction.TransactionStatus == TransactionStatus.Refunded || transaction.TransactionStatus == TransactionStatus.Cancelled) { // Return products to stock foreach (var cartProduct in cart.Products) { cartProduct.Product.NumberInStock += cartProduct.Quantity; } } } return(Ok()); }
static void RequestExample(HttpRequest Request) { bool isSandbox = false; EnvironmentConfiguration.ChangeEnvironment(isSandbox); AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox); string notificationType = Request.Form["notificationType"]; string notificationCode = Request.Form["notificationCode"]; if (notificationType == "transaction") { // obtendo o objeto transaction a partir do código de notificação Transaction transaction = NotificationService.CheckTransaction(credentials, notificationCode); var status = transaction.TransactionStatus; } }
public void Notificacao(string code) { EnvironmentConfiguration.ChangeEnvironment(isSandbox); try { AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox); Transaction transaction = NotificationService.CheckTransaction(credentials, code); TratarRetorno(transaction); } catch (PagSeguroServiceException exception) { string retorno = exception.Message + "\n"; foreach (ServiceError element in exception.Errors) { retorno += element + "\n"; } } }
public IActionResult CheckNotification([FromRoute] string code) { if (string.IsNullOrEmpty(code)) { return(BadRequest()); } try { const bool isSandbox = true; EnvironmentConfiguration.ChangeEnvironment(isSandbox); var credentials = PagSeguroConfiguration.Credentials(isSandbox); var notification = NotificationService.CheckTransaction(credentials, code, false); return(Ok(notification)); } catch (PagSeguroServiceException exception) { return(StatusCode(500, exception.Errors)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
public string Retorno(RetornoPagamentoModel retorno) { try { AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox); Transaction transaction = NotificationService.CheckTransaction(credentials, retorno.notificationCode); var reference = long.Parse(new string(transaction.Reference.Where(char.IsDigit).ToArray())); if (transaction.TransactionStatus == Uol.PagSeguro.Enums.TransactionStatus.Paid) { FinanceiroController finC = new FinanceiroController(); finC.RealizarPagamentoPagSeguro(reference); } SalvarRetorno(reference, transaction.Code, (int)transaction.TransactionStatus, transaction.GrossAmount); return(JsonConvert.SerializeObject(transaction)); } catch { throw; } }
public IHttpActionResult ObterNotificacao([FromBody] NotificacaoPagSeguroVO notificacao) { Boolean sandbox = true; String ArquivoConfiguracaoPagSeguro = @"C:\temp\PagSeguroConfig.xml"; if (notificacao == null) { Task.Run(() => { String assunto = "Erro ao ObterNotificacao - "; String mensagem2 = String.Format("Ocorreu um problema ao receber uma notificação (objeto nulo) do pagseguro: Data: {0}", DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss")); container.Resolve <IEmailService>().EnviarEmail(Constantes.EMAIL_DESTINATARIO, Constantes.EMAIL_REMETENTE, "Suporte ", assunto, mensagem2, false); }); return(BadRequest()); } try { var configuracaoRepo = container.Resolve <IConfiguracaoRepository>(); var configuracao = configuracaoRepo.GetById(1); if (configuracao != null) { ArquivoConfiguracaoPagSeguro = configuracao.ArquivoConfiguracaoPagSeguro; sandbox = configuracao.AmbienteProducao == "N"; } // PagSeguroConfiguration.UrlXmlConfiguration = @"C:\temp\PagSeguroConfig.xml"; EnvironmentConfiguration.ChangeEnvironment(sandbox); AccountCredentials credentials = PagSeguroConfiguration.Credentials(sandbox); Transaction transaction = NotificationService.CheckTransaction(credentials, notificacao.notificationCode); if (transaction != null) { if (!String.IsNullOrEmpty(transaction.Reference)) { var pedidoRepo = container.Resolve <IPedidoRepository>(); var pedido = pedidoRepo.GetById(Convert.ToInt32(transaction.Reference)); pedidoRepo.Evict(pedido); try { if (pedido != null) { if (transaction.TransactionStatus == TransactionStatus.Cancelled) { pedido.Status = (Int32)StatusPedido.Cancelado; pedido.Motivo = "Cancelado pelo PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para cancelado.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } else if (transaction.TransactionStatus == TransactionStatus.InAnalysis) { pedido.Status = (Int32)StatusPedido.Pendente; pedido.Motivo = "Em análise pelo PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para em análise.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } else if (transaction.TransactionStatus == TransactionStatus.Initiated) { pedido.Status = (Int32)StatusPedido.Pendente; pedido.Motivo = "Iniciado pelo PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para iniciado.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } else if (transaction.TransactionStatus == TransactionStatus.WaitingPayment) { pedido.Status = (Int32)StatusPedido.Pendente; pedido.Motivo = "Aguardando pagamento pelo PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para aguardando pagamento.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } else if (transaction.TransactionStatus == TransactionStatus.Available) { pedido.Status = (Int32)StatusPedido.Pago; pedido.Motivo = "Saldo disponível no PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para disponível.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } else if (transaction.TransactionStatus == TransactionStatus.Paid) { if (pedido.Status == (Int32)StatusPedido.Pago || pedido.Status == (Int32)StatusPedido.Fechado || pedido.Status == (Int32)StatusPedido.Cancelado) { var atividadeAtual1 = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.AtividadeIncomumPagSeguro), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro aparentemente tentou mudar o status do pedido {0} que está pago/fechado/cancelado ", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual1); return(Ok()); } pedido.Status = (Int32)StatusPedido.Pago; pedido.Motivo = "Pagamento confirmado pelo PagSeguro"; pedido.CodigoAutorizacao = transaction.Code; pedido.DataAlteracaoStatus = DateTime.Now; pedidoRepo.Save(pedido); if (pedido.Servico.GeraMeses == "S") { //verifica se o usuário tem alguma assinatura vigente var assinaturaRepo = container.Resolve <IAssinaturaRepository>(); var assinatura = assinaturaRepo.ObterAssinaturaMaisRecentePeloEmailDoUsuario(pedido.Usuario.Email); DateTime novaData = (assinatura != null && assinatura.DataFim > DateTime.Now) ? assinatura.DataFim : DateTime.Now; var novaAssinatura = new Assinatura(); novaAssinatura.Pedido = pedido; novaAssinatura.DataCadastro = DateTime.Now; novaAssinatura.DataInicio = novaData; Int32 Quantidade = Convert.ToInt32(pedido.Servico.QuantidadeMeses); novaAssinatura.DataFim = novaData.AddMonths(Quantidade); novaAssinatura.Usuario = pedido.Usuario; container.Resolve <AssinaturaCRUDService>().Salvar(novaAssinatura); Task.Run(() => { String assunto = " - Pagamento de pedido confirmado"; String mensagem2 = String.Format("Olá {0} <br><br> O pagamento do seu pedido {1} foi confirmado pelo pagseguro.<br><br>A vigência da sua nova assinatura do serviço de consulta é de {2} até {3}. <br><br> Atenciosamente, Equipe Subcode23", pedido.Usuario.Nome, pedido.Id, novaAssinatura.DataInicio.ToString("dd/MM/yyyy - HH:mm:ss"), novaAssinatura.DataFim.ToString("dd/MM/yyyy - HH:mm:ss")); container.Resolve <IEmailService>().EnviarEmail(Constantes.EMAIL_DESTINATARIO, Constantes.EMAIL_REMETENTE, "Suporte ", assunto, mensagem2, true); }); } else if (pedido.Servico.GeraCredito == "S") { var creditoRepo = container.Resolve <ICreditoRepository>(); var novoCredito = new Credito(); novoCredito.Pedido = pedido; novoCredito.DataCadastro = DateTime.Now; novoCredito.DataCadastro = DateTime.Now; Int32 Quantidade = Convert.ToInt32(pedido.Servico.QuantidadeCredito); novoCredito.Usuario = pedido.Usuario; creditoRepo.Save(novoCredito); } var atividadeAtual = new Atividade() { Usuario = pedido.Usuario, Data = DateTime.Now, TipoAtividade = Convert.ToInt32(TipoAtividade.MudancaStatusPedido), Origem = Convert.ToInt32(OrigemAcesso.Web), Descricao = String.Format("O pagseguro mudou o status do pedido {0} para pago.", pedido.Id) }; container.Resolve <AtividadeCRUDService>().Salvar(atividadeAtual); } } } catch (Exception ex) { Task.Run(() => { String assunto = "Erro no método ObterNotificacao - "; String mensagem2 = String.Format("Ocorreu um erro - Exceção: {0} - Exceção interna: {1} - Data: {2}", ex.Message, (ex.InnerException != null && ex.InnerException.Message != null) ? ex.InnerException.Message : "Exceção interna não definida", DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss")); container.Resolve <IEmailService>().EnviarEmail(Constantes.EMAIL_DESTINATARIO, Constantes.EMAIL_REMETENTE, "Suporte ", assunto, mensagem2, false); //SalvarErroSistemaHelper.SalvarErro(ex); }); return(BadRequest()); } } else { return(Ok()); } return(Ok()); } } catch (PagSeguroServiceException ex) { String mensagem = String.Empty; Task.Run(() => { String assunto = "Erro de PagSeguroServiceException no método ObterNotificacao - Subcode 23"; if (ex.Errors.Count > 0) { mensagem = ex.Errors[0].Code + " - " + ex.Errors[0].Message; } String mensagem2 = String.Format("Ocorreu um erro - Erro do pagseguro {0} - Data: {1}", mensagem, DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss")); container.Resolve <IEmailService>().EnviarEmail(Constantes.EMAIL_DESTINATARIO, Constantes.EMAIL_REMETENTE, "Suporte ", assunto, mensagem2, false); }); return(BadRequest()); } return(Ok()); }
public string notificacoespag(string notificationCode, string notificationType) { //webservice recebe coigo de notificação (notificationCode) via post string msg = "JESUS IS THE LORD"; bool isSandbox = true; EnvironmentConfiguration.ChangeEnvironment(isSandbox); try { //faz uma requisição a API Pagseguro sobre o status desta notificação AccountCredentials credentials = PagSeguroConfiguration.Credentials(isSandbox); Transaction transaction = NotificationService.CheckTransaction(credentials, notificationCode); string codeTransation = transaction.Code.ToString(); string dataTrasation = transaction.Date.ToString(); string statusTransation = transaction.TransactionStatus.ToString(); string referTransation = transaction.Reference.ToString(); string statusTXT = ""; switch (statusTransation) { case "1": statusTXT = "Aguardando pagamento"; break; case "2": statusTXT = "Em análise"; break; case "3": statusTXT = "Pago"; break; case "4": statusTXT = "Disponível"; break; case "5": statusTXT = "Em Disputa"; break; case "6": statusTXT = "Devolvida"; break; case "7": statusTXT = "Cancelada"; break; case "8": statusTXT = "Debitado"; break; case "9": statusTXT = "Retenção Temporária"; break; default: statusTXT = "Outros"; break; } //atualiza status da entrega OperacaoBanco operacao = new OperacaoBanco(); bool alterar = operacao.Update("update Tbl_Entregas_Master set " + "Status_Pagam = '" + statusTXT + "' " + "where PSCodTransacao = '" + codeTransation + "'"); ConexaoBancoSQL.fecharConexao(); if (alterar != true) { msg = "NAO FOI POSSIVEL ATUALIZAR "; } } catch (PagSeguroServiceException exception) { msg = "erro:" + exception.Message; } return(msg); }
public void Receber(string notificationCode, string notificationType, int ranking = 0) { var log = new Log(); log.descricao = "Chegou:" + DateTime.Now + ":" + notificationCode; db.Log.Add(log); db.SaveChanges(); var barragem = db.BarragemView.Find(ranking); AccountCredentials credentials = new AccountCredentials(barragem.emailPagSeguro, barragem.tokenPagSeguro); if (notificationType == "transaction") { // obtendo o objeto transaction a partir do código de notificação Transaction transaction = NotificationService.CheckTransaction(credentials, notificationCode); // Data da criação DateTime date = transaction.Date; // Data da última atualização DateTime lastEventDate = transaction.LastEventDate; // Código da transação string code = transaction.Code; // Refência string reference = transaction.Reference; // Valor bruto decimal grossAmount = transaction.GrossAmount; // Tipo int type = transaction.TransactionType; // Status /* Código Significado * 1 Aguardando pagamento: o comprador iniciou a transação, mas até o momento o PagSeguro não recebeu nenhuma informação sobre o pagamento. * 2 Em análise: o comprador optou por pagar com um cartão de crédito e o PagSeguro está analisando o risco da transação. * 3 Paga: a transação foi paga pelo comprador e o PagSeguro já recebeu uma confirmação da instituição financeira responsável pelo processamento. * 4 Disponível: a transação foi paga e chegou ao final de seu prazo de liberação sem ter sido retornada e sem que haja nenhuma disputa aberta. * 5 Em disputa: o comprador, dentro do prazo de liberação da transação, abriu uma disputa. * 6 Devolvida: o valor da transação foi devolvido para o comprador. * 7 Cancelada: a transação foi cancelada sem ter sido finalizada. * 8 Debitado: o valor da transação foi devolvido para o comprador. * 9 Retenção temporária: o comprador contestou o pagamento junto à operadora do cartão de crédito ou abriu uma demanda judicial ou administrativa (Procon). */ int status = transaction.TransactionStatus; // Valor líquido decimal netAmount = transaction.NetAmount; // Valor das taxas cobradas decimal feeAmount = transaction.FeeAmount; // Valor extra ou desconto decimal extraAmount = transaction.ExtraAmount; // Tipo de meio de pagamento PaymentMethod paymentMethod = transaction.PaymentMethod; string[] refs = reference.Split('-'); if (refs[0].Equals("T")) { // se for torneio int idInscricao = Convert.ToInt32(refs[1]); var inscricao = db.InscricaoTorneio.Find(idInscricao); if (status == 3) { inscricao.isAtivo = true; } inscricao.statusPagamento = status + ""; inscricao.formaPagamento = paymentMethod.PaymentMethodType + ""; inscricao.valor = (float)transaction.GrossAmount; db.Entry(inscricao).State = EntityState.Modified; db.SaveChanges(); var log2 = new Log(); log2.descricao = ranking + " movimentacao ok " + status + ":" + DateTime.Now + ":" + notificationCode; db.Log.Add(log2); db.SaveChanges(); // ativar segunda inscrição caso exista var listInscricao = db.InscricaoTorneio.Where(t => t.torneioId == inscricao.torneioId && t.userId == inscricao.userId && t.Id != inscricao.Id).ToList(); if (listInscricao.Count() > 0) { var inscricao2 = listInscricao[0]; if (status == 3) { inscricao2.isAtivo = true; } inscricao2.statusPagamento = status + ""; inscricao2.formaPagamento = paymentMethod.PaymentMethodType + ""; inscricao2.valor = (float)transaction.GrossAmount; db.Entry(inscricao2).State = EntityState.Modified; db.SaveChanges(); } } } }
public ActionResult Notificacao() { ViewBag.Tema = Settings.Default.Tema; try { //Stopwatch tempo = new Stopwatch(); //tempo.Start(); AccountCredentials credentials = new AccountCredentials( Settings.Default.EmailCredential, Settings.Default.TokenCredential ); string notificationType = Request.Form["notificationType"]; string notificationCode = Request.Form["notificationCode"];//Recupera o código da transação que foi aberta pelo pagseguro if (notificationType == "transaction") { // obtendo o objeto transaction a partir do código de notificação Transaction transaction = NotificationService.CheckTransaction(credentials, notificationCode); IList <Item> lstItem = transaction.Items;//Lista com os itens que foram comprados if (transaction != null) { if (Settings.Default.ReservaPedidoBotaoComprar) { updatePedido.gerarPedido(transaction, lstItem); } else { pedido.gerarPedido(transaction, lstItem); } } //tempo.Stop(); //GravarLog.gravarLogError("Tempo de inserção: " + tempo.Elapsed, "Tempo de Inserção"); } else { GravarLog.gravarLogError("Tipo de transação: " + notificationType, "Não retornou transaction"); } } catch (PagSeguroServiceException ex) { StackTrace exe = new StackTrace(ex, true); CustomException ep = new CustomException(ex, exe, ""); ep.Save(AppDomain.CurrentDomain.BaseDirectory + "/Logs/Log.log"); if (ex.StatusCode == HttpStatusCode.Unauthorized) { GravarLog.gravarLogError("Unauthorized: lease verify if the credentials used in the web service call re correct./n", "Erro Transaction"); } foreach (PagSeguroServiceError error in ex.Errors) { GravarLog.gravarLogError(error.ToString(), "Erro PagSeguro"); } } return(View()); }