[quote]
Que eu saiba, é só você consultar a nota no SEFAZ do estado em que ela foi emitida.
O retorno da consulta traz uma assinatura digital.
Se você assinar a nota com um certificado diferente, a cadeia de Assinatura Digital com serteza será diferente.
Atenciosamente,
Fernando Hirata Alexandre[/quote]
Mas alguem sabe como validar a adulteracão de notas, por exemplo: o fornecedor emite uma nota de R$ 1.000,00, envia ao sefaz, recebe o retorno, empacota o retorno só que depois disso ele vai manualmente no XML e altera o valor pra R$ 500,00. Se eu consultar a nota no SEFAZ o protocolo vai estar igual MAS a assinatura está errada.
No visualizador da receita tem um botaozinho (o do meio do painel de validações) que valida a assintura, se você adulterar a nota como eu falei ai em cima e rodar esse botãozinho ele vai dizer que a assinatura diverge.
Como ele faz isso? Só imagino um jeito ele tem que ter assinado de novo para validar.
Meu sistema é WEB e está praticamente concluído, faltando apenas umas besteirinhas quanto aos itens comuns.
Porém, eu gostaria de assinar e enviar a NF-e com o certificado no lado do cliente.
Isso me possibilitará deixar o servidor em qualquer datacenter e utilizar certificados A3 sem dificuldades.
Estou pedindo uma forcinha para o grupo.
Eu estou tendo bastante problema de retorno “999 - Erro não catalogado” da receita do Paraná… vcs sabem como contornar esse erro ou me dizer qual o problema com o meu sistema no envio de notas?
Substitua “this.mensagens.add(bundle.getMens(…” por “System.out.println(…” para seus testes:
Acrescente algumas verificações baseado na pag.34 do Manual do Contribuinte e ficará muito bom.
package br.com.cts.sge.nfe.apoio;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import br.com.cts.sge.util.Bundle;
import br.com.cts.sge.util.Messages;
public class XMLXSDValidate implements ErrorHandler {
private List<Messages> mensagens = new ArrayList<Messages>();
private Bundle bundle = new Bundle();
private String xmlInput;
private String xsdInput;
public XMLXSDValidate(String xmlInput, String xsdInput) {
this.xmlInput = xmlInput;
this.xsdInput = xsdInput;
}
public String getXmlInput() {
return xmlInput;
}
public void setXmlInput(String xmlInput) {
this.xmlInput = xmlInput;
}
public String getXsdInput() {
return xsdInput;
}
public void setXsdInput(String xsdInput) {
this.xsdInput = xsdInput;
}
public void validate() throws Exception {
try {
//Setting Xerces-J parser because the standard parser not recognize <import ...>
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
// Parse an XML document em um DOM tree.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false);
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(new File(xmlInput));
// Cria um SchemaFactory capaz de compreender WXS schemas.
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
// carrega um WXS schema, representada por uma instacia Schema.
Source schemaFile = new StreamSource(new File(xsdInput));
Schema schema = schemaFactory.newSchema(schemaFile);
// Cria um objeto Validator que pode ser usado para validar
// uma instancia document.
Validator validator = schema.newValidator();
validator.setErrorHandler(this);
// Valida o Dom tree
validator.validate(new DOMSource(document));
} catch (ParserConfigurationException e) {
this.mensagens.add(bundle.getMens(e.getMessage(), ""));
} catch (SAXException e) {
this.mensagens.add(bundle.getMens(e.getMessage(), ""));
} catch (IOException e) {
this.mensagens.add(bundle.getMens(e.getMessage(), ""));
}
}
@Override
public void error(SAXParseException exception) throws SAXException {
this.mensagens.add(bundle.getMens("ERROR: " + exception.getLocalizedMessage(), ""));
}
@Override
public void fatalError(SAXParseException exception) throws SAXException {
this.mensagens.add(bundle.getMens("FATAL" + exception.getLocalizedMessage(), ""));
}
@Override
public void warning(SAXParseException exception) throws SAXException {
this.mensagens.add(bundle.getMens("WARNING" + exception.getLocalizedMessage(), ""));
}
public List<Messages> getMensagens(){
return mensagens;
}
}
Substitua “this.mensagens.add(bundle.getMens(…” por “System.out.println(…” para seus testes:
Acrescente algumas verificações baseado na pag.34 do Manual do Contribuinte e ficará muito bom.
…
Este código peguei por aqui mesmo. Apenas adaptei para meu projeto.[/quote]
Aqui da erro estranho… acontece com vc também? eu postei o xml em anexo
[quote=rafaelbtz][quote]
Que eu saiba, é só você consultar a nota no SEFAZ do estado em que ela foi emitida.
O retorno da consulta traz uma assinatura digital.
Se você assinar a nota com um certificado diferente, a cadeia de Assinatura Digital com serteza será diferente.
Atenciosamente,
Fernando Hirata Alexandre[/quote]
Mas alguem sabe como validar a adulteracão de notas, por exemplo: o fornecedor emite uma nota de R$ 1.000,00, envia ao sefaz, recebe o retorno, empacota o retorno só que depois disso ele vai manualmente no XML e altera o valor pra R$ 500,00. Se eu consultar a nota no SEFAZ o protocolo vai estar igual MAS a assinatura está errada.
No visualizador da receita tem um botaozinho (o do meio do painel de validações) que valida a assintura, se você adulterar a nota como eu falei ai em cima e rodar esse botãozinho ele vai dizer que a assinatura diverge.
Como ele faz isso? Só imagino um jeito ele tem que ter assinado de novo para validar.
[/quote]
conseguiu alguma coisa? eu tb estava tentando validar a assinatura, mas não sei como.
mas não entendi muito bem o seu modo de pensar. Pq assinar de volta?
Pegando o seu exemplo, do cara alterar o valor depois de enviar a nfe. A assinatura vai ficar inválida, certo? e como iria
comparar uma assinatura inválida com a sua “nova assinatura”?
Veja se está usando o arquivo xsd correto.
O enviNFe_v2.00.xsd, é do lote na forma em que é enviado à Receita.
Com o XML que você preparaou, tente com nfe_v2.00.xsd. Acho que dará certo.
Veja se está usando o arquivo xsd correto.
O enviNFe_v2.00.xsd, é do lote na forma em que é enviado à Receita.
Com o XML que você preparaou, tente com nfe_v2.00.xsd. Acho que dará certo.[/quote]
Correto, só tem um problema o nfe_v2.00.xsd só faz validação de estrutura do documento…
Não verifica o conteudo dos campos, exemplo: Total dos itens Difere do Total da Nota
Correto, só tem um problema o nfe_v2.00.xsd só faz validação de estrutura do documento…
Não verifica o conteudo dos campos, exemplo: Total dos itens Difere do Total da Nota[/quote]
Realmente, estas críticas têm que ser acrescentadas.
Mesmo assim, acho que ajuda bastante com caracteres incorretos, tamanho de campo incorreto, ausencia de campo obrigatório, entre outros.
Ainda estou concluindo estas críticas.
Correto, só tem um problema o nfe_v2.00.xsd só faz validação de estrutura do documento…
Não verifica o conteudo dos campos, exemplo: Total dos itens Difere do Total da Nota[/quote]
Realmente, estas críticas têm que ser acrescentadas.
Mesmo assim, acho que ajuda bastante com caracteres incorretos, tamanho de campo incorreto, ausencia de campo obrigatório, entre outros.
Ainda estou concluindo estas críticas.[/quote]
Oque estaria faltando é a questao das paginas 33 a 44 do manual de integração
conseguiu alguma coisa? eu tb estava tentando validar a assinatura, mas não sei como.
mas não entendi muito bem o seu modo de pensar. Pq assinar de volta?
Pegando o seu exemplo, do cara alterar o valor depois de enviar a nfe. A assinatura vai ficar inválida, certo? e como iria
comparar uma assinatura inválida com a sua “nova assinatura”?[/quote]
Tive que dar uma parada nesse projeto e ainda não consegui, mas aquela minha ideia esquece não funciona.
[quote=Fredidh]A estrutura e o conteúdo do Documento Fiscal Eletrônico não são válidos.
Não consigo encontrar o motivo … alguém conseguiria me ajudar?[/quote]
Não entendi qual o problema.
A nota não está processada e autorizada?
Esta tudo correto ! Chave de acesso, a nota foi validada,assinada e transmitida corretamente. Ai foi gerado o arquivo XML.
No site da receita tem o programa Visualizador - Java Web Start, quando clico no programa para verificar a estrutura/conteúdo do documento aberto
ai da a mensagem (“A estrutura e o conteúdo do Documento Fiscal Eletrônico não são válidos.”). Ja verifiquei a estrutura do arquivo junto ao manual do contribuiente
disponibilizado pela receita e nada ! Não consigo achar a solução.
[quote=Fredidh]Esta tudo correto ! Chave de acesso, a nota foi validada,assinada e transmitida corretamente. Ai foi gerado o arquivo XML.
No site da receita tem o programa Visualizador - Java Web Start, quando clico no programa para verificar a estrutura/conteúdo do documento aberto
ai da a mensagem (“A estrutura e o conteúdo do Documento Fiscal Eletrônico não são válidos.”). Ja verifiquei a estrutura do arquivo junto ao manual do contribuiente
disponibilizado pela receita e nada ! Não consigo achar a solução.[/quote]
Cola o seu xml nesse site e manda validar… acho que o erro vai ser mais preciso http://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx