Boa tarde Luiz, li bastante suas respostas em outros questionamentos, estou utilizando um código que você postou aqui no forum e estou recebendo o erro: E160, Cabecalho deve obedecer a um schema válido.
Onde posso estar errando?
<?php
$arquivo = 'xml/consulta.xml';
$xml = htmlentities(file_get_contents($arquivo));
$cabecalho = htmlentities('<cabecalho versao="2.04" xmlns="http://www.abrasf.org.br/nfse.xsd"><versaoDados>2.04</versaoDados></cabecalho>');
$envelope =
'<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://nfse.abrasf.org.br">
<soapenv:Header/>
<soapenv:Body>
<ConsultarNfseServicoPrestado>
<nfseCabecMsg>'.$cabecalho.'</nfseCabecMsg>
<nfseDadosMsg>'.$xml.'</nfseDadosMsg>
</ConsultarNfseServicoPrestado>
</soapenv:Body>
</soapenv:Envelope>';
$url = 'https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx';
$headers = array(
"Content-type: text/xml; charset=utf-8",
"SOAPAction: http://nfse.abrasf.org.br/ConsultarNfseServicoPrestado",
"Content-length: ".strlen($envelope),
);
//echo $envelope;
//exit;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $envelope);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//echo $envelope;exit;
// converting
$html = utf8_decode(curl_exec($ch));
file_put_contents("$arquivo.ret", $html);
curl_close($ch);
preg_match_all('/<outputXML>(.*?)<\/outputXML>/s', $html, $matches);
$response = html_entity_decode(count($matches)&&count($matches[1])?$matches[1][0]:$html);
echo "<pre>$response</pre>";
?>
Aqui é o arquivo que estou enviando!
<?xml version="1.0" encoding="UTF-8"?>
<ConsultarNfseServicoPrestadoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
<Prestador>
<CpfCnpj>
<Cnpj>08378676000125</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>0748143200193</InscricaoMunicipal>
</Prestador>
<PeriodoEmissao>
<DataInicial>2022-10-01</DataInicial>
<DataFinal>2022-10-06</DataFinal>
</PeriodoEmissao>
<Pagina>1</Pagina>
</ConsultarNfseServicoPrestadoEnvio>
1 curtida
luizvaz
Outubro 11, 2022, 12:58pm
2
Vocês está enviando realmente para Brasília?
Se for, acho que não é esse modelo.
Até onde eu me lembre é o mesmo modelo da Receita Federal para envio de Notas de Produtos.
luizvaz:
onde eu me le
Bom dia Luiz, obrigado pelo seu retorno, tivemos uma informação da prefeitura que usaria a versão Abrasf 2.04 http://www.abrasf.org.br/pagina_publica.php , peguei os arquivos exemplos, esse arquivo que postei é de busca de notas emitidas…
Esse é o webservice que enviaram pra gente!
https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx
Agora que e entendi o que você quis dizer, então, a partir de 01/11/2022 Brasília vai começar a usar a NFS-e da NOTA CONTROL.
Ah bom!
Eu tenho esse código em C#
:
public string SendRequest(string data, string action)
{
try
{
WebRequestHandler handler = new WebRequestHandler();
if (this.Certificado != null)
handler.ClientCertificates.Add(this.Certificado);
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.ExpectContinue = false;
client.DefaultRequestHeaders.Add("Accept", "*/*");
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/soap+xml"));
//client.DefaultRequestHeaders.Add("SOAPAction", action);
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.8806)");
client.DefaultRequestHeaders.TransferEncodingChunked = null;
StringContent queryString = new StringContent(data, Encoding.UTF8, "text/xml");
HttpResponseMessage response = client.PostAsync(new Uri(this.Url), queryString).Result;
String responseValue = string.Empty;
Stream responseStream = null;
/*
if (response != null)
{
//response.EnsureSuccessStatusCode();
this.cLastCode = response.StatusCode;
Task task = response.Content.ReadAsStringAsync().ContinueWith(t =>
{
responseValue = t.Result;
});
task.Wait();
};
*/
if (response != null)
{
Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
responseStream = t.Result;
});
task.Wait();
string encoding = String.Join(",", response.Content.Headers.ContentEncoding);
if (response.Content.Headers.ContentEncoding.Contains("gzip"))
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
else if (response.Content.Headers.ContentEncoding.Contains("deflate"))
responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
using (StreamReader streamReader = new StreamReader(responseStream))
{
responseValue = streamReader.ReadToEnd();
}
}
return responseValue;
}
catch (Exception ex)
{
throw ex;
}
}
public string ConsultarLoteRps(string CNPJ, string IM, string Protocolo)
{
String NfseDados = String.Format(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<ConsultarLoteRpsEnvio xmlns=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_lote_rps_envio.xsd\" " +
" xmlns:tc=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd\">" +
"<Prestador>" +
"<tc:CpfCnpj>" +
"<tc:Cnpj>{0}</tc:Cnpj>" +
"</tc:CpfCnpj>" +
"<tc:InscricaoMunicipal>{1}</tc:InscricaoMunicipal>" +
"</Prestador>" +
"<Protocolo>{2}</Protocolo>" +
"</ConsultarLoteRpsEnvio>", CNPJ, IM, Protocolo);
String s = String.Format(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<S:Body>" +
"<ConsultarLoteRps xmlns=\"http://www.issnetonline.com.br/webservice/nfd\">" +
"<xml>{0}</xml>" +
"</ConsultarLoteRps>" +
"</S:Body></S:Envelope>",
NfseDados);
File.WriteAllText(cFileName.Replace(".xml", ".soap.xml"), s);
return this.SendRequest(s, "http://www.issnetonline.com.br/webservice/nfd/ConsultarLoteRps");
}
public String ConsultarNfsePorRps(String CNPJ, String IM, String RPS, String SERIE)
{
String NfseDados = String.Format(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<ConsultarNfseRpsEnvio xmlns=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/servico_consultar_nfse_rps_envio.xsd\" " +
" xmlns:tc=\"http://www.issnetonline.com.br/webserviceabrasf/vsd/tipos_complexos.xsd\">" +
"<IdentificacaoRps>" +
"<tc:Numero>{0}</tc:Numero>" +
"<tc:Serie>{1}</tc:Serie>" +
"<tc:Tipo>1</tc:Tipo>" +
"</IdentificacaoRps>" +
"<Prestador>" +
"<tc:CpfCnpj><tc:Cnpj>{2}</tc:Cnpj></tc:CpfCnpj>" +
"<tc:InscricaoMunicipal>{3}</tc:InscricaoMunicipal>" +
"</Prestador>" +
"</ConsultarNfseRpsEnvio>", RPS, SERIE, CNPJ, IM);
String s = String.Format(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<soap:Body>" +
"<ConsultarNFSePorRPS xmlns =\"http://www.issnetonline.com.br/webservice/nfd\">" +
"<xml>{0}</xml>" +
"</ConsultarNFSePorRPS>" +
"</soap:Body>" +
"</soap:Envelope>",
NfseDados);
File.WriteAllText(cFileName.Replace(".xml", ".soap.xml"), s);
return this.SendRequest(s, "http://www.issnetonline.com.br/webservice/nfd/ConsultarNFSePorRPS");
}
Pelos schemas que eles passaram parece ser outra versão/padrão, relataram no e-mail ser Abrasf 2.04, que seria esse xml que coloquei no primeiro post. Eu valido a estrutura no XSD e envio ao wsdl e mesmo assim retorna E160, Cabecalho deve obedecer a um schema válido…
De todo modo, vou tentar enviar essa versão que tu mostrou aqui, se tiver sucesso eu retorno. Abraços, e obrigado pela atenção!
Dê uma olhada nesse tópico abaixo.
Também é no padrão 2.04:
Boa tarde, a prefeitura de Ituiutaba-MG acabou de mudar pra SMARAPD e não temos informações de nada, gostaria de saber se algum ja fez e pode ajudar com alguns modelos de utilização,
envelope, crul, cabeçalho, no aguardo.
Alguém conseguiu resolver esse problema? Estou fazendo a integração de Brasília com ABRASF 2.04, e estou no mesmo erro do colega que criou o tópico.
Endpoint: https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx
Envelope:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:nfse="http://nfse.abrasf.org.br">
<soapenv:Header/>
<soapenv:Body>
<nfse:ConsultarNfseServicoPrestado>
<nfseCabecMsg>
<cabecalho versao="2.04">
<versaoDados>2.04</versaoDados>
</cabecalho>
</nfseCabecMsg>
<nfseDadosMsg>
<ConsultarNfseServicoPrestadoEnvio
xmlns="http://www.abrasf.org.br/nfse.xsd">
<Prestador>
<CpfCnpj>
<Cnpj>11111111111111</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>1111111</InscricaoMunicipal>
</Prestador>
<NumeroNfse>1</NumeroNfse>
<PeriodoCompetencia>
<DataInicial>2006-08-19-03:00</DataInicial>
<DataFinal>2009-05-16</DataFinal>
</PeriodoCompetencia>
<Pagina>1</Pagina>
</ConsultarNfseServicoPrestadoEnvio>
</nfseDadosMsg>
</nfse:ConsultarNfseServicoPrestado>
</soapenv:Body>
</soapenv:Envelope>
O nfseCabecMsg está sendo validado certinho, o nfseDadosMsg não. A mensagem retornada aqui é:
ConsultarNfseServicoPrestado deve obedecer a um schema válido.
Qualquer ajuda, agradeço imensamente
(estou usando CNPJ e Inscrição municipal de verdade, substituí por 1111111111 só para postar aqui no tópico.)
Você não pode mandar assim não.
Tem que converter para TEXTO.
O conteúdo do nfseCabecMsg e nfseDadosMsg.
A saber, consegui resolver. O problema é que esse webservice não está seguindo o padrão 2.04 à risca que está descrito no XSD.
Esse webservice em questão tem 2 tags a mais, Pedido e Signature. Segue exemplo:
Endpoint: https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx
Método: ConsultarNfseServicoPrestado
Body (sem o envelope):
<ConsultarNfseServicoPrestadoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
<Pedido>
<Prestador>
<CpfCnpj>
<!--Obrigatório CPF ou CNPJ. Não enviar ambas as tags. -->
<Cnpj>?</Cnpj>
<Cpf>?</Cpf>
</CpfCnpj>
<!-- Obrigatório -->
<InscricaoMunicipal>?</InscricaoMunicipal>
</Prestador>
<!-- Obrigatória uma das três opções. Informar NumeroNfse OU PeriodoEmissao OU PeriodoCompetencia. Não enviar mais de 1.-->
<NumeroNfse>?</NumeroNfse>
<PeriodoEmissao>
<DataInicial>?</DataInicial>
<DataFinal>?</DataFinal>
</PeriodoEmissao>
<PeriodoCompetencia>
<DataInicial>?</DataInicial>
<DataFinal>?</DataFinal>
</PeriodoCompetencia>
<!-- Opcional -->
<Tomador>
<CpfCnpj>
<!-- CPF ou CNPJ. Não enviar ambas as tags. -->
<Cnpj>?</Cnpj>
<Cpf>?</Cpf>
</CpfCnpj>
<InscricaoMunicipal>?</InscricaoMunicipal>
</Tomador>
<!-- Opcional -->
<Intermediario>
<CpfCnpj>
<!-- CPF ou CNPJ. Não enviar ambas as tags. -->
<Cnpj>?</Cnpj>
<Cpf>?</Cpf>
</CpfCnpj>
<InscricaoMunicipal>?</InscricaoMunicipal>
</Intermediario>
<!-- Obrigatório -->
<Pagina>?</Pagina>
</Pedido>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<!-- Assinatura nos moldes que conhecemos -->
</Signature>
</ConsultarNfseServicoPrestadoEnvio>
Bom dia.
Amigo você conseguiu fazer a chamada com sucesso ao webservice
https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx
Eu não consigo de jeito nenhum, sempre dá erro E160, Cabecalho deve obedecer a um schema válido. O erro inicial lá do nosso amigo Douglas.
Poderia me passar como está o seu cabeçalho?
Desde já, obrigado.
Fiz um curl de exemplo que funciona:
curl --request POST \
--url https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx \
--header 'Content-Type: text/xml' \
--header 'SOAPAction: http://nfse.abrasf.org.br/ConsultarNfseServicoPrestado' \
--data '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfse="http://nfse.abrasf.org.br">
<SOAP-ENV:Body>
<nfse:ConsultarNfseServicoPrestado>
<nfseCabecMsg><cabecalho versao="1.00" xmlns="http://www.abrasf.org.br/nfse.xsd"><versaoDados>2.04</versaoDados></cabecalho></nfseCabecMsg>
<nfseDadosMsg>
<ConsultarNfseServicoPrestadoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
<Pedido>
<Prestador>
<CpfCnpj>
<Cnpj>11111111111111</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>1111111111</InscricaoMunicipal>
</Prestador>
<NumeroNfse>123</NumeroNfse>
<Pagina>1</Pagina>
</Pedido>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>3232</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>werwerew</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>rwerewrwerwe</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</ConsultarNfseServicoPrestadoEnvio>
</nfseDadosMsg>
</nfse:ConsultarNfseServicoPrestado>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>'
1 curtida
luizvaz
Outubro 25, 2022, 3:52pm
13
peuamorim:
issnetonline
Segue em anexo o arquivo .INI do ACBR
ISSNet.txt (6,4,KB)
O Cabeçalho pode ser enviado dessa forma:
<cabecalho versao="1.00" xmlns="http://www.issnetonline.com.br/webservice/nfd">
<versaoDados>1.00</versaoDados>
</cabecalho>
Não esqueça de converter para texto usando htmlentities no caso de PHP.
1 curtida
Obrigado Luiz.
Com esse cabeçalho mudando a versaoDados para 2.04 eu consegui…
Obrigado!!!
Bom dia Pessoal, estou correndo contra o tempo para adaptar meu sistema já que não será mais permitido nota conjugada no DF.
Usando os exemplos postados acima ainda não consegui, me retorna a seguinte mensagem: s:Client ConsultarNfseServicoPrestado deve obedecer a um schema válido.
Vou postar o meu aqui para identificar o erro:
$arquivo = 'xml/consulta.xml';
$xml = htmlentities(file_get_contents($arquivo));
$cabecalho = htmlentities('<cabecalho versao="1.00" xmlns="http://www.issnetonline.com.br/webservice/nfd"><versaoDados>2.04</versaoDados></cabecalho>');
$envelope =
'<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfse="http://nfse.abrasf.org.br">
<SOAP-ENV:Body>
<nfse:ConsultarNfseServicoPrestado>
<nfseCabecMsg>'.$cabecalho.'</nfseCabecMsg>
<nfseDadosMsg>'.$xml.'</nfseDadosMsg>
</nfse:ConsultarNfseServicoPrestado>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
$url = 'https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx';
$headers = array(
"Content-type: text/xml; charset=utf-8",
"SOAPAction: http://nfse.abrasf.org.br/ConsultarNfseServicoPrestado",
"Content-length: ".strlen($envelope),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $envelope);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
print_r(curl_exec($ch));
curl_close($ch);
XML:
<ConsultarNfseServicoPrestadoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
<Pedido>
<Prestador>
<CpfCnpj>
<Cnpj>*****</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>*****</InscricaoMunicipal>
</Prestador>
<PeriodoEmissao>
<DataInicial>2022-10-01</DataInicial>
<DataFinal>2022-10-20</DataFinal>
</PeriodoEmissao>
<Pagina>1</Pagina>
</Pedido>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>...</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>...</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>...</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</ConsultarNfseServicoPrestadoEnvio>
Aqui em Brasília, de certa forma já estavam esperando que iria ser prorrogado
ran1978
Outubro 27, 2022, 9:32pm
18
Amigos, aonde consigo as urls de homologacao e producao para o DF. Já entrei em contato com a empresa e com a sefaz e ninguem responde. Se alguem tiver a relacao dos webservices ei ficarei muito grato.
luizvaz
Outubro 28, 2022, 2:42pm
20
Porque você está tentando usar esse método?
Normalmente as empresas não implementam todos.
Acaba que consta na documentação, mas não funciona.
Tente integrar com os métodos padrões primeiro:
ConsultarNfsePorFaixa
ConsultarNfsePorRps
Olha o exemplo de consulta nfse que fiz em python para Anápolis/GO: