Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sanderson araujo

como enviar um arquivo xml para fazer uma integração API

Recommended Posts

Ola, pessoal,

Estou com uma solicitação no trabalho para integrar um formulário simples em php (e-mail , nome e telefone) com a api de uma empresa ,que oferece o serviço de e-mail marketing .

O cliente vai entra no site , preencher o cadastro e enviar os dados, só que esse dados já tem que ir direto para lista de contatos dessa plataforma.

A empresa informou que esses dados tem ser enviados por xml , eu criei o formulário , só que estou perdido na hora de enviar para api da empresa no formato xml.

Se alguém puder me ajudar agradeço!

 

Segue o que eu fiz:

 

formulario.php

<form action="enviar.php" method="POST" name="formClient" accept-charset="ISO-8859-1">
<table>
<tr>
<td class="label"> Email * </td>
<td>
<input type="text" name="temail" id="email" value="" style="width: 200px;" maxlength="255"> </td>
</tr>
<tr>
<td class="label">Nome </td>
<td>
<input type="text" name="tname" id="name" value="" style="width: 200px;" maxlength="85"> </td>
</tr>
<tr>
<td class="label">DDD+Telefone</td>
<td>
<input type="text" name="tphone" id="phone" value="" style="width: 150px;" maxlength="16"> </td>
</tr>
</table>
<input type="submit" name="submit" value="Cadastrar!">
</form>

enviar.php

<?php 
$nome = $_POST['tname'];
$email = $_POST['temail'];
$telefone = $_POST['tphone'];
$usuario ="o email do usuario";
$senha = "senha do usuario";
$codificado = md5($senha);
 
$conteudoXML= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$conteudoXML.= "<main>\n\t";
$conteudoXML.= "<emkt trans=\"11.05\">\n";
$conteudoXML.= "<nome>";
$conteudoXML.= "cadastro do site";
$conteudoXML.= "</nome>\n";
$conteudoXML.= "<nome>";
$conteudoXML.= $nome = $_POST['tname'];
$conteudoXML.= "</nome>\n";
$conteudoXML.= "<email>";
$conteudoXML.= $email = $_POST['temail'];
$conteudoXML.= "</email>\n";
$conteudoXML.= "<telefone1>";
$conteudoXML.= $telefone = $_POST['tphone'];
$conteudoXML.= "</telefone1>\n";
$conteudoXML.= "</emkt>\n";
$conteudoXML.= "</main>\n";
$xml = new SimpleXMLElement($conteudoXML);
$xml -> saveXML("[url=http://api.akna.com.br/emkt/int/integracao.php?user=$usuarioPass=$codificado]http://api.akna.com.br/emkt/int/integracao.php?user=$usuarioPass=$codificado");[/url]
?>

O ERRO que retornou foi esse:

Warning: SimpleXMLElement::saveXML(http://api.akna.com.br/emkt/int/integracao.php?user==): failed to open stream: HTTP wrapper does not support writeable connections [/size]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara, para enviar vc precisa utilizar cURL

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só montar um header, especificar o tipo de conteúdo (Content-Type) e enviar para o servidor utilizando cURL ou socket/fwrite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda pessoal! Meus conhecimentos no php ainda são básicos, mas estudando cada vez mais para melhorar , eu fiz essa alteração no código e me retornou esse erro.

 

XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada. XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada.

 

os dados digitados não estão no arquivo xml, saberia me dizer o que eu estou fazendo errado. Obrigado

<?php 
$nome = $_POST['tname'];
$email = $_POST['temail'];
$telefone = $_POST['tphone'];
$usuario ="email do usuario";
$senha = "senha do usuario";
$codificado = md5($senha);
 
$conteudoXML= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$conteudoXML.= "<main>\n\t";
$conteudoXML.= "<emkt trans=\"11.05\">\n";
$conteudoXML.= "<nome>";
$conteudoXML.= "cadastro do site";
$conteudoXML.= "</nome>\n";
$conteudoXML.= "<nome>";
$conteudoXML.= $nome = $_POST['tname'];
$conteudoXML.= "</nome>\n";
$conteudoXML.= "<email>";
$conteudoXML.= $email = $_POST['temail'];
$conteudoXML.= "</email>\n";
$conteudoXML.= "<telefone1>";
$conteudoXML.= $telefone = $_POST['tphone'];
$conteudoXML.= "</telefone1>\n";
$conteudoXML.= "</emkt>\n";
$conteudoXML.= "</main>\n";
$xml = new SimpleXMLElement($conteudoXML);
$xml -> saveXML("cadastro.xml");
$url = '[url=http://api.akna.com.br/emkt/int/integracao.php?user=$usuarioPass=$codificado';]http://api.akna.com.br/emkt/int/integracao.php?user=$usuarioPass=$codificado';[/url]
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $xml );
curl_exec( $curl);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

esquece o SimpleXMLElement, você não vai usar ele.

E no post, vc envia a string do xml:

 

curl_setopt( $curl, CURLOPT_POSTFIELDS, $conteudoXML);

Compartilhar este post


Link para o post
Compartilhar em outros sites

William , modifiquei a linha que informou e tirei o SimpleXMLElement e deu o mesmo erro . Eu acredito que onde eu estou errando é na criação do xml , porque eu dei echo na variável $conteudoXML e ele retornou os valores que tinha cadastrado no formulário, porem tudo na mesma linha e sem as tag do xml.

 

 

Cadastro do Site Sanderson araujo teste@teste.com.br 1123232323

XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada. XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada.

 

A sintaxe do xml com as suas tag não aparece?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não aparece no navegador.

Para ver, vc precisa visualizar o código fonte da página.

 

Pega esse código no fonte, e manda para um validador de xml:

http://www.xmlvalidation.com

 

 

Vc pode estar errando o xml também, mas as outras coisas que eu disse, tb eram necessárias :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?xml version="1.0" encoding="UTF-8"?>

<main>

<emkt trans="11.05">

<nome>TS - Cadastro Site</nome>

<nome>Sanderson araujo</nome>

<email>teste@teste.com.br</email>

<telefone1>1123232323</telefone1>

</emkt>

</main>

<?xml version="1.0" encoding="UTF-8"?>

<AKNA>

<FUNC TRANS="" KEY="0b9001e98d065765bbcf189a5bf3">

<RETURN ID="11">

XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada.

</RETURN>

</FUNC>

</AKNA>

<?xml version="1.0" encoding="UTF-8"?>

<AKNA>

<FUNC TRANS="" KEY="0d3001e4cd0b9765bfaafa9f5bf3">

<RETURN ID="11">

XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada.</RETURN>

</FUNC>

</AKNA>

 

Até </main> está certo , o que vem depois não era para ter. Será que é isso que esta fazendo não dá certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso q está depois de </main> já é o retorno.

 

Verifique lá na api.akna.com.br como é o XML que eles esperam que vc envie.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O manual deles diz isso : Integração de Funcionalidades do sistema

 

Todas as transações devem seguir o padrão abaixo:

 

Envio de uma requisição POST para o endereço:

 

http://api.akna.com.br/emkt/int/integracao.php

 

Com os seguintes campos:

 

User = E-mail do usuário

Pass = Senha do usuário criptografada com MD5

Client = Código da empresa no sistema, se o usuário só faz parte de uma empresa o campo não é obrigatório

XML = Conteúdo da Solicitação

 

Atenção: O sistema faz diferenciação entre letras maiúsculas e minúsculas por tanto mantenha User, Pass e XML exatamente como escrito aqui.

 

Todas as transações retornam um XML, e no caso de erro de pedido incorreto, alguns padrões de códigos de retorno são respeitados para todos os tipos de transações, são eles.

 

01 = Usuário e/ou senha inválidos

02 = Permissão Negada

03 = Transação Inválida

05 - Usuário pertence a mais de uma empresa, obrigatorio envio de código de empresa

06 - Acesso negado

 

 

ATENÇÃO:

 

ñ Os campos que estão em preto no XML são obrigatórios e o XML deve ser enviado codificado em UTF-8.

 

ñ Não são aceitos símbolos HTML tais como " ã ç e etc... à exceção do & - nestes casos o texto deve conter a acentuação normalmente (áéãçí) e reforçando, o XML deve estar codificado em UTF-8.

Estou fazendo a importação 11.05, o xml tem que ser assim!

11.05) Importar contatos em uma lista de contatos

Envio:

<main>

<emkt trans="11.05">

<nome>[NOME DA LISTA]</nome>

<substituir>[s/N]</substituir>

<destinatario codigo="[CODIGO]">

<nome>[NOME]</nome>

<email></email>

<sexo>[sEXO]</sexo>

<idade>[iDADE]</idade>

<data_nascimento>[DATA_NASCIMENTO]</data_nascimento>

<empresa>[EMPRESA]</empresa>

<cpf>[CPF]</cpf>

<atividade>[ATIVIDADE]</atividade>

<profissao>[PROFISSAO]</profissao>

<tipoend>[TIPO DE ENDERECO]</tipoend>

<endereco>[ENDERECO]</endereco>

<complemento>[COMPLEMENTO]</complemento>

<bairro>[bAIRRO]</bairro>

<cidade>[CIDADE]</cidade>

<estado>[ESTADO]</estado>

<pais>[PAIS]</pais>

<cep>[CEP]</Cep>

<telefone1>[TELEFONE 1]</telefone1>

<telefone2>[TELEFONE 2]</telefone2>

<telefone3>[TELEFONE 3]</telefone3>

<fax>[FAX]</fax>

<infoadc1>[iNFO 01]</infoadc1>

<infoadc2>[iNFO 02]</infoadc2>

<infoadc3>[iNFO 03]</infoadc3>

<infoadc4>[iNFO 04]</infoadc4>

<infoadc5>[iNFO 05]</infoadc5>

<infoadc6>[iNFO 06]</infoadc6>

<infoadc7>[iNFO 07]</infoadc7>

<infoadc8>[iNFO 08]</infoadc8>

<infoadc9>[iNFO 09]</infoadc9>

<infoadc10>[iNFO 10]</infoadc10>

<infoadc11>[iNFO 11]</infoadc11>

<infoadc12>[iNFO 12]</infoadc12>

<infoadc13>[iNFO 13]</infoadc13>

<infoadc14>[iNFO 14]</infoadc14>

<infoadc15>[iNFO 15]</infoadc15>

<infoadc16>[iNFO 16]</infoadc16>

<infoadc17>[iNFO 17]</infoadc17>

<infoadc18>[iNFO 18]</infoadc18>

<infoadc19>[iNFO 19]</infoadc19>

<infoadc20>[iNFO 20]</infoadc20>

<data_validade>[DATA VALIDADE]</data_validade>

</destinatario>

<destinatario codigo="[CODIGO]">

(...)

</destinatario>

(...)

</emkt>

</main>

Retorno:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem tanto cara, teu xml está bem diferente do q eles esperam, por exemplo vc está enviando a chave nome 2 vezes

 

<nome>TS - Cadastro Site</nome>
  <nome>Sanderson araujo</nome>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse primeiro <nome > se refere , a <nome>[NOME DA LISTA]</nome> e o segundo se refere a <nome>[NOME]</nome>.

Será que o problema é como estou passando o usuário e a senha para fazer autenticação no servidor deles , mas também se fosse isso retornaria outro tipo de erro.

 

Surgiu uma duvida , seu colocar por exemplo echo $conteudoXML , no código fonte aparece o xml e as informações , se eu tirar o echo no código fonte aparece apenas o retorno , é assim mesmo que funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, é assim mesmo q funciona.

 

cara, mas dá uma olhada com mais calma, ta faltando chave no teu xml

 

o segundo nome deveria estar dentro da tag destinatário

 

faz com calma ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acabei fazendo algumas modificações no código para deixar o xml no formato correto , porém continuar com o mesmo erro .

 

O codigo alterado:

<?php 
$nome = $_POST['tname'];
$email = $_POST['temail'];
$telefone = $_POST['tphone'];
$usuario ="email do usuario";
$senha = "senha do usuario";
$codificado = md5($senha);

$conteudoXML= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$conteudoXML.= "<main>\n\t";
$conteudoXML.= "<emkt trans=\"11.05\">\n\t\t";
$conteudoXML.= "<nome>";
$conteudoXML.= "TS - Cadastro Site";
$conteudoXML.= "</nome>\n\t\t";
$conteudoXML.= "<substituir>";
$conteudoXML.= "N";
$conteudoXML.= "</substituir>\n\t\t";
$conteudoXML.= "<destinatario codigo=''>\n\t\t\t";
$conteudoXML.= "<nome>";
$conteudoXML.= $nome = $_POST['tname'];
$conteudoXML.= "</nome>\n\t\t\t";
$conteudoXML.= "<email>";
$conteudoXML.= $email = $_POST['temail'];
$conteudoXML.= "</email>\n\t\t\t";
$conteudoXML.= "<---o>";
$conteudoXML.= "</---o>\n\t\t\t";
$conteudoXML.= "<idade>";
$conteudoXML.= "</idade>\n\t\t\t";
$conteudoXML.= "<data_nascimento>";
$conteudoXML.= "</data_nascimento>\n\t\t\t";
$conteudoXML.= "<empresa>";
$conteudoXML.= "</empresa>\n\t\t\t";
$conteudoXML.= "<cpf>";
$conteudoXML.= "</cpf>\n\t\t\t";
$conteudoXML.= "<atividade>";
$conteudoXML.= "</atividade>\n\t\t\t";
$conteudoXML.= "<profissao>";
$conteudoXML.= "</profissao>\n\t\t\t";
$conteudoXML.= "<tipoend>";
$conteudoXML.= "</tipoend>\n\t\t\t";
$conteudoXML.= "<endereco>";
$conteudoXML.= "</endereco>\n\t\t\t";
$conteudoXML.= "<complemento>";
$conteudoXML.= "</complemento>\n\t\t\t";
$conteudoXML.= "<bairro>";
$conteudoXML.= "</bairro>\n\t\t\t";
$conteudoXML.= "<cidade>";
$conteudoXML.= "</cidade>\n\t\t\t";
$conteudoXML.= "<estado>";
$conteudoXML.= "</estado>\n\t\t\t";
$conteudoXML.= "<pais>";
$conteudoXML.= "</pais>\n\t\t\t";
$conteudoXML.= "<cep>";
$conteudoXML.= "</cep>\n\t\t\t";
$conteudoXML.= "<telefone1>";
$conteudoXML.= $telefone = $_POST['tphone'];
$conteudoXML.= "</telefone1>\n\t\t\t";
$conteudoXML.= "<telefone2>";
$conteudoXML.= "</telefone2>\n\t\t\t";
$conteudoXML.= "<telefone3>";
$conteudoXML.= "</telefone3>\n\t\t\t";
$conteudoXML.= "<fax>";
$conteudoXML.= "</fax>\n\t\t\t";
$conteudoXML.= "<infoadc1>";
$conteudoXML.= "</infoadc1>\n\t\t\t";
$conteudoXML.= "<infoadc2>";
$conteudoXML.= "</infoadc2>\n\t\t\t";
$conteudoXML.= "<infoadc3>";
$conteudoXML.= "</infoadc3>\n\t\t\t";
$conteudoXML.= "<infoadc4>";
$conteudoXML.= "</infoadc4>\n\t\t\t";
$conteudoXML.= "<infoadc5>";
$conteudoXML.= "</infoadc5>\n\t\t\t";
$conteudoXML.= "<infoadc6>";
$conteudoXML.= "</infoadc6>\n\t\t\t";
$conteudoXML.= "<infoadc7>";
$conteudoXML.= "</infoadc7>\n\t\t\t";
$conteudoXML.= "<infoadc8>";
$conteudoXML.= "</infoadc8>\n\t\t\t";
$conteudoXML.= "<infoadc9>";
$conteudoXML.= "</infoadc9>\n\t\t\t";
$conteudoXML.= "<infoadc10>";
$conteudoXML.= "</infoadc10>\n\t\t\t";
$conteudoXML.= "<infoadc11>";
$conteudoXML.= "</infoadc11>\n\t\t\t";
$conteudoXML.= "<infoadc12>";
$conteudoXML.= "</infoadc12>\n\t\t\t";
$conteudoXML.= "<infoadc13>";
$conteudoXML.= "</infoadc13>\n\t\t\t";
$conteudoXML.= "<infoadc14>";
$conteudoXML.= "</infoadc14>\n\t\t\t";
$conteudoXML.= "<infoadc15>";
$conteudoXML.= "</infoadc15>\n\t\t\t";
$conteudoXML.= "<infoadc16>";
$conteudoXML.= "</infoadc16>\n\t\t\t";
$conteudoXML.= "<infoadc17>";
$conteudoXML.= "</infoadc17>\n\t\t\t";
$conteudoXML.= "<infoadc18>";
$conteudoXML.= "</infoadc18>\n\t\t\t";
$conteudoXML.= "<infoadc19>";
$conteudoXML.= "</infoadc19>\n\t\t\t";
$conteudoXML.= "<infoadc20>";
$conteudoXML.= "</infoadc20>\n\t\t\t";
$conteudoXML.= "<data_validade>";
$conteudoXML.= "</data_validade>\n\t\t";
$conteudoXML.= "</destinatario>\n\t";
$conteudoXML.= "</emkt>\n";
$conteudoXML.= "</main>\n";
echo $conteudoXML;
$url = 'http://api.akna.com.br/emkt/int/integracao.php?User=$usuario&Pass=$codificado';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $conteudoXML );
curl_exec( $curl);
?>

O xml enviado e o retorno :

<?xml version="1.0" encoding="UTF-8"?>
<main>
	<emkt trans="11.05">
		<nome>TS - Cadastro Site</nome>
		<substituir>N</substituir>
		<destinatario codigo=''>
			<nome>Sanderson araujo</nome>
			<email>teste@teste.com.br</email>
			<---o></---o>
			<idade></idade>
			<data_nascimento></data_nascimento>
			<empresa></empresa>
			<cpf></cpf>
			<atividade></atividade>
			<profissao></profissao>
			<tipoend></tipoend>
			<endereco></endereco>
			<complemento></complemento>
			<bairro></bairro>
			<cidade></cidade>
			<estado></estado>
			<pais></pais>
			<cep></cep>
			<telefone1>1123232323</telefone1>
			<telefone2></telefone2>
			<telefone3></telefone3>
			<fax></fax>
			<infoadc1></infoadc1>
			<infoadc2></infoadc2>
			<infoadc3></infoadc3>
			<infoadc4></infoadc4>
			<infoadc5></infoadc5>
			<infoadc6></infoadc6>
			<infoadc7></infoadc7>
			<infoadc8></infoadc8>
			<infoadc9></infoadc9>
			<infoadc10></infoadc10>
			<infoadc11></infoadc11>
			<infoadc12></infoadc12>
			<infoadc13></infoadc13>
			<infoadc14></infoadc14>
			<infoadc15></infoadc15>
			<infoadc16></infoadc16>
			<infoadc17></infoadc17>
			<infoadc18></infoadc18>
			<infoadc19></infoadc19>
			<infoadc20></infoadc20>
			<data_validade></data_validade>
		</destinatario>
	</emkt>
</main>
<?xml version="1.0" encoding="UTF-8"?>
<AKNA>
  <FUNC TRANS="" KEY="0cb001e4cd7b9765cfcff8ca5181">
    <RETURN ID="11">XML em formato inválido
Error: Variável do XML está sem conteúdo ou não foi informada.</RETURN>
  </FUNC>
</AKNA><?xml version="1.0" encoding="UTF-8"?>
<AKNA>
  <FUNC TRANS="" KEY="0ae001148a0b5765cfcffaca5181">
    <RETURN ID="11">XML em formato inválido
Error: Variável do XML está sem conteúdo ou não foi informada.</RETURN>
  </FUNC>
</AKNA>

o erro :

 

XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada. XML em formato inválido Error: Variável do XML está sem conteúdo ou não foi informada.

 

Já não sei aonde alterar mais esse código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, o erro é claro! Tag sem conteúdo ou tag faltando. Da uma lida no documento sobre a API para ver como implementar e o que deve ser passado para a API.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado a todos pela ajuda! A integração entre o formulário do site e a plataforma de e-mail marketing está funcionando .

Estava passando os paramento pela url pelo método GET , mas na verdade era para passar pelo método POST.

 

Segue o código já corrigido .

<?php 
$nome = $_POST['tname'];
$email = $_POST['temail'];
$telefone = $_POST['tphone'];
$usuario ="email do usuario";
$senha = "senha do usuario";
$codificado = md5($senha);

$conteudoXML= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$conteudoXML.= "<main>\n\t";
$conteudoXML.= "<emkt trans=\"11.05\">\n\t\t";
$conteudoXML.= "<nome>";
$conteudoXML.= "TS - Cadastro Site";
$conteudoXML.= "</nome>\n\t\t";
$conteudoXML.= "<substituir>";
$conteudoXML.= "N";
$conteudoXML.= "</substituir>\n\t\t";
$conteudoXML.= "<destinatario codigo=''>\n\t\t\t";
$conteudoXML.= "<nome>";
$conteudoXML.= $nome = $_POST['tname'];
$conteudoXML.= "</nome>\n\t\t\t";
$conteudoXML.= "<email>";
$conteudoXML.= $email = $_POST['temail'];
$conteudoXML.= "</email>\n\t\t\t";
$conteudoXML.= "<telefone1>";
$conteudoXML.= $telefone = $_POST['tphone'];
$conteudoXML.= "</telefone1>\n\t\t";
$conteudoXML.= "</destinatario>\n\t";
$conteudoXML.= "</emkt>\n";
$conteudoXML.= "</main>\n";
$url = 'http://api.akna.com.br/emkt/int/integracao.php';
$curl = curl_init();
curl_setopt_array( $curl, array(
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_URL => $url,
	CURLOPT_POST => 1,
	CURLOPT_POSTFIELDS => array(
		User => $usuario,
		Pass => $codificado,
		XML => $conteudoXML
	)
) );
$resp = curl_exec($curl);
curl_setopt($curl, CURLOPT_URL, 'http://www.seusite.com.br/contato/cadastro_confirmado.php');
$resposta = curl_exec($curl);
curl_close($curl);
echo $resposta;
?>
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.