Ir para conteúdo

Arquivado

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

7Canim

Enviar dados via SOAP

Recommended Posts

Bom dia

 

Estou desenvolvendo um sistema que faça conexão com o SISBOV e algumas funções estão dando erros.

 

Estou testando vários códigos diferentes e dão diferentes erros, mas no suapUi está funcionando normal

 

Citar

 

<element name="incluirPropriedade">
<complexType>
<sequence>
<element name="usuario" type="xsd:string"/>
<element name="senha" type="xsd:string"/>
<element name="_nirf" type="xsd:string"/>
<element name="_incra" type="xsd:string"/>
<element name="_tipoPropriedade" type="xsd:long"/>
<element name="_nomePropriedade" type="xsd:string"/>
<element name="_acessoFazenda" type="xsd:string"/>
<element name="_distanciaSedeMunicipio" type="xsd:int"/>
<element name="_orientacaoLatitude" type="xsd:string"/>
<element name="_grauLatitude" type="xsd:int"/>
<element name="_minutoLatitude" type="xsd:int"/>
<element name="_segundoLatitude" type="xsd:int"/>
<element name="_orientacaoLongitude" type="xsd:string"/>
<element name="_grauLongitude" type="xsd:int"/>
<element name="_minutoLongitude" type="xsd:int"/>
<element name="_segundoLongitude" type="xsd:int"/>
<element name="_area" type="xsd:long"/>
<element name="_logradouro" type="xsd:string"/>
<element name="_bairro" type="xsd:string"/>
<element name="_cep" type="xsd:string"/>
<element name="_codMunicipio" type="xsd:string"/>
<element name="_enderecoCorrespondenciaLogradouro" type="xsd:string"/>
<element name="_enderecoCorrespondenciaBairro" type="xsd:string"/>
<element name="_enderecoCorrespondenciaCep" type="xsd:string"/>
<element name="_enderecoCorrespondenciaCodMunicipio" type="xsd:string"/>
<element name="_telefoneResidencial" type="xsd:string"/>
<element name="_faxResidencial" type="xsd:string"/>
<element name="_nrTelefoneContato" type="xsd:string"/>
<element name="_nrFaxContato" type="xsd:string"/>
</sequence>
</complexType>
</element>

 

 

Esse é o XML que eu preciso cadastrar

 

 

<?php

try {
    $wsdl_url = 'http://homolog.agricultura.gov.br/sisbov_ws_nova_hom/';
    $client = new SOAPClient($wsdl_url);
    $params = array(
        'usuario' => "XXXXXXXXXX",
        'senha' => "XXXXXXXXXX",
        'nirf' => "XXXXXXX",
        'incra' => "XXXXXXXXXX",
        'tipoPropriedade' => "X",
        'nomePropriedade' => "XXXXXXXXXX",
        'acessoFazenda' => "XXXXXXXXXX",
        'distanciaSedeMunicipio' => "XXXXXXXXXX",
        'orientacaoLatitude' => "X",
        'grauLatitude' => "XX",
        'minutoLatitude' => "XX",
        'segundoLatitude' => "X",
        'orientacaoLongitude' => "X",
        'grauLongitude' => "XX",
        'minutoLongitude' => "XX",
        'segundoLongitude' => "XX",
        'area' => "XXXXXXXXXX",
        'logradouro' => "XXXXXXXXXX",
        'bairro' => "XXXXXXXXXX",
        'cep' => "XXXXXXXXXX",
        'codMunicipio' => "XXXXXXXXXX",
        'enderecoCorrespondenciaLogradouro' => "XXXXXXXXXX",
        'enderecoCorrespondenciaBairro' => "XXXXXXXXXX",
        'enderecoCorrespondenciaCep' => "XXXXXXXXXX",
        'enderecoCorrespondenciaCodMunicipio' => "XXXXXXXXXX",
        'telefoneResidencial' => "",
        'faxResidencial' => "",
        'nrTelefoneContato' => "XXXXXXXXXX",
        'nrFaxContato' => "XXXXXXXXXX",
    );
    $return = $client->incluirPropriedade($params);
    print_r($return);
} catch (Exception $e) {
    echo "Exception occured: " . $e;
}

