Secure Return - Solution

Asked

Viewed 1,140 times

6

I use C# Asp.Net MVC, I had to make the return of data Secure Pag and I found very flawed the documentation, follows the solution I created below for those who go through the same difficulties.

1 answer

6


First set the return of data on the pay for your application page, in case this example would be www.site.com.br/Home/Return

Domain of the Request

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ui.Web.Helpers
{
    public class Cliente
    {
        public int IDCliente { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
        public string TelefoneCodigoArea { get; set; }
        public string Telefone { get; set; }
        public string Endereco { get; set; }
        public string EnderecoNumero { get; set; }
        public string Complemento { get; set; }
        public string Bairro { get; set; }
        public string Cidade { get; set; }
        public string UF { get; set; }
        public string Pais { get; set; }
        public string CEP { get; set; }
    }

    public class Pagamento
    {
        public int Tipo { get; set; }
        public int Parcelas { get; set; }
        public string TipoDesc
        {
            get
            {
                if (Tipo == 1)
                    return "Cartão de crédito";
                else if (Tipo == 2)
                    return "Boleto";
                else if (Tipo == 3)
                    return "Débito online (TEF)";
                else if (Tipo == 4)
                    return "Saldo PagSeguro";
                else if (Tipo == 5)
                    return "Oi Paggo";
                else if (Tipo == 7)
                    return "Depósito em conta";
                else
                    return "Origem Desconhecida";
            }
        }
        public int Codigo { get; set; }
        public string CodigoDesc
        {
            get
            {
                if (Codigo == 101)
                    return "Cartão de crédito Visa";
                else if (Codigo == 102)
                    return "Cartão de crédito MasterCard";
                else if (Codigo == 103)
                    return "Cartão de crédito American Express";
                else if (Codigo == 104)
                    return "Cartão de crédito Diners.";
                else if (Codigo == 105)
                    return "Cartão de crédito Hipercard";
                else if (Codigo == 106)
                    return "Cartão de crédito Aura";
                else if (Codigo == 107)
                    return "Cartão de crédito Elo";
                else if (Codigo == 108)
                    return "Cartão de crédito PLENOCard";
                else if (Codigo == 109)
                    return "Cartão de crédito PersonalCard";
                else if (Codigo == 110)
                    return "Cartão de crédito JCB";
                else if (Codigo == 111)
                    return "Cartão de crédito Discover";
                else if (Codigo == 112)
                    return "Cartão de crédito BrasilCard";
                else if (Codigo == 113)
                    return "Cartão de crédito FORTBRASIL";
                else if (Codigo == 114)
                    return "Cartão de crédito CARDBAN";
                else if (Codigo == 115)
                    return "Cartão de crédito VALECARD";
                else if (Codigo == 116)
                    return "Cartão de crédito Cabal";
                else if (Codigo == 117)
                    return "Cartão de crédito Mais";
                else if (Codigo == 118)
                    return "Cartão de crédito Avista";
                else if (Codigo == 119)
                    return "Cartão de crédito GRANDCARD";
                else if (Codigo == 120)
                    return "Cartão de crédito Sorocred";
                else if (Codigo == 201)
                    return "Boleto Bradesco";
                else if (Codigo == 202)
                    return "Boleto Santander";
                else if (Codigo == 301)
                    return "Débito online Bradesco";
                else if (Codigo == 302)
                    return "Débito online Itaú";
                else if (Codigo == 303)
                    return "Débito online Unibanco";
                else if (Codigo == 304)
                    return "Débito online Banco do Brasil";
                else if (Codigo == 305)
                    return "Débito online Banco Real";
                else if (Codigo == 306)
                    return "Débito online Banrisul";
                else if (Codigo == 307)
                    return "Débito online HSBC";
                else if (Codigo == 401)
                    return "Saldo PagSeguro";
                else if (Codigo == 501)
                    return "Oi Paggo";
                else if (Codigo == 701)
                    return "Depósito em conta - Banco do Brasil";
                else if (Codigo == 702)
                    return "Depósito em conta - HSBC";
                else
                    return "Origem Desconhecida";
            }
        }
        public string URL { get; set; }
    }

    public class Item
    {
        public int ID { get; set; }
        public string Descricao { get; set; }
        public int Quantidade { get; set; }
        public decimal Preco { get; set; }
    }

    public class Pedido
    {
        public DateTime Data { get; set; }
        public int TipoTransacao { get; set; }
        public string TransacaoID { get; set; }
        public string Referencia { get; set; }
        public int Status { get; set; }

        [NotMapped]
        public string StatusDesc
        {
            get
            {
                if (Status == 1)
                    return "Aguardando pagamento";
                else if (Status == 2)
                    return "Em análise";
                else if (Status == 3)
                    return "Paga";
                else if (Status == 4)
                    return "Disponível";
                else if (Status == 5)
                    return "Em disputa";
                else if (Status == 6)
                    return "Devolvida";
                else if (Status == 7)
                    return "Cancelada";
                else
                    return "Status Desconhecido";
            }
        }
        public decimal Total { get; set; }
        public decimal TotalDescontos { get; set; }
        public decimal TotalTaxas { get; set; }
        public decimal TotalLiquido { get; set; }
        public DateTime DataLiberacaoCredito { get; set; }
        public int TotalItensPedido { get; set; }

        public Pagamento Pagamento = new Pagamento();

        public Cliente Cliente = new Cliente();

        public List<Item> Itens = new List<Item>();

   }
}

Controller receiving the notification

[HttpPost]
            public void RetornoPagamento(FormCollection form)
            {
                string Email = "Email pagseguro";
                string Token = "Token Pagseguro";
                string TransacaoID = Request.Params["notificationCode"];
                string Pagina = "https://ws.pagseguro.uol.com.br/v2/transactions/notifications/" + TransacaoID + "?email=" + Email + "&token=" + Token;
                XElement xml = XElement.Load(Pagina);

                // Dados Gerais do Pedido
                var Pedido = new Pedido();
                Pedido.TransacaoID = xml.Element("code").Value;
                Pedido.Data = DateTime.Parse(xml.Element("date").Value);
                Pedido.TipoTransacao = int.Parse(xml.Element("type").Value);
                Pedido.Referencia = xml.Element("reference").Value;
                Pedido.Status = int.Parse(xml.Element("status").Value);
                Pedido.Total = decimal.Parse(xml.Element("grossAmount").Value);
                Pedido.TotalDescontos = decimal.Parse(xml.Element("discountAmount").Value);
                Pedido.TotalTaxas = decimal.Parse(xml.Element("feeAmount").Value);
                Pedido.TotalLiquido = decimal.Parse(xml.Element("netAmount").Value);
                Pedido.TotalItensPedido = int.Parse(xml.Element("itemCount").Value);

                // Dados Cliente do Pedido
                Pedido.Cliente.Nome = xml.Element("sender").Element("name").Value;
                Pedido.Cliente.Email = xml.Element("sender").Element("email").Value;
                Pedido.Cliente.TelefoneCodigoArea = xml.Element("sender").Element("phone").Element("areaCode").Value;
                Pedido.Cliente.Telefone = xml.Element("sender").Element("phone").Element("number").Value;
                Pedido.Cliente.Endereco = xml.Element("shipping").Element("address").Element("street").Value;
                Pedido.Cliente.EnderecoNumero = xml.Element("shipping").Element("address").Element("number").Value;
                Pedido.Cliente.Complemento = xml.Element("shipping").Element("address").Element("complement").Value;
                Pedido.Cliente.Bairro = xml.Element("shipping").Element("address").Element("district").Value;
                Pedido.Cliente.Cidade = xml.Element("shipping").Element("address").Element("city").Value;
                Pedido.Cliente.UF = xml.Element("shipping").Element("address").Element("state").Value;
                Pedido.Cliente.Pais = xml.Element("shipping").Element("address").Element("country").Value;
                Pedido.Cliente.CEP = xml.Element("shipping").Element("address").Element("postalCode").Value;

                // Dados de Pagamento do Pedido
                Pedido.Pagamento.Tipo = int.Parse(xml.Element("paymentMethod").Element("type").Value);
                Pedido.Pagamento.Parcelas = int.Parse(xml.Element("installmentCount").Value);
                Pedido.Pagamento.Codigo = int.Parse(xml.Element("paymentMethod").Element("code").Value);

                // Monta Itens do Pedido
                foreach (var Item in xml.Elements("items").Elements("item").ToList())
                {
                    Pedido.Itens.Add(new Helpers.Item()
                    {
                        ID = int.Parse(Item.Element("id").Value),
                        Descricao = Item.Element("description").Value,
                        Quantidade = int.Parse(Item.Element("quantity").Value),
                        Preco = decimal.Parse(Item.Element("amount").Value)
                    });
                }
//Aqui você tem todos os dados e pode prosseguir com a inclusão no banco e regra de negócio.
          }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.