Nf-e Manaus


#1

Boa tarde,
Desde inicio de janeiro venho rodando em paralelo, homologação, nas Notas Fiscais Eletronicas para nossa filial Itapevi e Manaus(AM).
Todos os testes rodaram com sucesso.
No ultimo dia 23/01 coloquei em produção e a Filial Itapevi (SP) esta rodando sem problema. Já rodamos cerca de 30 notas entre Venda, Consignação e Doação.

Hoje tentamos rodar a primeira nota para Manaus e o negócio não passa.

No ambiente de homologação, tenho o seguinte:
Testa o status do serviço da NF-e

** Processo completado com sucesso

Ambiente: 2 - Homologation
Versão: AM3.10
Estado: 107 - Servico em Operacao
UF: 13
Data/Hora: 26/01/2017 15:02:54
Tempo Médio de Processamento: 2 minuto(s)

No ambiente de produção, tenho a seguinte mensagem:
Testa o status do serviço da NF-e

** Erro: - Falha na verificação de Status - javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Quando tento enviar a NFe, ocorre a mesma mensagem.

Não sei nem por onde começar a procurar a solução, por que os certificados não são os mesmos para homologação e produção?

Grato, pela ajuda.

Raimundo


#2

Segue o log do erro:

-----------> MWFActivity.run: MWFNode[1120077-(DocComplete),Action=DocumentAction=–] [140]
java.lang.Exception: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:947)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:790)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:370)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:280)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:279)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:807)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:370)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:280)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:279)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:807)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:502)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:696)
at org.compiere.wf.MWorkflow.startWait(MWorkflow.java:726)

Espero que isso ajude.
Grato,
Raimundo


#3

Localizei a classe ProcStatusServico, mas não consigo identificar o problema.

/******************************************************************************

  • Product: ADempiereLBR - ADempiere Localization Brazil *
  • This program is free software; you can redistribute it and/or modify it *
  • under the terms version 2 of the GNU General Public License as published *
  • by the Free Software Foundation. This program is distributed in the hope *
  • that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
  • warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
  • See the GNU General Public License for more details. *
  • You should have received a copy of the GNU General Public License along *
  • with this program; if not, write to the Free Software Foundation, Inc., *
  • 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
    *****************************************************************************/
    package org.adempierelbr.process;

import java.io.StringReader;
import java.util.logging.Level;

import javax.xml.stream.XMLInputFactory;

import org.adempierelbr.model.MLBRDigitalCertificate;
import org.adempierelbr.model.MLBRNFConfig;
import org.adempierelbr.model.MLBRNFeWebService;
import org.adempierelbr.model.MLBRNotaFiscal;
import org.adempierelbr.nfe.api.NfeStatusServico2Stub;
import org.adempierelbr.util.BPartnerUtil;
import org.adempierelbr.util.NFeUtil;
import org.apache.axiom.om.OMElement;
import org.compiere.model.MLocation;
import org.compiere.model.MOrgInfo;
import org.compiere.model.MRefList;
import org.compiere.process.ProcessInfoParameter;
import org.compiere.process.SvrProcess;
import org.compiere.util.CLogger;
import org.compiere.util.Env;

import br.inf.portalfiscal.nfe.v310.ConsStatServDocument;
import br.inf.portalfiscal.nfe.v310.RetConsStatServDocument;
import br.inf.portalfiscal.nfe.v310.TAmb;
import br.inf.portalfiscal.nfe.v310.TCodUfIBGE;
import br.inf.portalfiscal.nfe.v310.TConsStatServ;
import br.inf.portalfiscal.nfe.v310.TConsStatServ.XServ;
import br.inf.portalfiscal.nfe.v310.TRetConsStatServ;
import br.inf.portalfiscal.www.nfe.wsdl.nfestatusservico2.NfeCabecMsg;
import br.inf.portalfiscal.www.nfe.wsdl.nfestatusservico2.NfeCabecMsgE;
import br.inf.portalfiscal.www.nfe.wsdl.nfestatusservico2.NfeDadosMsg;