Tanto o incluirPropriedade como o alterarPropriedade dá errado nos 4 códigos diferentes que eu tentei.

Nesse código dá o erro ERR_CONNECTION_RESET (estou usando Google Chrome)

 

<?php 
ini_set("soap.wsdl_cache_enabled", "0"); // Desabilita Cache do WSDL

$config['soap']['usuario']="XXXXXXXXXXXX"; //Nome do Usuario == CNPJ da Certificadora
$config['soap']['senha']="XXXXXXXXXXXX"; //Senha == Senha do FTP
$config['soap']['uri']="http://servicosWeb.sisbov.mapa.gov.br"; //NameSpace do WSDL
$config['soap']['location']='http://homolog.agricultura.gov.br/sisbov_ws_nova_hom/';//ENDERECO DO WSDL DO WEBSERVICES
$client = new SoapClient(null, array('uri' => $config['soap']['uri'], 'location' => $config['soap']['location'])); //Cria o Cliente de WebServices

try { //Tente Executar a Chamada
//Object incluirPropriedade(string usuario, string senha, string nirf, string incra, long TipoPropriedade, string nome, string roteiroDeAcesso, int distanciaSedeMunicipio, string orientacaoLatitude, int grauLatitude, int minutoLatitude, int segungaLatitude, string orientacaoLongitude, int grauLongitude, int minutoLongitude, int segundoLongitude, long area, string endereco, string bairro, string cep, string codMunicipio, string EnderecoCorres, string bairroCorres, string cepCorres, string codMunicipio, string telefoneResidencial, string faxResidencial, string telefoneContado, string faxContato);
        $retorno = $client->incluirPropriedade($config['soap']['usuario'], $config['soap']['senha'], 'XXXXXXXXX', '', 1, 'Fazendinha do Bita', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 4500, 'S', 20, 29, 0, 'W', 51, 54, 11, 1321800, 'No meio do mato', '...', '79600000', '5008305', 'Rua qualquer', 'Centro', '79600000', '5008305', '', '', '12345678', '12345678'); //Chama a funcao no WebServices
        print_r($retorno); //Exibe Resultado na Tela
} catch (SoapFault $exception) { //Em caso de erros
        echo $exception; //Exibe erros na tela
}

Nesse código, o XML pede long, mas o PHP não tem long então dá erro de conversão 

 

O erro:

 

SoapFault exception: [soapenv:Server.userException] org.xml.sax.SAXException: Bad types (int -> long) in C:\xampp\htdocs\TestePHP\alterar\alterarPropriedade.php:13 Stack trace: #0 C:\xampp\htdocs\TestePHP\alterar\alterarPropriedade.php(13): SoapClient->__call('alterarPropried...', Array) #1 {main}

 

<?php

$url = 'http://homolog.agricultura.gov.br/sisbov_ws_nova_hom/';
$client = new SoapClient($url);

$xmlr = new SimpleXMLElement('<incluirPropriedade></incluirPropriedade>');
$xmlr->addChild('usuario', 'XXXXXXXXXXXXXXX');
$xmlr->addChild('senha', 'XXXXXXXXXXX');
$xmlr->addChild('nirf', 'XXXXXXXXX');
$xmlr->addChild('incra', 'XXXXXXXXXXXX');
$xmlr->addChild('tipoPropriedade', '1');
$xmlr->addChild('nomePropriedade', 'Fazendinha do Bita');
$xmlr->addChild('acessoFazenda', 'XXXXXXXXXXXXXXXX');
$xmlr->addChild('distanciaSedeMunicipio', '4500');
$xmlr->addChild('orientacaoLatitude', 'S');
$xmlr->addChild('grauLatitude', '20');
$xmlr->addChild('minutoLatitude', '29');
$xmlr->addChild('segundoLatitude', '0');
$xmlr->addChild('orientacaoLongitude', 'W');
$xmlr->addChild('grauLongitude', '51');
$xmlr->addChild('minutoLongitude', '54');
$xmlr->addChild('segundoLongitude', '11');
$xmlr->addChild('area', '1321800');
$xmlr->addChild('logradouro', 'No meio do mato');
$xmlr->addChild('bairro', '...');
$xmlr->addChild('cep', '79600000');
$xmlr->addChild('codMunicipio', '5008305');
$xmlr->addChild('enderecoCorrespondenciaLogradouro', 'Rua qualquer');
$xmlr->addChild('enderecoCorrespondenciaBairro', 'Centro');
$xmlr->addChild('enderecoCorrespondenciaCep', '79600000');
$xmlr->addChild('enderecoCorrespondenciaCodMunicipio', '5008305');
$xmlr->addChild('telefoneResidencial', '');
$xmlr->addChild('faxResidencial', '');
$xmlr->addChild('nrTelefoneContato', '12345678');
$xmlr->addChild('nrFaxContato', '12345678');

$params = new stdClass();
$params->xml = $xmlr->asXML();

$result = $client->incluirPropriedade($params);

Nesse código dá o mesmo erro ERR_CONNECTION_RESET (estou usando Google Chrome)

 

 

<FONTES!!!> O primeiro código é do netbeans mesmo, o segundo tirei de um outro desenvolvedor SISBOV, e o terceiro adaptei da internet (não achei o tópico) 

 

 

Já tentei desabilitar esse erro do Chorme, mas não consegui

 

Se alguém souber como me ajudar, por favor

 

Desde já, obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça primeiro um teste utilizando o SoapUI, veja se tudo ocorre conforme o esperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$xml = <<<XML
<soapenv:Envelope ........>
<soapenv:Header/>
<soapenv:Body>
    <ser:Teste>
    <ser:usuario>Valores</ser:usuario>
    <ser:senha>Valores</ser:senha>
    <ser:numeroSolicitacao>Valores</ser:numeroSolicitacao>
    <ser:cpfProdutor></ser:cpfProdutor>
    <ser:cnpjProdutor>Valores</ser:cnpjProdutor>
    <ser:idPropriedadeDestino>Valores</ser:idPropriedadeDestino>
    <ser:tipoIdentificacao>Valores</ser:tipoIdentificacao>

    </ser:Teste>
</soapenv:Body>
</soapenv:Envelope>
XML;

$errno = 0;
$error = null;

$fp = fsockopen( 'http://homolog.agricultura.gov.br' , 80 , $errno , $error );

if ( is_resource( $fp ) ){
    $resp = null;
    $post = "POST / HTTP/1.1\r\n";
    $post .= "Host: http://homolog.agricultura.gov.br\r\n";
    $post .= "SOAPAction: \r\n";
    $post .= "Content-Type: text/xml; charset=utf-8\r\n";
    $post .= sprintf( "Content-Length: %d\r\n\r\n" , strlen( $xml ) );
    $post .= $xml;

    fwrite( $fh , $post , strlen( $xml ) );

    while ( !feof( $fp ) ){
    $resp .= fgets( $fp , 1024 );
    }

    var_dump( $rest );

    fclose( $fp );
} else {
    echo 'Opz[ ' , $errno , ' ] -> ' , $error;
}

Estou com o mesmo problemas em outras funções. Testei esse código na função inventariarSolicitacaoNumeracao e deu o erro:

Citar

 

Warning: fsockopen(): unable to connect to http://homolog.agricultura.gov.br:80 (Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?) in C:\xampp\htdocs\TestePHP\inventariar\inventariarSolicitacaoNumeracao.php on line 132
Opz[ 0 ] -> Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?

 


 

 

O fato de eu estar usando a porta 81 interfere? Preciso curar outro arquivo XML com esse XML? 

 

Como eu resolvo esse erro?

 

Desde já, obrigada 

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa tudo bem, bem pelo que deu para entender você trabalha com certificação de gado ou em alguma propriedade que quer incluir animais via Web service do ministério da agricultura, realmente seu código olhando por cima parece correto, o problema que se não me engano a URL não é essa ai, afinal ele não consegue abrir um Socket nessa url, já tentou http://servicosWeb.sisbov.mapa.gov.br com as credenciais ai da sua certificadora ou propriedade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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