Erro ao consultar o Serviço de Status NFE 4
02/12/2019
0
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
Post mais votado
03/12/2019
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.
Bruno Pardim
Mais Posts
03/12/2019
Bruno Pardim
03/12/2019
José Luis
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?
03/12/2019
Bruno Pardim
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.
03/12/2019
José Luis
03/12/2019
Bruno Pardim
Legal cara, como esses serviços de tempos em tempos tem seus esquemas atualizados é uma boa validar utilizando os .xsd
03/12/2019
José Luis
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?
03/12/2019
José Luis
<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?
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?
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.
03/12/2019
José Luis
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.
03/12/2019
Bruno Pardim
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.