/**

  • Processo para consultar o Status do Serviço

  • @author Ricardo Santana (Kenos, www.kenos.com.br)

  •  <li> Tornar compatível com a NF-e 3.10
    
  • @author Mario Grigioni

  • @version $Id: ProcStatusServico.java, 08/04/2010 15:35:00 mgrigioni
    */
    public class ProcStatusServico extends SvrProcess
    {

    /** Logger */
    private static CLogger log = CLogger.getCLogger(ProcStatusServico.class);

    /** Organization */
    private int p_AD_Org_ID = 0;

    /** Environment */
    private String p_LBR_EnvType = null;

    /** Tipo de Emissão */
    private String p_LBR_TPEmis = null;

    /**

    • Prepare - e.g., get Parameters.
      */
      protected void prepare()
      {
      ProcessInfoParameter[] para = getParameter();
      for (int i = 0; i < para.length; i++)
      {
      String name = para[i].getParameterName();
      if (name == null)
      ;
      else if (name.equals(“AD_Org_ID”))
      p_AD_Org_ID = para[i].getParameterAsInt();
      else if (name.equals(“lbr_NFeEnv”))
      p_LBR_EnvType = (String) para[i].getParameter();
      else if (name.equals(“LBR_TPEmis”))
      p_LBR_TPEmis = (String) para[i].getParameter();
      else
      log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
      }
      } // prepare

    /**

    • DoIt
      */
      protected String doIt() throws Exception
      {
      if (p_AD_Org_ID == 0)
      p_AD_Org_ID = Env.getAD_Org_ID(getCtx());

      // Informações da Organização
      MOrgInfo orgInfo = MOrgInfo.get (getCtx(), p_AD_Org_ID, null);
      if (orgInfo == null)
      return “Organização não encontrada”;

      MLocation orgLoc = new MLocation (getCtx(), orgInfo.getC_Location_ID(), null);

      // Ambiente da NF
      if (p_LBR_EnvType == null)
      {
      // Configuração da NF
      MLBRNFConfig nfconfig = MLBRNFConfig.get(p_AD_Org_ID);

      if (nfconfig == null)
      	return "Impossível identificar o Ambiente da NF-e.";
      
      p_LBR_EnvType = nfconfig.getlbr_NFeEnv();
      

      }

      String region = BPartnerUtil.getRegionCode(orgLoc);
      if (region.isEmpty())
      return “UF Inválida”;

      // Tipo de Emissão
      if (p_LBR_TPEmis == null)
      p_LBR_TPEmis = MLBRNFConfig.LBR_TPEMIS_EmissãoNormal;

      // Inicializa o Certificado
      MLBRDigitalCertificate.setCertificate (getCtx(), p_AD_Org_ID);
      //
      StringBuilder msg = new StringBuilder ();

      try
      {
      // Status Service Object
      ConsStatServDocument statServDoc = ConsStatServDocument.Factory.newInstance();
      TConsStatServ statServ = statServDoc.addNewConsStatServ();
      statServ.setTpAmb(TAmb.Enum.forString(p_LBR_EnvType));
      statServ.setCUF(TCodUfIBGE.Enum.forString(region));
      statServ.setXServ(XServ.STATUS);
      statServ.setVersao(NFeUtil.VERSAO_LAYOUT);

      //	XML
      StringReader xml = new StringReader (NFeUtil.wrapMsg (statServDoc.xmlText(NFeUtil.getXmlOpt())));
      
      //	Mensagem
      NfeDadosMsg dadosMsg = NfeDadosMsg.Factory.parse (XMLInputFactory.newInstance().createXMLStreamReader(xml));
      
      //	Cabeçalho
      NfeCabecMsg cabecMsg = new NfeCabecMsg ();
      cabecMsg.setCUF(region);
      cabecMsg.setVersaoDados(NFeUtil.VERSAO_LAYOUT);
      
      NfeCabecMsgE cabecMsgE = new NfeCabecMsgE ();
      cabecMsgE.setNfeCabecMsg(cabecMsg);
      
      String url = MLBRNFeWebService.getURL (MLBRNFeWebService.STATUSSERVICO, p_LBR_EnvType, NFeUtil.VERSAO_LAYOUT, p_LBR_TPEmis, orgLoc.getC_Region_ID());
      NfeStatusServico2Stub.setAmbiente(url);
      NfeStatusServico2Stub stub = new NfeStatusServico2Stub();
      
      OMElement nfeStatusServicoNF2 = stub.nfeStatusServicoNF2(dadosMsg.getExtraElement(), cabecMsgE);
      String respStatus = nfeStatusServicoNF2.toString();
      
      //	Resposta
      RetConsStatServDocument retConsStatServDoc = RetConsStatServDocument.Factory.parse (respStatus);
      TRetConsStatServ ret = retConsStatServDoc.getRetConsStatServ();
      
      msg = new StringBuilder("@Success@
      

“);
msg.append(”
Ambiente: “).append(ret.getTpAmb()).append(” - “).append(MRefList.getListName (getCtx(), 1100001, ret.getTpAmb().toString()));
msg.append(”
Versão: ").append(ret.getVerAplic());

		if (MLBRNotaFiscal.LBR_NFESTATUS_107_ServiçoEmOperação.equals(ret.getCStat()))	//	OK
		{
			msg.append("<font color=\"008800\">");
			msg.append("

Estado: “).append(ret.getCStat()).append(” - “).append(ret.getXMotivo());
msg.append(”");
}
else
{
msg.append("<font color=“880000”>");
msg.append("
Estado: “).append(ret.getCStat()).append(” - “).append(ret.getXMotivo());
msg.append(”");
}
msg.append("
UF: “).append(ret.getCUF());
msg.append(”
Data/Hora: ").append (NFeUtil.formatTime (ret.getDhRecbto().toString()));

		if (ret.getTMed() != null)
			msg.append("

Tempo Médio de Processamento: “).append(ret.getTMed()).append(” minuto(s)");

		if (ret.getDhRetorno() != null)
		{
			msg.append("<font color=\"880000\">");
			msg.append("

Previsão de Retorno: “).append(ret.getDhRetorno());
msg.append(”");
}

		if (ret.getXObs() != null)
			msg.append("

Obs: “).append(ret.getXObs());
}
catch (Throwable e)
{
log.severe (e.getLocalizedMessage());
e.printStackTrace();
//
msg = new StringBuilder(”@Error@ - Falha na verificação de Status - " + e.getMessage());
}

	return msg.toString();
}	//	doIt

} // ProcStatusServico


#4

Raimundo,

Esse erro provavelmente é do certificado. Faz assim, executa o comando abaixo trocando zzzz pelo endereço do WS que está dando problema:

openssl s_client -connect zzzzz:443

Na resposta você vai ver que tem um certificado, exemplo:

-----BEGIN CERTIFICATE-----
MIIGkjCCBXqgAwIBAgIQWqzVO5EfY0x9Aa1Tblxg7jANBgkqhkiG9w0BAQsFADB+
MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj
IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE2MDQyNzAwMDAwMFoX
DTE3MDQyODIzNTk1OVowggECMQswCQYDVQQGEwJCUjESMBAGA1UECAwJU2FvIFBh
dWxvMRIwEAYDVQQHDAlTYW8gUGF1bG8xLTArBgNVBAoMJElNUFJFTlNBIE9GSUNJ
QUwgRE8gRVNUQURPIFMgQSBJTUVTUDErMCkGA1UECwwiQ2VudHJvIGRlIFRlY25v
bG9naWEgZGEgSW5mb3JtYWNhbzE+MDwGA1UECxQ1T3JnYW5pemF0aW9uIGFuZCBk
b21haW4ocykgYXV0aGVudGljYXRlZCBieSBDZXJ0aXNpZ24xLzAtBgNVBAMMJnd3
dy5ob21vbG9nYWNhby5uZmNlLmZhemVuZGEuc3AuZ292LmJyMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwwbNSdNJ/T9F+TfMdm8CI8bHSkFDwgKlndeX
KOJ7CtMIGsPeXH9zdEyiZ4RYkimBUB7T4wTURaMtLmRmOHHLyBAhtFcx6LRZugmk
E8O0oL+mSsPQCgVfgZVQKaxXezSO3moX+ffg0fbbCoEUIXj8/z+WFPHJ0xgJxVH7
EtE9BonToDxryU3wNDSoeV/xkfWiMq7eko2UA2JhEqpYOyl4T7u1U0TcdxZ1FVIg
5enWVdcea+Ug3JtcwK/yOMaCFfZWZzw0lUbduf8l2qHkfW1X1LIaRwOUCv2+kybS
F4UhJVeFZKaMcxW/OGTZyq+kM91r7F2A9o/598uzGI2ClOlabQIDAQABo4IChDCC
AoAwMQYDVR0RBCowKIImd3d3LmhvbW9sb2dhY2FvLm5mY2UuZmF6ZW5kYS5zcC5n
b3YuYnIwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
BQUHAwEGCCsGAQUFBwMCMGEGA1UdIARaMFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUH
AgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBz
Oi8vZC5zeW1jYi5jb20vcnBhMB8GA1UdIwQYMBaAFF9gz2GQVd+EQxSKYCqy9Xr0
QxjvMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9zcy5zeW1jYi5jb20vc3MuY3Js
MFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3NzLnN5bWNkLmNv
bTAmBggrBgEFBQcwAoYaaHR0cDovL3NzLnN5bWNiLmNvbS9zcy5jcnQwggEFBgor
BgEEAdZ5AgQCBIH2BIHzAPEAdgDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTN
tuy+zAAAAVRZFAyUAAAEAwBHMEUCICHI6i6aF7Cs2Ga9SkfQXnTLBfl7GjSrf24T
4t+J941yAiEApeEbhm/QkG9j/7KlN8DGPfSnXexJMZ9fmCRRIBpAKrIAdwCkuQmQ
tBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAVRZFAzGAAAEAwBIMEYCIQCl
8yiOus0c4x7hjg1eLiDY0Mm1DspLNThcJTPOR7vMtAIhAIlCD/hUTbGuxN917FTF
ypGr6wwt5pOH1yfwYxvaoFqHMA0GCSqGSIb3DQEBCwUAA4IBAQBpCbTX5fdpd2OR
h2Jsnp8Z3mS7XkNo+NL5P6D0PrnPdnbpYE8v4IfdBe8gO6XgbJp0y6QzX3RDRiUb
rycGUpJQN+9Sy2B2G3YyC1oGF49V+SEjDb0FMAxWE5RY+n7sDa2uqIDez6ibPaTF
PUg8S1i88I8unmQrrvS6n6rCNsvwhUuftOTi5UcNM3ui7SEH81epn4oqYUV9dTJL
GXiR1DQEN0/DsokDbgcARAS6KRYYI3P1kvdrVl+enulSIZlaO48ACERJCXvzIxV4
ECz7fNFB+sKllSbFLcqlHoxdOIVgm9Bhkm47KYbfvraYw/SY9yh5VQ8yZozzY/mG
TIviz3oh
-----END CERTIFICATE-----

Ai vc salva isso em um arquivo e usa aquele programa KeyStore Explorer para importar dentro daquela truststore que vc anexou na janela Certificado Digital. Se isso resolver o problema me informe para que eu possa corrigir isso no próximo release.

Att.


#5

Boa noite, Ricardo,
Segui o caminho que voce indicou e foi so correr pro abraço!!!

Testa o status do serviço da NF-e

** Processo completado com sucesso

Ambiente: 1 - Production
Versão: AM3.10
Estado: 107 - Servico em Operacao
UF: 13
Data/Hora: 27/01/2017 19:30:09
Tempo Médio de Processamento: 1 minuto(s)

Aproveitei e fiz uma Nota Fiscal para testar o ambiente de produção e em seguida o cancelamento.
Os dois processos foram executados sem problemas.

Mais uma vez, muito obrigado Ricardo.

Um abraço,

Raimundo