Erro ao consultar o Serviço de Status NFE 4

02/12/2019

6

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.
Responder

Post mais votado

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.
Responder

Mais Posts

03/12/2019

Bruno Pardim

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

03/12/2019

José Luis

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?
Responder

03/12/2019

Bruno Pardim

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.
Responder

03/12/2019

José Luis

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.
Responder

03/12/2019

Bruno Pardim

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
Responder

03/12/2019

José Luis

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?
Responder

03/12/2019

José Luis

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?
Responder

03/12/2019

José Luis

<?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?
Responder

03/12/2019

Bruno Pardim

<?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.
Responder

03/12/2019

José Luis

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.
Responder

03/12/2019

Bruno Pardim

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.
Responder