Ir para o conteúdo
rebortec

XML Web Service

Mensagens Recomendadas

rebortec

Boa Tarde Amigos,

Já à algum tempo que trabalho com php, mysql, no entanto agora criei uma pequena gestão de empresa dedicada à produção e pretendo conectar com um erp cujo representamos.

O mesmo tem um serviço xml o qual recebe e envia através do mesmo.

A minha dúvida é onde tenho informação didáctica para aprender como conectar com php o serviço xml do ERP.

Ou se alguém caso já tenha feito me possa dar umas dicas.

Editado por yoda

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rebortec

Boas eu tenho a documentação, só que a comunicação não é ler um ficheiro xml, é IP, Porta, User, Pass e depois injectar pra lá as tags XML como tenho na documentação como por exemplo:

<report accounts='21.1.1.1.03130' defs='s' status='n' retid='n' />

Tenho mini aplicação do ERP que posso testar cada pedido por exemplo:

Input: <report accounts='21.1.1.1.03130' defs='s' status='n' retid='n' />

Output:

<OpenDoc>
<Table nrRecs="0"/>
<Records TtRecs="0">
 <Account Nr="2111103130" NrRecs="0"/>
</Records>
</OpenDoc>

Consigo interpretar isto até porque no manual tenho a descrição de cada tag, não sei é como conectar, efectuar e interpretar os inputs e outputs com php.

Abraço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Não dá para ajudar muito mais sem conseguir testar o caso em particular, só testando é que se sabe o que o webservice retorna e o que precisa para ser acedido, Se analizares o código deles deves perceber o que o Curl precisa, a partir daí com 30 linhas de código consegues ligar-te e obter os dados.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rebortec

Boas,

Já tentei mil e uma vez com parametros diferentes no entanto no log do servidor não tem nenhuma entrada, e não imprime nem um erro.

Deixo o Código:

<?php $URL = "http://teste";
//Parametros
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_PORT, "0000");

 if (curl_errno($ch))
{
 // ver erros
	 echo curl_errno($ch) ;
	 echo curl_error($ch);
}
else
{
 //resposta
 $response = curl_exec($ch);
	 print_r($response);
	 curl_close($ch);
}
?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rebortec

Na minha opinião só pode ser alguma configuração do servidor php pois eles garantem que funciona.

Já verifiquei o ini e o curl está enable. :s

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rebortec

Boas, mais um passo yoda :) mas com erro lol Aqui Vai o meu código e a resposta do server:

Meu Código:

<?php
$xml_data = "<report accounts='21.1.1.10004' defs='s' status='n' retid='n' />";
$URL = "***";

       $ch = curl_init();

 curl_setopt($ch, CURLOPT_HTTPHEADER, Array("name:ADMIN"));
       curl_setopt($ch, CURLOPT_URL, $URL);
 curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLINFO_HEADER_OUT, true);
   curl_setopt($ch, CURLOPT_USERPWD, "***:***");
       curl_setopt($ch, CURLOPT_POSTFIELDS,  "xmlRequest=" . $xml_data);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
       $data = curl_exec($ch);
       curl_close($ch);


       print_r('<pre>');
       print_r($data);
       print_r('</pre>');

?>

Resposta:

HTTP/1.1 400 Bad Request
Host: ###
Content-Type: text/html; charset=iso-8859-15
Content-Length: 30
name

Log do Server:

Host 213.22.**.** não está a cumprir o protocolo: name

No Código fornecido por eles existe:

public function doLogin($host, $port, $user, $pass) {

 if(empty($host)) { throw new Exception("invalid host"); }
 if(empty($port)) { throw new Exception("invalid port"); }
 if(empty($user)) { throw new Exception("empty user"); }
 if(empty($pass)) { throw new Exception("empty pass"); }

 $this->host = $host;

 parent::setParameter(CURLOPT_PORT  , $port);
 parent::setParameter(CURLOPT_HEADER, 1);
 parent::setParameter(CURLOPT_POST  , 0);

 $this->setHeader("Connection", "Keep-Alive");
 $this->setHeader("Keep-Alive", "10");
 $this->setHeader("name"      , $user);
 $this->setHeader("XMLIndent" , "1");

 $response = parent::doRequest("login");
 if(empty($response)) {
  throw new Exception("empty login response");
 }

 $challenge = $this->getChallenge($response);
 if(empty($challenge)) {
  throw new Exception("login challenge not found");
 }

 $this->setHeader("digest", $this->calculateChallenge($user, $pass, $challenge));

 $this->removeHeader("name");
 $this->removeHeader("XMLIndent");

 parent::setParameter(CURLOPT_HEADER, 0);
 parent::setParameter(CURLOPT_POST, 1);
}

Ai está o setHeader("name" , $user);

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.