none
ASP.NET MVC cielo RRS feed

  • Pergunta

  • Pessoal bom dia estou precisando muito da ajuda de você, sou novo em programação e estou trabalhando em um integração com a cielo, a principio eu envio json para eles com os dados do produto para venda até ai tudo bem esta funcionando, o problema é que não sei como pegar a url de retorno deles, assim que a venda é efetuda eles enviam um post para minha pagina com os dados e status da venda. alguém pode me orientar de maneira simples como pegar esta url de retorno?

    Grato

    sexta-feira, 5 de fevereiro de 2016 13:27

Respostas

  • Esta URL de retorno vai devolver os dados no formato JSON? Se for este o caso, você terá que mandar uma requisição HTTP para consumir tais informações.

    Escrevi 2 artigos que podem ser úteis neste tipo de situação:

    http://netcoders.com.br/blog/compressao-web-api-parte-2/

    http://netcoders.com.br/blog/servicos-restful-com-a-biblioteca-restsharp/

    • Sugerido como Resposta Renato GroffeMVP sábado, 6 de fevereiro de 2016 17:21
    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 17:06
    sábado, 6 de fevereiro de 2016 17:21
  • Olá amigo,

    Um mês atrás eu fiz toda a integração da cielo com asp.net usando um código open source

    https://github.com/lfreneda/Cielo

    Ao mesmo tempo é interessante você ter o Manual de Integração Cielo que eles te mandam no momento do cadastro no site deles.

    Teste lá e poste seus resultados.


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 17:06
    quarta-feira, 10 de fevereiro de 2016 16:46
  • Olá Amigo,

    Você falou que é um POST mas todo o seu código dentro do IF é para requests GET. Se a CIELO manda um POST para ti, significa que o bloco que vai ser executado é o que está em branco.

    Você só precisa implementar um código captando os campos de acordo com a documentação na parte em que seu código recebe o POST.

    Teste lá e poste seus resultados.


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 18:36
    quarta-feira, 10 de fevereiro de 2016 18:22
  • Olá,

    De acordo com a documentação, o que vem como resposta é um post. Normalmente a CIELO pede para que você envie um caminho para a API deles efetuar o POST com a resposta.

    1) Essa URL deve ser o local onde você espera o POST para captar os dados.

    2) Sim, deve ser um POST. Se está redirecionando ou "vindo" como GET, significa que existe algum erro na lógica do seu código.

    Caso você queira isso consertado, precisamos de mais informações sobre a sua implementação, juntamente com as integrações explicadas. Somente esse trexo do código não é o suficiente para saber onde está o problema.

    Espero ter ajudado,

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quinta-feira, 11 de fevereiro de 2016 12:07
    quarta-feira, 10 de fevereiro de 2016 22:07

Todas as Respostas

  • Esta URL de retorno vai devolver os dados no formato JSON? Se for este o caso, você terá que mandar uma requisição HTTP para consumir tais informações.

    Escrevi 2 artigos que podem ser úteis neste tipo de situação:

    http://netcoders.com.br/blog/compressao-web-api-parte-2/

    http://netcoders.com.br/blog/servicos-restful-com-a-biblioteca-restsharp/

    • Sugerido como Resposta Renato GroffeMVP sábado, 6 de fevereiro de 2016 17:21
    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 17:06
    sábado, 6 de fevereiro de 2016 17:21
  • obrigado pelos artigos mas ainda não sei receber post. 
    quarta-feira, 10 de fevereiro de 2016 16:41
  • Olá amigo,

    Um mês atrás eu fiz toda a integração da cielo com asp.net usando um código open source

    https://github.com/lfreneda/Cielo

    Ao mesmo tempo é interessante você ter o Manual de Integração Cielo que eles te mandam no momento do cadastro no site deles.

    Teste lá e poste seus resultados.


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 17:06
    quarta-feira, 10 de fevereiro de 2016 16:46
  • Diego obrigado, meu problema é o seguinte olha se você consegue me orientar: cliente fez o pagamento no site a cielo enviou ele novamente para minha pagina, agora preciso pegar os dados e atualizar meu banco o meu codigo para pegar a informações deles está certo? 

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!usuarioCTL.PermitirAcesso(false, false, true, true)) Response.Redirect("../login/logout.aspx");

            if (Request.HttpMethod == "GET")
            {
                RetornoCielo retornoCielo = new RetornoCielo();

                retornoCielo.checkout_cielo_order_number = Request.Form["checkout_cielo_order_number"];
                retornoCielo.amount = Request.Form["amount"];
                retornoCielo.order_number = Request.Form["order_number"];
                retornoCielo.created_date = Request.Form["created_date"];
                retornoCielo.customer_name = Request.Form["customer_name"];
                retornoCielo.customer_identity = Request.Form["customer_identity"];
                retornoCielo.customer_email = Request.Form["customer_email"];
                retornoCielo.customer_phone = Request.Form["customer_phone"];
                retornoCielo.discount_amount = Request.Form["discount_amount"];
                retornoCielo.shipping_type = Request.Form["shipping_type"];
                retornoCielo.shipping_name = Request.Form["shipping_name"];
                retornoCielo.shipping_price = Request.Form["shipping_price"];
                retornoCielo.shipping_address_zipcode = Request.Form["shipping_address_zipcode"];
                retornoCielo.shipping_address_district = Request.Form["shipping_address_district"];
                retornoCielo.shipping_address_city = Request.Form["shipping_address_city"];
                retornoCielo.shipping_address_state = Request.Form["shipping_address_state"];
                retornoCielo.shipping_address_line1 = Request.Form["shipping_address_line1"];
                retornoCielo.shipping_address_line2 = Request.Form["shipping_address_line2"];
                retornoCielo.shipping_address_number = Request.Form["shipping_address_number"];
                retornoCielo.payment_method_type = Request.Form["payment_method_type"];
                retornoCielo.payment_method_brand = Request.Form["payment_method_brand"];
                retornoCielo.payment_method_bank = Request.Form["payment_method_bank"];
                retornoCielo.payment_maskedcredicard = Request.Form["payment_maskedcredicard"];
                retornoCielo.payment_installments = Request.Form["payment_installments"];
                retornoCielo.payment_antifrauderesult = Request.Form["payment_antifrauderesult"];
                retornoCielo.payment_boletonumber = Request.Form["payment_boletonumber"];
                retornoCielo.payment_boletoexpirationdate = Request.Form["payment_boletoexpirationdate"];
                retornoCielo.payment_status = Request.Form["payment_status"];
                retornoCielo.tid = Request.Form["tid"];

                //if (retornoCielo.customer_name != null)
                //    lblMensagem0.Text = retornoCielo.customer_name;
                lblMensagem0.Text = Request.Form["tid"];
                lblMensagem0.Text = Request.QueryString["tid"];
            }
            else if (Request.HttpMethod == "POST")
            {

            }            

    acho que minha solução é simples, já li a documentação diversas vezes e ainda não entendi.

    vou dar uma olhada no seu código também


    • Editado HGB c quarta-feira, 10 de fevereiro de 2016 17:23
    quarta-feira, 10 de fevereiro de 2016 17:02
  • Olá Amigo,

    Você falou que é um POST mas todo o seu código dentro do IF é para requests GET. Se a CIELO manda um POST para ti, significa que o bloco que vai ser executado é o que está em branco.

    Você só precisa implementar um código captando os campos de acordo com a documentação na parte em que seu código recebe o POST.

    Teste lá e poste seus resultados.


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quarta-feira, 10 de fevereiro de 2016 18:36
    quarta-feira, 10 de fevereiro de 2016 18:22
  • eu inverti aqui, porém ainda chega como null pra mim, na verdade quando é redirecionado nem entra no metodo porque vem como get.
    quarta-feira, 10 de fevereiro de 2016 18:35
  • diego é justamente esse codigo para captar os campos que não consigo desenvolver.
    quarta-feira, 10 de fevereiro de 2016 18:38
  • Olá,

    De acordo com a documentação, o que vem como resposta é um post. Normalmente a CIELO pede para que você envie um caminho para a API deles efetuar o POST com a resposta.

    1) Essa URL deve ser o local onde você espera o POST para captar os dados.

    2) Sim, deve ser um POST. Se está redirecionando ou "vindo" como GET, significa que existe algum erro na lógica do seu código.

    Caso você queira isso consertado, precisamos de mais informações sobre a sua implementação, juntamente com as integrações explicadas. Somente esse trexo do código não é o suficiente para saber onde está o problema.

    Espero ter ajudado,

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    • Marcado como Resposta HGB c quinta-feira, 11 de fevereiro de 2016 12:07
    quarta-feira, 10 de fevereiro de 2016 22:07
  • bom dia essa é a função que envio os dados para a cielo e redireciono o cliente para a pagina deles de checkout:

     protected void cmdSalvar_Click(object sender, EventArgs e)
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://cieloecommerce.cielo.com.br/api/public/v1/orders");

            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Headers["MerchantId"] = cielo.id;
            httpWebRequest.Timeout = 70000;

            using (var writer = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                compra Compra = new compra();


                string json = "{"
            + "    \"OrderNumber\": \"12344\","
            + "    \"SoftDescriptor\": \"44489\","
            + "    \"Cart\": {"
            + "        \"Discount\": {"
            + "            \"Type\": \"Percent\","
            + "            \"Value\": 10"
            + "        },"
            + "        \"Items\": ["
            + "            {"
            + "                \"Name\": \"Nome do produto\","
            + "                \"Description\": \"Descrição do produto\","
            + "                \"UnitPrice\": 100,"
            + "                \"Quantity\": 2,"
            + "                \"Type\": \"Asset\","
            + "                \"Sku\": \"Sku do item no carrinho\","
            + "                \"Weight\": 200"
            + "            }"
            + "        ]"
            + "    },"
            + "    \"Shipping\": {"
            + "        \"Type\": \"WithoutShipping\","
            + "        \"SourceZipCode\": \"14400000\","
            + "        \"TargetZipCode\": \"11000000\","
            + "        \"Address\": {"
            + "            \"Street\": \"Endereço de entrega\","
            + "            \"Number\": \"123\","
            + "            \"Complement\": \"\","
            + "            \"District\": \"Bairro da entrega\","
            + "            \"City\": \"Cidade de entrega\","
            + "            \"State\": \"SP\""
            + "        },"
            + "        \"Services\": ["
            + "            {"
            + "                \"Name\": \"Serviço de frete\","
            + "                \"Price\": 123,"
            + "                \"Deadline\": 15"
            + "            }"
            + "        ]"
            + "    },"
            + "    \"Payment\": {"
            + "        \"BoletoDiscount\": 0,"
            + "        \"DebitDiscount\": 0,"
            + "        \"RecurrentPayment\": {"
            + "            \"Interval\": \"Monthly\","
            + "            \"EndDate\": \"2015-12-31\""
            + "         }"
            + "     },"
            + "     \"Customer\": {"
            + "         \"Identity\": 11111111111,"
            + "         \"FullName\": \"Fulano Comprador da Silva\","
            + "         \"Email\": \"fulano@email.com\","
            + "         \"Phone\": \"11999999999\""
            + "     },"
            + "     \"Options\": {"
            + "         \"AntifraudEnabled\": false"
            + "     }"
            + "}";

                writer.Write(json);
                writer.Close();
            }
            try
            {
                var HttpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(HttpWebResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();

                    Dictionary<string, object> values = deserializeToDictionary(result);

                    string checkoutUrl = GetRedirectUrlCielo(result);

                    Response.Redirect(checkoutUrl);
                }
            }
            catch (Exception ex)
            {
                // se retornar a mensagem: The remote server returned an error: (400) Bad Request.
                // verificar a quantidade de caracteres nos campos que foram enviados.

                string erro = ex.Message;
            }
        }


        private Dictionary<string, object> deserializeToDictionary(string jo)
        {
            var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(jo);
            var values2 = new Dictionary<string, object>();
            foreach (KeyValuePair<string, object> d in values)
            {
                if (d.Value is JObject)
                {
                    values2.Add(d.Key, deserializeToDictionary(d.Value.ToString()));
                }
                else
                {
                    values2.Add(d.Key, d.Value);
                }
            }
            return values2;
        }
        private string GetRedirectUrlCielo(string result)
        {
            var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
            var values2 = new Dictionary<string, object>();
            foreach (KeyValuePair<string, object> d in values)
            {
                if (d.Value is JObject)
                {
                    values2.Add(d.Key, deserializeToDictionary(d.Value.ToString()));

                    if (d.Key == "settings")
                    {
                        foreach (KeyValuePair<string, object> x in deserializeToDictionary(d.Value.ToString()))
                        {
                            if (x.Key == "checkoutUrl")
                            {
                                return x.Value.ToString();
                            }
                        }
                    }
                }
                else
                {
                    values2.Add(d.Key, d.Value);
                }
            }

            return string.Empty;
        }

    quinta-feira, 11 de fevereiro de 2016 11:39
  • em seguida configurei na pagina da cielo para ele retorna para essa mesma pagina aspx que coloquei na page load o seguinte codigo para pegar o retorno que no caso é onde travei:

     protected void Page_Load(object sender, EventArgs e)
        {
     if (!usuarioCTL.PermitirAcesso(false, false, true, true)) Response.Redirect("../login/logout.aspx");

            if (!IsPostBack)
            {
                CarregarDadosUsuario();
                CarregarEventosEdicao();
                CarregarCarrinhoCompras();

                if (Request.HttpMethod == "POST")
                {
                    RetornoCielo retornoCielo = new RetornoCielo();

                    Request.QueryString["checkout_cielo_order_number"].ToString();
                    lblMensagem0.Text = Request.QueryString["payment_status"].ToString();

                    retornoCielo.checkout_cielo_order_number = Request.Form["checkout_cielo_order_number"];
                    retornoCielo.amount = Request.Form["amount"];
                    retornoCielo.order_number = Request.Form["order_number"];
                    retornoCielo.created_date = Request.Form["created_date"];
                    retornoCielo.customer_name = Request.Form["customer_name"];
                    retornoCielo.customer_identity = Request.Form["customer_identity"];
                    retornoCielo.customer_email = Request.Form["customer_email"];
                    retornoCielo.customer_phone = Request.Form["customer_phone"];
                    retornoCielo.discount_amount = Request.Form["discount_amount"];
                    retornoCielo.shipping_type = Request.Form["shipping_type"];
                    retornoCielo.shipping_name = Request.Form["shipping_name"];
                    retornoCielo.shipping_price = Request.Form["shipping_price"];
                    retornoCielo.shipping_address_zipcode = Request.Form["shipping_address_zipcode"];
                    retornoCielo.shipping_address_district = Request.Form["shipping_address_district"];
                    retornoCielo.shipping_address_city = Request.Form["shipping_address_city"];
                    retornoCielo.shipping_address_state = Request.Form["shipping_address_state"];
                    retornoCielo.shipping_address_line1 = Request.Form["shipping_address_line1"];
                    retornoCielo.shipping_address_line2 = Request.Form["shipping_address_line2"];
                    retornoCielo.shipping_address_number = Request.Form["shipping_address_number"];
                    retornoCielo.payment_method_type = Request.Form["payment_method_type"];
                    retornoCielo.payment_method_brand = Request.Form["payment_method_brand"];
                    retornoCielo.payment_method_bank = Request.Form["payment_method_bank"];
                    retornoCielo.payment_maskedcredicard = Request.Form["payment_maskedcredicard"];
                    retornoCielo.payment_installments = Request.Form["payment_installments"];
                    retornoCielo.payment_antifrauderesult = Request.Form["payment_antifrauderesult"];
                    retornoCielo.payment_boletonumber = Request.Form["payment_boletonumber"];
                    retornoCielo.payment_boletoexpirationdate = Request.Form["payment_boletoexpirationdate"];
                    retornoCielo.payment_status = Request.Form["payment_status"];
                    retornoCielo.tid = Request.Form["tid"];
                }
                else if (Request.HttpMethod == "GET")
                {

                }            
            }
        }

    quinta-feira, 11 de fevereiro de 2016 11:41
  • Olá Amigo,

    A forma ideal para averiguar o problema seria debugar o seu código no momento em que a HttpRequest é feita no serviço da CIELO e ver qual o retorno deles ANTES de fazer o Deserialization.

    Com certeza ali estará a informação para solucionar o problema.

    Teste e poste seus resultados.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    quinta-feira, 11 de fevereiro de 2016 16:39