Fórum Enviar dados através de URL externa utilizando formulário, com carregamento na mesma página #609219
23/04/2020
0
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
Curtir tópico
+ 0Posts
23/04/2020
Chico
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!
Gostei + 0
24/04/2020
Ayrton Pereira
Poderia postar o código do erro aqui?
Gostei + 0
28/04/2020
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!
Gostei + 0
28/04/2020
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!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)