Nfe - Nota Fiscal Eletronica

[quote=mateusprado]Blz. Oh vamos usar o blog la. Hj vou fazer um tuorial de algumas coisas.

Abraços.[/quote]

claro claro… vamo usar la… to esperando voce fazer as primeiras coisas la… hehehe

Blz vou postar alguns tutoriais la até amanha.

Abraços

voce usou o Eclipse europa neh? ou o Ganymede?

Tem que instalar o server Axis neh? aqui ta dando erro na hora de criar a WebService Client… vou tentar resolver… mas ja fioca de fica ae para seus tutoriais!

fui no blog hoje e nada cara…huauhaauh, aiaia… tentano usar inda caçando um tutorial…

Qual eclipse voce usa??? aqui naum deu pra fazer da mesma forma que tu fez… eu to usando a versao 3.4!!! Sera que isso naum pode dar diferença??

Abracossss

Prado meu amigo… cade tu!! Nada ainda la no wordpress? eu to tentando e retentando… e nadad e conseguir fazer ocmo voce me pediu… to baixando de novo o eclipse, e etc… 3.4 espero que funfe… abracos

Prado, consegui melhorar… To usando o NetBeans e agora ta dando outro erro:

01/09/2008 15:42:50 : Retrieving Location: https://hom.nfe.fazenda.gov.br/NFeStatusServico/NFeStatusServico.asmx?wsdl

Error: An I/O error occured. Server returned HTTP response code: 403 for URL: https://hom.nfe.fazenda.gov.br/NFeStatusServico/NFeStatusServico.asmx?wsdl

Que pode ser? Eu naum coloquei a certificacao Digital em Meu micro…

Abracoss

Sera que eh falta de CERTIFICADO DIGITAL?

Boa tarde colegas,

Tou lutando com o desenvolvimento de uma aplicação para comunicação com os web services da SEFAZ - MT e até agora tou perdendo feio…

Vocês podem me dar uma mãozinha??
Vou começar pelo mais velho dos problemas:
Criado o método para chamada do Web Service , ele me retorna um erro que eu não consegui resolver ainda (tenho apenas 6 meses de Java):

[code]public void callService(String local, String servico, String xml)throws Exception{

Call call= (Call) new Service().createCall();			
call.setTargetEndpointAddress(local);			
call.setOperationName(servico);			

}
[/code]
Só que a execução me retorna a seguinte msg:

[code]- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
[\code]
Alguém pode me dar uma luz??

Cara gostaria de poder ajudar… mas estou com muitas dificildades com este lance de NFe… to entando pegar umas ajudas por ae, mas ateh agora nada…
Vou tentar conseguir algo bacana pra tentar ajudar a todos!!

hehehehe Abracosss

Todos estamos… hehehe…
Talvez eu possa ajudar em algo.
Em que parte você está??

Cara na real, eu to tentando criar uma WebService Client no Eclipse ou no NB… mas sempre da um erro BAD_CERTIFIQUED do servidor… naum sei pq razao…
Ja tentei varias coisas e nada… voce fez assim?

Cara, infelizmente nao tenho uma solucao pra postar … na verdade tenho mesmo eh mais uma duvida

Vcs sabem se tem algum cnpj, usuario e senha pra testar a chamada desse web service da NF-p ?

Me passaram este link a uns dias atras:

http://nf-eletronica.com/blog?dl_id=7

Tem algumas coisas nestes blog: http://nf-eletronica.com/blog/

Isso ja eh o que me passaram… pq a galera naum posta o codigo ae pra gente ver… ficaria bem mais facil!

[quote=dcbasso]Cara na real, eu to tentando criar uma WebService Client no Eclipse ou no NB… mas sempre da um erro BAD_CERTIFIQUED do servidor… naum sei pq razao…
Ja tentei varias coisas e nada… voce fez assim?[/quote]

Você não consegue criar as classes ou não consegue o acesso ao serviço??
Eu só consegui realizar o acesso ao status do serviço ontem, agora vou mexer com os XML’s para envio de NFe.

Bom dia a todos,

Ainda estou quebrando a cabeça com essa bendita nota fiscal eletrônica…
Consigo consumir alguns web services, como a consulta de Status do serviço, mas agora estou tentando consultar o cadastro de um contribuinte e tenho o seguinte erro na tela:

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at br.inf.portalfiscal.www.nfe.wsdl.CadConsultaCadastro.CadConsultaCadastroSoapBindingStub.consultaCadastro(CadConsultaCadastroSoapBindingStub.java:108)
	at ConsultaCadastro.main(ConsultaCadastro.java:56)

	{http://xml.apache.org/axis/}hostname:LAB6

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at br.inf.portalfiscal.www.nfe.wsdl.CadConsultaCadastro.CadConsultaCadastroSoapBindingStub.consultaCadastro(CadConsultaCadastroSoapBindingStub.java:108)
	at ConsultaCadastro.main(ConsultaCadastro.java:56)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
	at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
	at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
	at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
	... 11 more

Alguém com divina inspiração pode interpretar o meu erro por favor???

Tou ficando doido com isso aqui…

Flwz!!

eu naum passei nem do certificado ainda…

Ola! estou tambem desenvolvendo a NF-e aqui, e ja esta bombando
Vou tentar ajudar no que puder, pois tbm diva a ajuda de uma alma divina (Arlei)
eu fiz um certificado na agencia dos correios, http://www.correios.com.br/produtos_servicos/certificacaodigital/default.cfm pegei um e-CNPJ tipo A1
bom, pra criar os clientes webservice, fiz um utilitário, ele ja usa o certificado ai vai o codigo…
Ele usa o WSDL2JAVA que vem junto o AXIS, no meu caso estao os servidores de RS que vou usar aqui p/ SC…

[code]public class GeradorWSDL {

public static void main(String[] args) {
	String nfestatusservico = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?WSDL";
	String nfeconsulta = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfeconsulta/NfeConsulta.asmx?WSDL";
	String nferecepcao = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nferecepcao/NfeRecepcao.asmx?WSDL";
	String nferetrecepcao = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nferetrecepcao/NfeRetRecepcao.asmx?WSDL";
	String nfecancelamento = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfecancelamento/NfeCancelamento.asmx?WSDL";
	String nfeinutilizacao = "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfeinutilizacao/NfeInutilizacao.asmx?WSDL";
	
	GeradorWSDL gerador = new GeradorWSDL();
	gerador.setProperties();		
	gerador.geraWSDL(nfestatusservico, "nfestatusservico");
	gerador.geraWSDL(nfeconsulta, "nfeconsulta");
	gerador.geraWSDL(nferecepcao, "nferecepcao");
	gerador.geraWSDL(nferetrecepcao, "nferetrecepcao");
	gerador.geraWSDL(nfecancelamento, "nfecancelamento");
	gerador.geraWSDL(nfeinutilizacao, "nfeinutilizacao");

}

public void geraWSDL(String wsdl, String pack) {
	
	WSDL2Java.main(new String[] { wsdl, "-o", "src", "-p",
			"br.com.minhaempresa.nfe.service." + pack });
	System.out.println("*** Geração concluída ***");
}

public void setProperties() {
	System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	System.setProperty("javax.net.ssl.trustStore", "jssecacerts");
	System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

	System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
	System.setProperty("javax.net.ssl.keyStore", "certificado.p12");
	System.setProperty("javax.net.ssl.keyStorePassword", "SENHA");
}

}[/code]

o PKCS12 é o meu certificado digital, o JKS é os sertificados do webservice, eu pego eles usando a seguite classe (feita pela própria sun :lol: )

[code]public class InstallCert {

public static void main(String[] args) throws Exception {
	System.out.println("Aqui: "+args[1]);
	String host;
	int port;
	char[] passphrase;
	if ((args.length == 1) || (args.length == 2)) {
		String[] c = args[0].split(":");
		host = c[0];
		port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
		String p = (args.length == 1) ? "changeit" : args[1];
		passphrase = p.toCharArray();
	} else {
		System.out
				.println("Usage: java InstallCert <host>[:port] [passphrase]");
		return;
	}

	File file = new File("jssecacerts");
	if (file.isFile() == false) {
		char SEP = File.separatorChar;
		File dir = new File(System.getProperty("java.home") + SEP + "lib"
				+ SEP + "security");
		file = new File(dir, "jssecacerts");
		if (file.isFile() == false) {
			file = new File(dir, "cacerts");
		}
	}
	System.out.println("Loading KeyStore " + file + "...");
	InputStream in = new FileInputStream(file);
	KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
	ks.load(in, passphrase);
	in.close();

	SSLContext context = SSLContext.getInstance("TLS");
	TrustManagerFactory tmf = TrustManagerFactory
			.getInstance(TrustManagerFactory.getDefaultAlgorithm());
	tmf.init(ks);
	X509TrustManager defaultTrustManager = (X509TrustManager) tmf
			.getTrustManagers()[0];
	SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
	context.init(null, new TrustManager[] { tm }, null);
	SSLSocketFactory factory = context.getSocketFactory();

	System.out
			.println("Opening connection to " + host + ":" + port + "...");
	SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
	socket.setSoTimeout(10000);
	try {
		System.out.println("Starting SSL handshake...");
		socket.startHandshake();
		socket.close();
		System.out.println();
		System.out.println("No errors, certificate is already trusted");
	} catch (SSLException e) {
		System.out.println();
		e.printStackTrace(System.out);
	}

	X509Certificate[] chain = tm.chain;
	if (chain == null) {
		System.out.println("Could not obtain server certificate chain");
		return;
	}

	BufferedReader reader = new BufferedReader(new InputStreamReader(
			System.in));

	System.out.println();
	System.out.println("Server sent " + chain.length + " certificate(s):");
	System.out.println();
	MessageDigest sha1 = MessageDigest.getInstance("SHA1");
	MessageDigest md5 = MessageDigest.getInstance("MD5");
	for (int i = 0; i < chain.length; i++) {
		X509Certificate cert = chain[i];
		System.out.println(" " + (i + 1) + " Subject "
				+ cert.getSubjectDN());
		System.out.println("   Issuer  " + cert.getIssuerDN());
		sha1.update(cert.getEncoded());
		System.out.println("   sha1    " + toHexString(sha1.digest()));
		md5.update(cert.getEncoded());
		System.out.println("   md5     " + toHexString(md5.digest()));
		System.out.println();
	}

	System.out
			.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
	String line = reader.readLine().trim();
	int k;
	try {
		k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
	} catch (NumberFormatException e) {
		System.out.println("KeyStore not changed");
		return;
	}

	X509Certificate cert = chain[k];
	String alias = host + "-" + (k + 1);
	ks.setCertificateEntry(alias, cert);

	OutputStream out = new FileOutputStream("jssecacerts");
	ks.store(out, passphrase);
	out.close();

	System.out.println();
	System.out.println(cert);
	System.out.println();
	System.out
			.println("Added certificate to keystore 'jssecacerts' using alias '"
					+ alias + "'");
}

private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

private static String toHexString(byte[] bytes) {
	StringBuilder sb = new StringBuilder(bytes.length * 3);
	for (int b : bytes) {
		b &= 0xff;
		sb.append(HEXDIGITS[b >> 4]);
		sb.append(HEXDIGITS[b & 15]);
		sb.append(' ');
	}
	return sb.toString();
}

private static class SavingTrustManager implements X509TrustManager {

	private final X509TrustManager tm;
	private X509Certificate[] chain;

	SavingTrustManager(X509TrustManager tm) {
		this.tm = tm;
	}

	public X509Certificate[] getAcceptedIssuers() {
		throw new UnsupportedOperationException();
	}

	public void checkClientTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
		throw new UnsupportedOperationException();
	}

	public void checkServerTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
		this.chain = chain;
		tm.checkServerTrusted(chain, authType);
	}
}

}[/code]

espero ter ajudado em algo
abraço

pra completar ai como executamos um webservice desses gerado pelo wsdl2java

	public static void main(String[] args) throws Exception {
		NfeStatusServico service = new NfeStatusServicoLocator();
		NfeStatusServicoSoap_PortType nfeStatus = service
				.getNfeStatusServicoSoap();

		String nfeCabecMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
				+ "<cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" "
				+ "versao=\"1.02\">" + "<versaoDados>1.07</versaoDados>"
				+ "</cabecMsg>";

		String nfeDadosMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
				+ "<consStatServ " + " versao=\"1.07\""
				+ " xmlns=\"http://www.portalfiscal.inf.br/nfe\">"
				+ "<tpAmb>2</tpAmb>" + "<cUF>42</cUF>"
				+ "<xServ>STATUS</xServ>" + "</consStatServ>";

		System.setProperty("javax.net.ssl.trustStoreType", "JKS");
		System.setProperty("javax.net.ssl.trustStore", "jssecacerts");
		System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

		System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
		System.setProperty("javax.net.ssl.keyStore", "certificado.p12");
		System.setProperty("javax.net.ssl.keyStorePassword", "senha");

		System.out.println(nfeCabecMsg);
		System.out.println(nfeDadosMsg);

		// InstallCert.main(new String[] { new
		// String("homologacao.nfe.sefaz.rs.gov.br") });

		System.out.println(nfeStatus.nfeStatusServicoNF(nfeCabecMsg,
				nfeDadosMsg));

	}

no console deve aparecer algo assim:
(formatei o xml)

<?xml version="1.0" encoding="UTF-8"?>
<cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.02">
	<versaoDados>1.07</versaoDados>
</cabecMsg>
<?xml version="1.0" encoding="UTF-8"?>
<consStatServ versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe">
	<tpAmb>2</tpAmb>
	<cUF>42</cUF>
	<xServ>STATUS</xServ>
</consStatServ>
<?xml version="1.0" encoding="utf-8"?>
<retConsStatServ versao="1.07"
	xmlns="http://www.portalfiscal.inf.br/nfe">
	<tpAmb>2</tpAmb>
	<verAplic>SVRS20080807095546</verAplic>
	<cStat>107</cStat>
	<xMotivo>Servico em Operacao</xMotivo>
	<cUF>42</cUF>
	<dhRecbto>2008-09-16T17:09:37</dhRecbto>
	<tMed>1</tMed>
</retConsStatServ>

Bem… pra setar os certificados que eu usarei,peguei um código que o pessoal postou aqui:

System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
			Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

			System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
			System.setProperty("javax.net.ssl.keyStore", "caminho do meu certificado.pfx"); 
			System.setProperty("javax.net.ssl.keyStorePassword", "minha senha");

			System.setProperty("javax.net.ssl.trustStoreType", "JKS");
			System.setProperty("javax.net.ssl.trustStore", "caminho do meu keystore.jks");

Depois disso, com a santa ajuda dos plugins do eclipse para criar o cliente a partir do WSDL, eu uso o serviço que for necessário. Nesse caso abaixo fiz o consumo do Web service de consulta de Status:

NfeStatusServico_Service hService = new NfeStatusServico_ServiceLocator();	
		try {
			NfeStatusServico_PortType port = hService.getNfeStatusServico();					
			System.out.println(port.nfeStatusServicoNF(cabecMsg, consStatServ));			
		}catch(ServiceException e1){
			e1.printStackTrace();
		}catch(RemoteException e){
		//System.out.println("-------------------------------------");
		//System.out.println(e.getMessage());
		//System.out.println("-------------------------------------");
		//e.printStackTrace();
		}

Pra ele funcionar direitinho, é só ter criado as classes cliente a partir do WSDL do Web Service desejado.

Agora se o seu problema for para a importação dos certificados para a keystore, você deve abrir o prompt e usar a essa ferramenta aqui: http://dist.codehaus.org/jetty/jetty-6.1.x/jetty-6.1.1.zip (Jetty)
Feito o download, use o seguinte comando:

java -classpath lib/jetty-6.1.8.jar org.mortbay.jetty.security.PKCS12Import [nomedoarquivo].pfx [nomedoarquivo].jks

Espero ter ajudado!!

Abraço,

Tiago Paulino

Voces pegaram os certificos tipo “teste” ou oficial da empresa?
To vendo as classes, vou ver aqu para fazer rodar na minha maquina!!

Abracos