Erro ao consultar o Serviço de Status NFE 4

PHP

NF-e

02/12/2019

Bom dia. Estou tentando consultar os serviços da Sefaz RS e não estou conseguindo. Sempre da rejeição. Sou novo nos webservices, e quero aprender o que for preciso para montar meu próprio emissor do zero.

Código:

$local_cert = 'Certificado.pem';
        $passwd = '1234';
        $ws = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl';  
        $endpoint = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx';  

        $options = array
        (
            'location' => $endpoint,
            'keep_alive' => true,
            'trace' => true,
            'local_cert' => $local_cert,
            'passphrase' => $passwd,
            'cache_wsdl' => WSDL_CACHE_NONE,
            'soap_version' => SOAP_1_2
        );    

        $client = new SoapClient($ws, $options);
        $function = 'nfeStatusServicoNF';

        $options = [];
        $arguments['consStatServ'] = '';
        $arguments['nfeDadosMsg'] = array('xServ' => 'STATUS', 'cUF' => '43', 'tpAmb' => '2', 'versao' => 'RS201805211008');

        $result = $client->__soapCall($function, $arguments, $options);
        $functions = $client->__getFunctions();

        header("Content-type: text/xml");
        echo $result->any;


Erro:

<retConsStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
<tpAmb>2</tpAmb>
<verAplic>RS201805211008</verAplic>
<cStat>225</cStat>
<xMotivo>Rejeicao: Falha no Schema XML do lote de NFe</xMotivo>
<cUF/>
<dhRecbto>2019-11-29T10:18:08-03:00</dhRecbto>
</retConsStatServ>


Tentei assim também:
$local_cert = 'Certificado.pem';
        $passwd = '1234';
        $ws = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl';  
        $endpoint = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx';  

        $options = array
        (
            'location' => $endpoint,
            'keep_alive' => true,
            'trace' => true,
            'local_cert' => $local_cert,
            'passphrase' => $passwd,
            'cache_wsdl' => WSDL_CACHE_NONE,
            'soap_version' => SOAP_1_2
        );  

        $client = new SoapClient($ws, $options);
        $function = 'nfeStatusServicoNF';

        $nfeDadosMsg = 
        '<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
            <xServ>STATUS</xServ>
            <cUF>43</cUF>
            <tpAmb>2</tpAmb>
        </consStatServ>';

        $nfeCabecMsg = '<versao>4.0</versao>';

        $options = [];
        $arguments['nfeDadosMsg'] = $nfeDadosMsg;
        $arguments['nfeCabecMsg'] = $nfeCabecMsg;

        $result = $client->__soapCall($function, $arguments, $options);
        $functions = $client->__getFunctions();

        header("Content-type: text/xml");
        echo $result->any;


Tentei assim também:

    $local_cert = 'Certificado.pem';
$passwd = '1234';
$ws = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx?wsdl';  
$endpoint = 'https://nfe-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx';  

$options = array
(
    'location' => $endpoint,
    'keep_alive' => true,
    'trace' => true,
    'local_cert' => $local_cert,
    'passphrase' => $passwd,
    'cache_wsdl' => WSDL_CACHE_NONE,
    'soap_version' => SOAP_1_2
);  

$client = new SoapClient($ws, $options);
$function = 'nfeStatusServicoNF';

$xml = 
'<consStatServ>     
    <tpAmb>2</tpAmb>
    <cUF>43</cUF>
    <xServ>STATUS</xServ>
    <versao>PL_006f</versao>
</consStatServ>';

$res = $client->nfeStatusServicoNF($xml);

header("Content-type: text/xml");
echo $res->any;


Todas a formas que eu tento, ou da erro de Shema.
José Luis

José Luis

Curtidas 0

Melhor post

Bruno Pardim

Bruno Pardim

03/12/2019

Cara, tem algo errado no seu xml de envio, consegue me enviar exatamente o que está sendo gerado, junto com o "envelopamento" ?


O correto seria:


<?xml version="1.0" encoding="UTF-8"?>
<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
   <tpAmb>2</tpAmb>
   <cUF>35</cUF>
   <xServ>STATUS</xServ>
</consStatServ>



Esse site é muito útil para ajudar nas validações de XML(https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx), o ideal é você fazer sua aplicação validar seus xml pelos esquemas disponibilizados pela receita.
GOSTEI 1

Mais Respostas

Bruno Pardim

Bruno Pardim

02/12/2019

Cara, tem algo errado no seu xml de envio, consegue me enviar exatamente o que está sendo gerado, junto com o "envelopamento" ?
GOSTEI 0
José Luis

José Luis

02/12/2019

Cara, tem algo errado no seu xml de envio, consegue me enviar exatamente o que está sendo gerado, junto com o "envelopamento" ?


O correto seria:


<?xml version="1.0" encoding="UTF-8"?>
<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
   <tpAmb>2</tpAmb>
   <cUF>35</cUF>
   <xServ>STATUS</xServ>
</consStatServ>



Esse site é muito útil para ajudar nas validações de XML(https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx), o ideal é você fazer sua aplicação validar seus xml pelos esquemas disponibilizados pela receita.


O certificado que eu usava venceu. Vou tentar conseguir outro pra pegar o xml. Pode ser algum erro no header do soap?
GOSTEI 0
Bruno Pardim

Bruno Pardim

02/12/2019

Cara, tem algo errado no seu xml de envio, consegue me enviar exatamente o que está sendo gerado, junto com o "envelopamento" ?


O correto seria:


<?xml version="1.0" encoding="UTF-8"?>
<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
   <tpAmb>2</tpAmb>
   <cUF>35</cUF>
   <xServ>STATUS</xServ>
</consStatServ>



Esse site é muito útil para ajudar nas validações de XML(https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx), o ideal é você fazer sua aplicação validar seus xml pelos esquemas disponibilizados pela receita.


O certificado que eu usava venceu. Vou tentar conseguir outro pra pegar o xml. Pode ser algum erro no header do soap?


Realmente você precisa de um certificado válido para poder se identificar na hora de fazer o soap, porém seu xml está inválido tbm, tenta montar um desta forma que exemplifiquei acima para consultar o status, porque para consulta de status não é preciso assinar o xml. Faz um tempo que não trabalho com nfe, talvez se o esquema do seu xml estiver correto ele critique o certificado inválido.
GOSTEI 1
José Luis

José Luis

02/12/2019

Sim, ele da erro na hora de chamar a função. Mas ainda hoje consigo outro certificado. Quero muito fazer minha própria API de nfe. Se eu conseguir fazer bem a parte de status acho que o restou consigo também.
GOSTEI 0
Bruno Pardim

Bruno Pardim

02/12/2019

Sim, ele da erro na hora de chamar a função. Mas ainda hoje consigo outro certificado. Quero muito fazer minha própria API de nfe. Se eu conseguir fazer bem a parte de status acho que o restou consigo também.


Legal cara, como esses serviços de tempos em tempos tem seus esquemas atualizados é uma boa validar utilizando os .xsd
GOSTEI 0
José Luis

José Luis

02/12/2019

Sim, ele da erro na hora de chamar a função. Mas ainda hoje consigo outro certificado. Quero muito fazer minha própria API de nfe. Se eu conseguir fazer bem a parte de status acho que o restou consigo também.


Legal cara, como esses serviços de tempos em tempos tem seus esquemas atualizados é uma boa validar utilizando os .xsd


Como eu poderia fazer isso cara?
GOSTEI 0
José Luis

José Luis

02/12/2019

Cara, tem algo errado no seu xml de envio, consegue me enviar exatamente o que está sendo gerado, junto com o "envelopamento" ?


<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4">
<env:Body>
<ns1:nfeDadosMsg/>
</env:Body>
</env:Envelope>


Ele está enviando isso. Está errado mesmo. Mas por que?
GOSTEI 0
José Luis

José Luis

02/12/2019

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4">xml</nfeDadosMsg>
  </soap12:Body>
</soap12:Envelope>


Assim que a sefaz pede. Mas como posso fazer que fique assim com o soap?
GOSTEI 0
Bruno Pardim

Bruno Pardim

02/12/2019

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4">xml</nfeDadosMsg>
  </soap12:Body>
</soap12:Envelope>


Assim que a sefaz pede. Mas como posso fazer que fique assim com o soap?


Você tem que ver como funciona o soap no php e a forma com que você está fazendo xml para ajusar isso, para colocar os xmls e tudo, vai ter que ver como funciona no php mesmo, e ajustar tag por tag, até ver o padrão, porque para criar o xml da nfe por exemplo a estrutura é bem mais completa que essa.
GOSTEI 0
José Luis

José Luis

02/12/2019

Você tem que ver como funciona o soap no php e a forma com que você está fazendo xml para ajusar isso, para colocar os xmls e tudo, vai ter que ver como funciona no php mesmo, e ajustar tag por tag, até ver o padrão, porque para criar o xml da nfe por exemplo a estrutura é bem mais completa que essa.


Sim sim, eu sei que vai ser mais complicada. Mas você não tem um ponto de partida pra mim seguir. Por que ja pesquisei de tudo e não consigo.
GOSTEI 0
Bruno Pardim

Bruno Pardim

02/12/2019

Você tem que ver como funciona o soap no php e a forma com que você está fazendo xml para ajusar isso, para colocar os xmls e tudo, vai ter que ver como funciona no php mesmo, e ajustar tag por tag, até ver o padrão, porque para criar o xml da nfe por exemplo a estrutura é bem mais completa que essa.


Sim sim, eu sei que vai ser mais complicada. Mas você não tem um ponto de partida pra mim seguir. Por que ja pesquisei de tudo e não consigo.


Quando trabalhei com nfe, utilizei c#, nunca fiz nada em php relacionado a nfe, mas procura sobre serialização de objeto e deserialização, deve ter algo do tipo em php. Um exemplo nos sistemas de nota fiscal que desenvolvia, eu tinha uma classe para tudo, para qualquer layput de xml e apartir desta classe eu serializava a classe e transformava ela num xml exato que era só eu colocar no body do soap e enviar.

No php deve ter recursos que você consegue criar um xml a partir de uma classe também, definir atributos e tudo.
GOSTEI 1
POSTAR