Enviar dados através de URL externa utilizando formulário, com carregamento na mesma página

23/04/2020

10

Olá!

Sou iniciante em PHP e estou montando um formulário para receber dados através de POST, e imprimi-los em uma URL customizada. O objetivo do form é o cadastramento de leads em uma plataforma terceira de CRM, que só aceita a inclusão de dados desta forma.

A estrutura da URL é a seguinte: https://crm4u.azurewebsites.net/api/Android/PutLead/< NOME >;< E-MAIL >;< TELEFONE >;< OBSERVACOES >/281/739164197

Aparentemente estou conseguindo executar o script e manipular o endereço, mas só consegui fazer isso com a função header("Location").

Formulário:

<form id="formulario" action="mail_lead_santos.php" method="post">
    Nome: <input type="text" id="nome" name="nome"><br>
    E-mail: <input type="text" id="email" name="email"><br>
    Telefone: <input type="tel" id="telefone" name="telefone"><br>
    Motivo: <select id ="observacoes" name="observacoes">
    <option value="Opção 1">Opção 1</option>
    <option value="Opção 2">Opção 2</option>
    <option value="Opção 3">Opção 3</option>
 </select><br>
    <input id="enviar" name="enviar" type="submit" value="Enviar!">
</form>


mail_lead_santos.php

<?php

 $nome = $_POST['nome'];
 $email = $_POST['email'];
 $telefone = $_POST['telefone'];
 $observacoes = $_POST['observacoes'];


$final = 'Location: https://crm4u.azurewebsites.net/api/Android/PutLead/'.$nome.';'.$email.';'.$telefone.';'.$observacoes.';'.'/281/739164197';

header($final);

?>


Com isso, após o preenchimento do formulário, naturalmente o usuário cai nesta URL final. De que forma eu conseguiria executar essa função através do formulário, mas mantê-lo na página de preenchimento? Entendo que a melhor forma talvez seja através de jquery/ajax, mas como trabalhar em conjunto com a função header?

Obrigado!
Responder

Posts

23/04/2020

Chico

Olá!

Sou iniciante em PHP e estou montando um formulário para receber dados através de POST, e imprimi-los em uma URL customizada. O objetivo do form é o cadastramento de leads em uma plataforma terceira de CRM, que só aceita a inclusão de dados desta forma.

A estrutura da URL é a seguinte: https://crm4u.azurewebsites.net/api/Android/PutLead/< NOME >;< E-MAIL >;< TELEFONE >;< OBSERVACOES >/281/739164197

Aparentemente estou conseguindo executar o script e manipular o endereço, mas só consegui fazer isso com a função header("Location").

Formulário:

<form id="formulario" action="mail_lead_santos.php" method="post">
    Nome: <input type="text" id="nome" name="nome"><br>
    E-mail: <input type="text" id="email" name="email"><br>
    Telefone: <input type="tel" id="telefone" name="telefone"><br>
    Motivo: <select id ="observacoes" name="observacoes">
    <option value="Opção 1">Opção 1</option>
    <option value="Opção 2">Opção 2</option>
    <option value="Opção 3">Opção 3</option>
 </select><br>
    <input id="enviar" name="enviar" type="submit" value="Enviar!">
</form>


mail_lead_santos.php

<?php

 $nome = $_POST['nome'];
 $email = $_POST['email'];
 $telefone = $_POST['telefone'];
 $observacoes = $_POST['observacoes'];


$final = 'Location: https://crm4u.azurewebsites.net/api/Android/PutLead/'.$nome.';'.$email.';'.$telefone.';'.$observacoes.';'.'/281/739164197';

header($final);

?>


Com isso, após o preenchimento do formulário, naturalmente o usuário cai nesta URL final. De que forma eu conseguiria executar essa função através do formulário, mas mantê-lo na página de preenchimento? Entendo que a melhor forma talvez seja através de jquery/ajax, mas como trabalhar em conjunto com a função header?

Obrigado!


Pessoal,

Conversei com um amigo e ele me disse que um caminho melhor seria fazer essa função por jquery, e acabei reescrevendo dessa forma:

<form id="formulario" action="" method="get">
	<input type="hidden" id="unidade" name="unidade" value="281">
	<input type="hidden" id="chave" name="chave" value="739164197">
    Nome: <input type="text" id="nome" name="nome"><br>
    E-mail: <input type="text" id="email" name="email"><br>
    Telefone: <input type="tel" id="telefone" name="telefone"><br>
    Motivo: <select id ="observacoes" name="observacoes">
    <option value="Opção 1">Opção 1</option>
    <option value="Opção 2">Opção 2</option>
    <option value="Opção 3">Opção 3</option>
 </select><br>
    <input id="enviar" name="enviar" type="submit" value="Enviar!">
</form>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#formulario").on('submit', function (event) {

            var nome = $("#nome").val();
            var email = $("#email").val();
            var telefone = $("#telefone").val();
            var observacoes = $("#observacoes").val();	
            var unidade = $("#unidade").val();
			var chave = $("#chave").val();


            $.get( `https://crm4u.azurewebsites.net/api/Android/PutLead/$;$;$;$/$/$/`)
            .done(function( data ) {
                alert("Sucesso");
            })
            .fail(function() {
                alert( "Erro" );
            })

            event.preventDefault();

        });
    });
</script> 


O problema é que ele está retornando erro. Alguém sabe o que eu posso estar fazendo de errado?

Obrigado!
Responder

24/04/2020

Ayrton Pereira

Chico,

Poderia postar o código do erro aqui?
Responder

28/04/2020

Chico

Chico,

Poderia postar o código do erro aqui?


Ayrton, obrigado pelo retorno. Demorei para responder porque o pessoal mudou tudo e desenvolveram uma API (via SOAP) para o envio das informações. Com isso, precisei começar novamente todo o script, e parti pra uma solução em PHP, apesar de ser bem iniciante no assunto.

Como é um CRM que não tem muita abrangência, a documentação só dá algumas instruções, e tentei pesquisar algumas soluções para começar o desenvolvimento. Primeiro, precisei procurar algumas soluções para a validação, etapa necessária antes do envio do formulário. Testei e deu tudo certo - estou trabalhando com o seguinte código:

<?php
$client = new SoapClient('http://crm4u.azurewebsites.net/WS_Integracao.asmx?WSDL');

$function = 'GetToken';

$arguments= array('GetToken' => array(
                  'ApiKey'   => XXXXXXXX
                ));

$options = array('location' => 'http://crm4u.azurewebsites.net/WS_Integracao.asmx');

$result = $client->__soapCall($function, $arguments, $options);

$json = $result->GetTokenResult;
$item = json_decode($json, true);

print_r($item);

$apikey = 'XXXXXXXX';
$apipassword = 'YYYYYYYY';

$combinacao = $apikey."|".$apipassword."|".$item;

$combinacaomd5 = md5($combinacao);

$tokenfinal = $combinacaomd5."|".$apikey;

print_r($tokenfinal);

?>


Agora que tenho o token validado, criptografado e concatenado (modelo solicitado) para envio do formulário, preciso entender como devo prosseguir para realizar uma chamada através do método "PutLead", enviando o elemento "Pessoa" e o "Token Final" (gerado no código anterior). Para "Pessoa", devo enviar os seguintes campos:

Nome: string com tamanho máximo de 150 caracteres
E-mail: string com tamanho máximo de 150 caracteres
Telefone: string com tamanho máximo de 20 caracteres
Observações: string com tamanho máximo de 500 caracteres

Com isso, o formato da realização da chamada deverá ser o seguinte:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
    <soapenv:Header/>
    <soapenv:Body>
        <tem:PutLead>
            <tem:pessoa>
                <tem:Nome>Nome do lead</tem:Nome>
                <tem:Email>lead@email.com</tem:Email>
                <tem:Telefone>11 99999-9999</tem:Telefone>
                <tem:Observacoes>Observações do lead</tem:Observacoes>
            </tem:pessoa>
            <tem:Key>TOKEN GERADO PELO CÓDIGO ANTERIOR</tem:Key>
        </tem:PutLead>
    </soapenv:Body>
</soapenv:Envelope>


Caso a requisição seja concluída com sucesso, deveremos ter o retorno do ID do lead - conforme código abaixo:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <PutLeadResponse xmlns="http://tempuri.org/">
            <PutLeadResult>ID DO LEAD</PutLeadResult>
        </PutLeadResponse>
    </soap:Body>
</soap:Envelope>


Pesquisei por diversas coisas, mas não encontrei nada relevante sobre o assunto - não sei nem se é a melhor forma de realizar este processo. Preferi seguir com o PHP pois tenho alguma afinidade, mesmo sendo pouca. Alguém consegue me dar uma luz?

Obrigado!
Responder

28/04/2020

Chico

Chico,

Poderia postar o código do erro aqui?


Ayrton, obrigado pelo retorno. Demorei para responder porque o pessoal mudou tudo e desenvolveram uma API (via SOAP) para o envio das informações. Com isso, precisei começar novamente todo o script, e parti pra uma solução em PHP, apesar de ser bem iniciante no assunto.

Como é um CRM que não tem muita abrangência, a documentação só dá algumas instruções, e tentei pesquisar algumas soluções para começar o desenvolvimento. Primeiro, precisei procurar algumas soluções para a validação, etapa necessária antes do envio do formulário. Testei e deu tudo certo - estou trabalhando com o seguinte código:

<?php
$client = new SoapClient('http://crm4u.azurewebsites.net/WS_Integracao.asmx?WSDL');

$function = 'GetToken';

$arguments= array('GetToken' => array(
                  'ApiKey'   => XXXXXXXX
                ));

$options = array('location' => 'http://crm4u.azurewebsites.net/WS_Integracao.asmx');

$result = $client->__soapCall($function, $arguments, $options);

$json = $result->GetTokenResult;
$item = json_decode($json, true);

print_r($item);

$apikey = 'XXXXXXXX';
$apipassword = 'YYYYYYYY';

$combinacao = $apikey."|".$apipassword."|".$item;

$combinacaomd5 = md5($combinacao);

$tokenfinal = $combinacaomd5."|".$apikey;

print_r($tokenfinal);

?>


Agora que tenho o token validado, criptografado e concatenado (modelo solicitado) para envio do formulário, preciso entender como devo prosseguir para realizar uma chamada através do método "PutLead", enviando o elemento "Pessoa" e o "Token Final" (gerado no código anterior). Para "Pessoa", devo enviar os seguintes campos:

Nome: string com tamanho máximo de 150 caracteres
E-mail: string com tamanho máximo de 150 caracteres
Telefone: string com tamanho máximo de 20 caracteres
Observações: string com tamanho máximo de 500 caracteres

Com isso, o formato da realização da chamada deverá ser o seguinte:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
    <soapenv:Header/>
    <soapenv:Body>
        <tem:PutLead>
            <tem:pessoa>
                <tem:Nome>Nome do lead</tem:Nome>
                <tem:Email>lead@email.com</tem:Email>
                <tem:Telefone>11 99999-9999</tem:Telefone>
                <tem:Observacoes>Observações do lead</tem:Observacoes>
            </tem:pessoa>
            <tem:Key>TOKEN GERADO PELO CÓDIGO ANTERIOR</tem:Key>
        </tem:PutLead>
    </soapenv:Body>
</soapenv:Envelope>


Caso a requisição seja concluída com sucesso, deveremos ter o retorno do ID do lead - conforme código abaixo:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <PutLeadResponse xmlns="http://tempuri.org/">
            <PutLeadResult>ID DO LEAD</PutLeadResult>
        </PutLeadResponse>
    </soap:Body>
</soap:Envelope>


Pesquisei por diversas coisas, mas não encontrei nada relevante sobre o assunto - não sei nem se é a melhor forma de realizar este processo. Preferi seguir com o PHP pois tenho alguma afinidade, mesmo sendo pouca. Alguém consegue me dar uma luz?

Obrigado!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar