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

23/04/2020

0

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!
Chico

Chico

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, consulte nossa política de privacidade.

Aceitar