CT-e - Conhecimento de Transporte Eletrônico

49 respostas
J

Olá a todos,

Há alguém trabalhando com CT-e? Vi vários tópicos relacionados a NF-e, mas sobre CT-e não encontrei nada.
Eu estou começando a desenvolver, e pelo que estou vendo não há a mesma padronização em relação a NF-e.
Para o projeto de nota fiscal gerei as classes de consumo dos webservices a partir do wsimport, e consegui reutilizar as mesmas classes para diversos estados, apenas passando o endereço do webservice (não testei todos os estados).
Já para o conhecimento de transporte, consigo usar o wsimport para SP, mas não consegui utilizar as classes - creio que houve algum erro na geração.
Como minha maior urgência é para um cliente de MT, peguei os wsdl desse estado, e não consegui gerar as classes devido ao encoded não ser suportado por essa ferramenta.
Portanto, comecei a utilizar o Apache Axis. Consegui gerar as classes de consulta do status do serviço, envio o xml, mas recebo o erro 215: falha no schema.
Entretanto, o mesmo xml é considerado válido no validador de mensagens disponibilizado pela SEFAZ RS (http://www.sefaz.rs.gov.br/ASP/AAE_ROOT/CTE/SAT-WEB-CTE-VAL_1.asp). Inclusive para poder validar no RS peguei um erro no manual de integração versão 1.02, página 59, onde a tag “consStatServ” deve ser trocada pela tag “constStatServCte”. Porém, nenhum dos casos valida em MT.

E então, quem está desenvolvendo, em que passo está?
Tiveram problemas semelhantes?

Abraços.

49 Respostas

J

Julio

eu tb tive esse problema e ja deu certo

conversei com o pessoal da sefaz de MT e eles mostraram o erro que ta no schema e foi reportado para RS mas eles ja solucionaram e voltou a funcionar

testa ai cara

J

javaCBA, mas qual a tag correta? “consStatServ” ou “constStatServCte” ?
Bom, de qualquer forma já tentei com ambas, e ainda dá erro. Abaixo o xml que estou enviando:

<?xml version="1.0" encoding="UTF-8"?> <consStatServCte xmlns="http://www.portalfiscal.inf.br/cte" versao="1.01"> <tpAmb>2</tpAmb> <xServ>STATUS</xServ> </consStatServCte>

J

ta errado

eh assim

<?xml version="1.0" encoding="UTF-8"?><consStatServCte versao="1.01" xmlns="http://www.portalfiscal.inf.br/cte"><tpAmb>2</tpAmb><xServ>STATUS</xServ></consStatServCte>

e o resultado ta voltando correto

<?xml version="1.0" encoding="UTF-8"?><retConsStatServCte versao="1.02" xmlns="http://www.portalfiscal.inf.br/cte"><tpAmb>2</tpAmb><verAplic>1.02</verAplic><cStat>107</cStat><xMotivo>107 - Servico em operacao.</xMotivo><cUF>51</cUF><dhRecbto>2009-07-10T10:05:58</dhRecbto><tMed>0</tMed><dhRetorno>2009-07-10T10:05:58</dhRetorno><xObs></xObs></retConsStatServCte>

J

Então, eu estava fazendo assim anteriormente, e dava erro…
Voltei a fazer assim, enviei o xml igualzinho ao que você mandou, e ainda dá 215.
Bastante estranho :?

T

Da ultima vez que olhei Ct-e, ainda estava em desenvolvimento. Ja esta liberado para o publico?

J

Rio Grande do Sul e São Paulo já disponibilizam o ambiente de produção.
Mato Grosso liberou homologação, mas pelo jeito tá com bastante erros ainda.

Parece-me que a partir de 01/08 MT já exige o CT-e (esse é meu prazo para entregar o sistema).

J

javaCBA, obrigado pela ajuda!
Seu modelo confirmou a correção do meu. Agora estou enviando normalmente. O problema era na SEFAZ MT mesmo.

Caso volte a ter problemas, teremos ups neste tópico. :lol:

J

javaCBA, mais uma dúvida: em outro tópico, eu vi você falando que já trabalha com SP.
você gera as classes dos webservices na mão?
eu tive problemas com o wsimport, mas acho que com o axis seria viável…

o que você utiliza / tentou utilizar?

M

po galera, tudo bem?

estou iniciando o desenvolvimento do CTE. ainda lendo a documentação e tal.
estou com duvidas aqui como ficaria o xml final gerado.

a documentação não mostra um exemplo completo. dai estou com dificuldade.

alguem poderia colocar aqui como ficaria um XML prontim pra ser enviado?

vlw

J

julio desenvolvi em java, mas soh vai ser obrigatorio pras empresas q nao solicitarem a prorrogacao

faz la cara…trabalha com tempo nisso

J

tenho o xml com os valores setados porem não sei como mandar pra sefaz.
Como vcs tem mais experiencia podem me ajudar?

utilizo netBeans 7.5 > crio um JAXB > seto todos os valores > converto em xml > e não sei como mandar

J

usa o axis pra gerar a classe cliente ou então faz na mao mesmo usando httpclient

J

não entendi.
Só quero mandar os dados setados para o devido metodo e ele me retornar algo.

J

então seta o cabecalho no header do soap e envia os dados como parametro

posta melhor sua duvida…vc quer o que? soh essa explicacao ou vc quer trecho de codigo

se tiver fazendo algo ai, posta seu codigo pra gente entender

J

Massa cara,

Até o momento estou com a documentação "Manual de Interação - Contribuinte versão 1.0.2"
(http://www.cte.fazenda.gov.br//docs/Manual_CTe_v1.02.pdf)
os arquivos são do site: http://www.fazenda.sp.gov.br/cte/ (Novo schema do CT-e)

achei no site do netBeans algo interessante: Vinculando WSDL a Java com JAXB (http://www.netbeans.org/kb/65/websvc/jaxb_pt_BR.html)
É perfeito, consigo utilizar com gets e sets, porem não consigo enviar para a Sefaz

no momento de enviar o CT-E:

Object objRet = new Object();

objRet = obj.createEnviCTe(tEnviCTe);

Porem retorna o codigo que mandei em xml.
Das duas uma: ou to utilizando o metodo errado, ou não to sabendo enviar.

J

resumindo:
Li a documentação http://www.cte.fazenda.gov.br//docs/Manual_CTe_v1.02.pdf;

fiz os downloads;

  não conhecia a manipulação de xml e li :http://www.netbeans.org/kb/65/websvc/jaxb_pt_BR.html;

   com o JaxB consegui setar os valores porem quando tento enviar retorna o xml com os campos que setei.

tEnviCTe - > contem um tenvicte que tem uma coleção de CTE

enviCte.ObjectFactory obj = new enviCte.ObjectFactory(); 
        Object objRet = new Object();
        objRet = obj.createEnviCTe(tEnviCTe);

Ou, seja: Não consigo enviar e ter uma resposta, pois não retorna erro.

Se vc puder mandar o cod do SOAP será ótimo.

J

vc ta confundindo

o jaxb trabalha apenas com xml, mas nao faz esse envio que vc quer

tem um manual facinho que te ensina criar uma classe para enviar seu xml para sefaz

http://www.guj.com.br/article.show.logic?id=180

qualquer duvida, posta ae

J

Olá,
muito obrigado pela dica, estou seguindo o tutorial, porem não entendi uma parte:

CRIANDO O WSDL PARA O WEB SERVICE Definida a classe com a lógica de negócio que será publicada como um Web Service, o próximo passo é criar o descritor WSDL para o serviço. Com base no WSDL gerado, também serão geradas as classes que fazem a orquestração do acesso ao Web service, em conjunto com o Apache Axis. Certifique-se de ter as bibliotecas do Apache Axis configuradas corretamente no CLASSPATH, como demonstrado na introdução. Para gerar o WSDL utiliza-se a ferramenta Java2WSDL, do Apache Axis. A linha de comando para a geração do WSDL é a seguinte.

java org.apache.axis.wsdl.Java2WSDL -o ../config/resource/rh.wsdl -l"http://localhost:8080/rh/services/RecursosHumanosWS" -n "urn:RecursosHumanos"  rh.RecursosHumanos

quanto tento execultar informa o seguinte erro:

java.lang.ClassNotFoundException: org.achache.axis.wsdl.Java2WSDL

J

Jonas vc não queria soh gerar o cliente?

se for soh gerar o cliente, pula essa parte ai e usa o comando soh para gerar o cliente a partir da URL do web service. Ate entao achei que sua intencao era soh conectar com o web service do cte.

Se for, vc ta fazendo procedimentos errados

qto ao erro:

java.lang.ClassNotFoundException: org.achache.axis.wsdl.Java2WSDL

ta acontecendo porque vc nao carregou a classe, se vc tiver trabalhando diretamente no prompt, executa isso:

SET AXIS_HOME=c:/java/axis SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/axis.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/saaj.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/jaxrpc.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/commons-logging-1.0.4.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/commons-discovery-0.2.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/wsdl4j-1.5.1.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/activation.jar SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/mail.jar

lembre-se que essas bibliotecas sao importante spara o funcionamento do axis

no meu caso uso ela na pasta java da raiz. Muda o diretorio do AXIS_HOME para apontar para o diretorio onde ta essas lib e pronto

qualquer coisa, posta ae

J

Quer dizer que para enviar dados pelo webService não preciso efetuar o comando que ocorre o erro?
Blz.
Então a configuração está completa e posso iniciar o webservice conforme o tutorial?

Obrigado.

J

o tutorial eh completo

gera as classes server side e o cliente para conexao

vc nao vai fazer o web serivce, vc soh vai criar o cliente para enviar os dados do cte…

mesmo para criar o cliente do web service vc vai precisar setar esses jar para colocar o comando para geracao da classe cliente

eh bem simplezinho

1 - vc seta as bibliotecas para conseguir digitar os comandos de geracao do cliente
2 - executa esse comando ai:

java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/rh/services/RecursosHumanosWS?wsdl -o ./src -p rh.ws.cliente

substituindo a url do web service que vc ta querendo usar e colocando os pacotes onde vc quer colocar a classe cliente

J

Cara entendi o que vc me falou, porem o erro:

java.lang.ClassNotFoundException: org.achache.axis.wsdl.Java2WSDL

continua mesmo depois de efetuar:

SET AXIS_HOME=c:/java/axis   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/axis.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/saaj.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/jaxrpc.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/commons-logging-1.0.4.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/commons-discovery-0.2.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/wsdl4j-1.5.1.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/activation.jar   
SET CLASSPATH=%CLASSPATH%;%AXIS_HOME%/mail.jar

no momento que tento inserir:

java org.apache.axis.wsdl.Java2WSDL -o ../config/resource/rh.wsdl -l"http://localhost:8080/rh/services/RecursosHumanosWS" -n "urn:RecursosHumanos"  rh.RecursosHumanos
J

eh porque vc ta setando alguma coisa errada. O problema nao está no comando, o problema eh que a classe do axis não está disponivel (carregada em memoria) pra vc usar

vc ta colocando as bibliotecas dentro da pasta c:/java/axis mesmo?

todos os jars tem que estar nessa pasta pra funcionar, ou então muda o diretorio para onde ta suas libs.

F

Esta acontecendo o mesmo problema comigo.
Alguem tem o xml completo de consulta de status, porque parece que o xml do cabeçalho também foi alterado.
por favor

Vlw

F

Ola Pessoal estou tentando consultar o status do serviço mas não estou conseguindo…alguem sabe se tem algum erro nesse xml de cabeçalho e consulta

<?xml version="1.0" encoding="UTF-8"?> SP 1.01 <?xml version="1.0" encoding="UTF-8"?> 2 STATUS
J

fnunes, eu testei agora com sp e está de boa la…ta funcionando o web service de status nos 3 Estados, MT, SP e RS.

to falando de homologação ne

K

pessoal boa tarde…
estou desenvolvendo o CTE em Minas e estou com algumas dúvidas…
Vcs mandam o cabeçalho da solicitação no HEADER da requisição?
meu WS tah recebendo como entrada:

public CteRetRecepcaoResult cteRetRecepcao( @WebParam(partName = "cteDadosMsg", name = "cteDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao") CteDadosMsg cteDadosMsg, @WebParam(partName = "cteCabecMsg", mode = WebParam.Mode.INOUT, name = "cteCabecMsg", targetNamespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteRetRecepcao", header = true) javax.xml.ws.Holder<CteCabecMsg> cteCabecMsg );
é assim que vcs estão fazendo ?

public String cteRecepcaoLote( @WebParam(name = "cteCabecMsg", targetNamespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao") String cteCabecMsg, @WebParam(name = "cteDadosMsg", targetNamespace = "http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao") String cteDadosMsg);

alguém pode me responder?

desde já obrigada

J

tem que ser no header do soap

K

javaCBA qdo vc recebe a solicitação do emissor, vc espera duas Strings assim como no NFe ou
um CteDadosMsg cteDadosMsg e uma javax.xml.ws.Holder cteCabecMsg?

ao usar o XCF pra produzir os WS ele colocou a entrada dos métodos como sendo
(CteDadosMsg cteDadosMsg, javax.xml.ws.Holder cteCabecMsg)

e se eu usar um plugin do XFire a entrada fica (String cteCabecMsg, String cteDadosMsg).

Como vcs estao fazendo?
Esta é que está sendo minha dúvida.

:roll:

J

eu não sou server, faço apenas o cliente do ws cte

mas o cte nao segue padrao NFE não. Considero o padrão NFe mto mais facil para trabalhar do que o CT-e.

Porque String é uma linguagem universal, ou seja, todas as linguagens sabem tratar um campo texto (String).

O CT-e soh tem um parametro que eh o CteDados do tipo complexo e atributo any. O CteDados não vai como parametro, ele vai dentro do header do soap.

Teve varias mudancas no padrao do NFe para o CTe. Para falar a verdade, complicaram a vida dos javeiros.

Porque trabalhar do jeito que está o padrão CT-e ficou 100% mais dificil.

comecando pela mudanca do padrão soap (nfe é 1.1 e cte é 1.2). depois teve a mudanca dos parametros (nfe aceita duas strings, cte aceita atributo do tipo complexo).

J

escrevi um trecho errado, o CteDados vai como parametro sim. É o CteCabec que não vai como parametro, ele vai no cabecalho

F

Ola pessoal, na NFe mandava com o pedido de status o cabecalho da mens, e no pedido informava a tag que seria consultado o status.
Como vai ser feito agora no CTe pra saber qual UF esta sendo consultado ?

J

agora tem o cteCabecMsg que tem o campo cUF

informa nele

F

Mas como ficaria o xml completo, ate mesmo com o cabeçalho?
Obrigado

F

Pq o xml de pedido ficará assim:

<?xml version="1.0" encoding="UTF-8"?> 2 STATUS

Onde ficaria o xml do cabeçalho?

J

ficaria assim:

<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:Header><cteCabecMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"><cUF>51</cUF><versaoDados>1.01</versaoDados></cteCabecMsg></soap12:Header><soap12:Body><cteDadosMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico"><consStatServCte xmlns="http://www.portalfiscal.inf.br/cte" versao="1.01"><tpAmb>2</tpAmb><xServ>STATUS</xServ></consStatServCte></cteDadosMsg></soap12:Body></soap12:Envelope>
J

Gente boa,

To aqui norvamente, e eu so tenho uma duvida muito basica onde fazer o download do wsdl?

solicito resposta

J

encontrei no seguinte link:

http://hom.cte.fazenda.gov.br//WebServices.aspx

porem solicita certificação, não possuo, alguem pode me mandar os arquivos wsdl?

[email removido]

J

mesmo que alguem te forneca, vc nao vai conseguir te conectar com a Sefaz porque exige um certificado transmissor

J

TENHO A CERTIFICAÇÃO DE PESSOA FISICA, POREM QUANDO TENTO FAZER O DOWNLOAD NOS LINKS QUE CONSTÃO NO SITE:
http://www.cte.fazenda.gov.br//WebServices.aspx INFORMA QUE NÃO POSSUO A CERTIFICAÇÃO.

MESMO COLOCANDO “?WSDL” COMO INFORMA A CERTIFICAÇÃO

A

javaCBA

estou obtendo a seguinte rejeição quando chamo meu WS do CT-e de status desta forma:

CteStatusServicoCTResult cd = teste22.cteStatusServicoCT(dadosMsg);

retorno:

xMotivo = Rejeição: Elemento cteCabecMsg inexistente no SOAP Header

Vc disse que o “cteCabecMsg” vai no HEADER do SOAP … teria como por gentileza vc explicar melhor esta parte? ou fornecer algum exemplo parecido?

obrigado.

A

Pessoas,

consegui fazer o negocio funfá (dá-lhe google)… portanto nao conheco e nao manjo de WS mas vou compartilhar o q descobri e funcionou …

SOAPHeaderElement header = new SOAPHeaderElement("http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico", "cteCabecMsg");
    try {
        SOAPElement node = header.addChildElement("cUF");
        node.addTextNode("35");
        SOAPElement node2 = header.addChildElement("versaoDados");
        node2.addTextNode("1.01");
       _call.addHeader(header);
     }
     catch(Exception e){}
C

javaCBA:
eu não sou server, faço apenas o cliente do ws cte

mas o cte nao segue padrao NFE não. Considero o padrão NFe mto mais facil para trabalhar do que o CT-e.

Porque String é uma linguagem universal, ou seja, todas as linguagens sabem tratar um campo texto (String).

O CT-e soh tem um parametro que eh o CteDados do tipo complexo e atributo any. O CteDados não vai como parametro, ele vai dentro do header do soap.

Teve varias mudancas no padrao do NFe para o CTe. Para falar a verdade, complicaram a vida dos javeiros.

Porque trabalhar do jeito que está o padrão CT-e ficou 100% mais dificil.

comecando pela mudanca do padrão soap (nfe é 1.1 e cte é 1.2). depois teve a mudanca dos parametros (nfe aceita duas strings, cte aceita atributo do tipo complexo).

javaCBA, poderia dar um exemplo de como tratar este tipo de variável (complexo)? Acabo de cair do cavalo, pois achei que o CTe era uma variação do NFe, mas pelo jeito é completamente diferente…

Obrigado

M

Alguém conseguiu gerar os stubs com wsimport utilizando JAX-WS ?

Abraço !

A

http://www.cte.fazenda.gov.br//WebServices.aspx

alguém pode fazer comentários sobre esta página que disponibiliza web service?

M

http://hom.cte.fazenda.gov.br//WebServices.aspx -homologacao
http://www.cte.fazenda.gov.br//WebServices.aspx -producao

endereços do webservices

consegui fazer a comunicacao de todos os Servicos em c# (c sharp)

qquer duvida estamos ae… [email removido]

A

hmmm… show…
:smiley: :smiley: :smiley:

o webservice mais usado é o jax-ws?

M

ae ja nao sei parcero…pq eu nao fiz em JAVA e sim em C# (C SHARP) optei por ser + facil…blz

;D

D

Estou querendo utilizando o CT-e com o JAX-WS!

E gostaria de saber se alguém conseguiu acessar o WSDL ?

tks

Criado 10 de julho de 2009
Ultima resposta 17 de nov. de 2010
Respostas 49
Participantes 13