- 10.2. Envio de um CT-e individual
10.2.1. EnviaCTe [v3.00] - 10.2. Envio de um CT-e individual
« Anterior - 10.2.2. BuscaCTe [v3.00]
Próximo »
10.2.1. EnviaCTe [v3.00]
Envia CT-e
Assinatura
int EnviaCTe(string siglaWS, ref string CTe, out string nroRecibo, string nomeCertificado, string versao, out string msgDados, out string msgRetWS, out string msgResultado, out string CTeAssinado, string proxy, string usuario, string senha, string licenca)
Descrição:
Envia CT-e, funcionalidade para enviar um único Conhecimento de Transporte Eletrônico.
A funcionalidade valida o Schema XML do CT-e, realiza assinatura digital, insere o CT-e no lote e faz o envio do CT-e.
A identificação do WS de envio deverá ser informada no parâmetro siglaWS.
Os emissores localizados em UF usuárias da SEFAZ Virtual (AM, BA, CE, ES, GO, MA, PR, RJ, RN, RO, SC, SE, e TO) devem informar a sigla RS; caso a UF tenha aplicação própria (MG, MS, MT, RS e SP), informar a sigla da própria UF.
Envio em Lote
O WS de recepção de CT-e exige que o CT-e esteja contido em uma estrutura de lote, mesmo que seja um único CT-e, assim esta funcionalidade insere o CT-e em lote para realizar o envio, o lote criado pode ser observado em msgDados.
Processo Assíncrono
A recepção do lote pela SEFAZ e a devolução do número do recibo do lote não significa que os CT-e foram autorizados. É necessário consultar o resultado do processamento do CT-e enviado através da funcionalidade BuscaCTe e analisar o cStat da chamada para verificar se o CT-e foi autorizado. Em algumas situações o BuscaCTe não funciona, como nos casos em que o XML de retorno do WS esteja fora do padrão do projeto, prejudicando o processo de obtenção da mensagem XML da resposta, nestes casos, recomendamos o uso da funcionalidade BuscaLote que por não tratar o XML de retorno deve devolver a mensagem XML da resposta do WS.
Escolha do Ambiente
A funcionalidade utiliza o valor informado na tag tpAmb do CT-e, assim o usuário deve tomar o cuidado de informar o tpAmb corretamente para que o CT-e não seja enviado para o ambiente indesejado.
Parâmetros:
nome | tipo | fluxo | descrição |
---|---|---|---|
siglaWS | string | entrada | informar a sigla do WS de envio, veja Tabela de siglaWS |
CTe | string | entrada/saída | informar o CT-e |
nroRecibo | string | saída | retorna o número do recibo do lote atribuído ao lote pela SEFAZ, este será utilizado para consultar o resultado do processamento do lote |
nomeCertificado | string | entrada | informar nome do titular do certificado a ser utilizado na assinatura e conexão SSL |
versao | string | entrada | informar a versão do Evento: 3.00 (o valor 2.00 pode ser informado até o fim da vigência da versão 2.00 previsto para 04/12/17). |
msgDados | string | saída | retorna a mensagem XML enviada para o WS |
msgRetWS | string | saída | retorna o XML de resposta do WS |
msgResultado | string | saída | retorna a literal do resultado da chamada do WS |
CTeAssinado | string | saída | retorna XML do CT-e assinado |
proxy | string | entrada | informar 'http://proxyserver:port' quando existir uso de proxy no ambiente. verificar com o cliente qual é o endereço do servidor proxy e a porta https, a porta padrão do https é 443, assim teríamos algo do tipo 'http://192.168.15.1:443' |
usuario | string | entrada | informar o usuário para autenticação no proxy se necessário |
senha | string | entrada | informar a senha de autenticação no proxy se necessário |
licenca | string | entrada | informar a chave da licença de uso, esta funcionalidade pode ser utilizada sem qualquer restrição no ambiente de homologação. O uso em ambiente de produção requer o licenciamento ou registro, para maiores detalhes veja as condições de uso |
Retorno:
O resultado da chamada do EnviaCTe retorna um código numérico com os seguintes significados:
Erros da validação do XML do CT-e
código Mensagem 1 Erro: tipoXML: [tipoXML] inválido (fora do intervalo 0-50) 2 Erro: arquivo de Schema XML: [nome do arquivo] não localizado 3 Erro: XML mal formado 4 Erro: XML não atende Schema XML 5 Erro: não previsto 6 Erro: a versão do CT-e diverge da versão suportada pela DLL (1.02, 1.03, 1.04) 7 Nenhum Certificado Selecionado 8 Nenhum certificado válido foi encontrado com o nome informado 9 Erro Inesperado: [Mensagem] 10 Selecionado um Certificado de PF 11 Certificado selecionado não tem CNPJ/CPF 12 Certificado digital não tem chave privada Erro Assinatura Digital
código Mensagem 13 Erro: Problema ao acessar o certificado digital - exceção 14 Certificado digital inexistente para [nome] 15 XML mal formado + exceção 16 A tag de assinatura [RefUri] inexiste 17 A tag de assinatura [RefUri] não é unica 18 Erro Ao assinar o documento - ID deve ser string [RefUri] (Atributo) 19 Erro: Ao assinar o documento - exceção Erro Chamada WS
código Mensagem 20 código do ambiente inválido 21 sigla da UF inválida 22 a UF não oferece o serviço 23 Arquivo com a URL do WS não localizado 24 Erro não tratado de abertura/tratamento Arquivo ws.xml 25 Erro de validação de Schema 26 Nenhum Certificado Selecionado 27 Nenhum certificado válido foi encontrado com o nome informado 28 Erro Inesperado no acesso ao certificado digital: [Mensagem] 29 Erro: Time-out ao chamar o WS 30 Erro: exceção da biblioteca criptográfica 31 Erro: conectividade 32 Aplicação não licenciada para o CNPJ [CNPJEmissor] 33 Erro: inesperado ao tratar o código de retorno do WS 34 Erro: O CNPJ informado tem tamanho diferente de 14: [CNPJ informado] 35 Erro: A licença informada tem tamanho diferente de 128: [ Chave informada] 36 Erro: O arquivo não deve ser assinado 37 Erro: Sequência Id: CTe não localizado, validação da licença prejudicada 38 Erro: Versao informada é inválida - [versao]
código | Mensagem | origem | regra |
---|---|---|---|
103 | Lote recebido com sucesso | WS | - |
108 | Serviço Paralisado Momentaneamente (curto prazo) | WS | B03 |
109 | Serviço Paralisado sem Previsão | WS | B04 |
Finalidade do número do recibo do lote
O número do recibo do lote não é o protocolo de autorização. É um número que a SEFAZ atribui ao lote recebido, sendo necessário para consultar o resultado do pocessamento do lote.
Número do Recibo do Lote é número de 15 dígitos com o seguinte significado:
posição Descrição 1 a 2 código da UF do IBGE 3 órgão do tipo autorizador (0 ou 1=SEFAZ normal, 3=SEFAZ VIRTUAL-RS, 5=SEFAZ VIRTUAL-SP, 7 = SVC-RS, 8 = SVC-SP)) 4 a 15 sequencial
Histórico de atualização:
- Versão inicial.
- 2010-09-18 Acréscimo do código exemplo em VB 6.0.
- 2013-01-16 - Revisão de texto da siglaWS
- 2017-01-12 - Alteração para suportar a versão 3.00 (CT-e e CT-e OS)
XML:
Exemplo de XML de retorno da funcionalidade enviaCTe
<retEnviCte versao="1.04" xmlns="http://www.portalfiscal.inf.br/cte"> <tpAmb>2</tpAmb> <cUF>35</cUF> <verAplic>SP_PL_CTe_104a</verAplic> <cStat>103</cStat> <xMotivo>Lote recebido com sucesso</xMotivo> <infRec> <nRec>351100001888700</nRec> <dhRecbto>2011-12-17T12:18:22</dhRecbto> <tMed>1</tMed> </infRec> </retEnviCte>
Importante
O trecho do XML foi formatado para uma melhor visualização, a mensagem original não tem formatação.
Vale observar que a formatação pode corromper a assinatura digital, além de ocupar espaço e ser desnecessária, pois os browser exibem formatado.
Em elaboração
Exemplo de Uso:
*** Visual Basic 6.0 ***
' ' declaração dos parâmetros da chamada da DLL ' Dim siglaWS As String ' informar a sigla do WS de envio: ' . sigla da UF, caso a UF tenha aplicação própria (MG, MS, MT, PR, RS e SP). ' . RS, caso a UF seja usuária da SVRS - SEFAZ Virtual do RS (AM, BA, CE, DF, ES, ' GO, MA, RJ, RN, RO, SC, SE, e TO); ' . SP, caso a UF seja usuária da SVSP - SEFAZ Virtual de SP (AP, PE e RR); ' . RS quando desejar acessar a SVC-RS (AP, MT, MS, PE, RR e SP); ' . SP quando desejar acessar a SVC-SP (AM, BA, CE, DF, ES, GO, MA, MG, PA, RJ, ' RN, RO, RS, SC, SE, e TO); Dim CTe As String ' informar o XML do CT-e Dim nroRecibo As String ' retorna o número do recibo do lote atribuído ao lote pela SEFAZ, este será utilizado para consultar o resultado do processamento do lote Dim nomeCertificado As String ' informar nome do titular do certificado a ser utilizado na assinatura e conexão SSL Dim versao As String ' informar a versão da mensagem do WS - 1.03 / 1.04 Dim msgDados As String ' retorna a mensagem XML enviada para o WS Dim msgRetWS As String ' retorna a mensagem XML de resposta do WS Dim msgResultado As String ' retorna a literal do resultado da chamada do WS Dim CTeAssinado As String ' retorna XML do CT-e assinado Dim proxy As String ' informar 'http://proxyserver:port' quando existir uso de proxy no ambiente. verificar com o cliente qual é o endereço do servidor proxy e a porta https, a porta padrão do https é 443, assim teríamos algo do tipo 'http://192.168.15.1:443' Dim usuario As String ' informar o usuário para autenticação no proxy se necessário Dim senha As String ' informar a senha de autenticação no proxy se necessário Dim licenca As String ' informar a chave da licença de uso, esta funcionalidade pode ser utilizada sem qualquer restrição no ambiente de homologação. O uso em ambiente de produção requer o licenciamento ou registro, para maiores detalhes veja as [condições de uso](https://www.flexdocs.net/cte_util.htm "condições de uso") Dim cStat As Long ' retorna o código do resultado da chamada do WS ' ' inicializa parâmetros de entrada ' siglaWS = "RS" ' SEFAZ Virtual do RS versao = "1.04" ' informar a versão da mensagem do WS - 1.03 / 1.04 nomeCertificado = "CN=NFe - Associacao NF-e:99999090910270, C=BR, L=PORTO ALEGRE, O=Teste Projeto NFe RS, OU=Teste Projeto NFe RS, S=RS" ' campo assunto do certificado digital que será utilizado ' ' inicializa os dados do proxy, informar com valores se o ambiente utilizar proxy ' proxy = "" ' informar IP:porta ou url:porta usuario = "" ' informar o usuario senha = "" ' informar a senha ' ' inicializa a licenca de uso da DLL, necessário para utilizar a DLL em ambiente de produção, não alterar as letras para maiúsculas ' licenca = "eba8c98e925d250b058cbace47cc3d2bfaf107b7036aebb620350f78ad45ffe97fda27139704aeb83ce2a2449c97598869318771c7f823ddb766d78c7cccab1d" ' ' inicializa parâmetros de saída que receberão os retornos da DLL ' nroRecibo = "" ' número do recibo do lote atribuído pela SEFAZ, necessário para consultar o resultado do processamento do lote msgDados = "" ' retorna a mensagem XML enviado pela DLL - lote de CT-e msgRetWS = "" ' retorna a mensagem XML de resposta do WS msgResultado = "" ' retorna a literal do resultado da chamada do WS CTeAssinado = "" ' retorna o CT-e assinado cStat = 0 ' ' carrega o CT-e no parâmetro de entrada ' '------------------------------------------------------------------------------ ' ' ********************************IMPORTANTE************************************ ' caso o XML do CT-e tenha sido gravado em UTF-8 (com uso da função encode_UTF8) ' É NECESSÁRIO voltar o XML para ANSI, uma opção seria utilizar o decode_UTF8 a ' outra opção é utilizar o LerArquivoANSI: ' https://www.flexdocs.net/guiaCTe/funcao.utilidades.LerArquivoANSI.html ' ' A melhor opção é não converter os XML que serão utilizados pela aplicação em UTF-8 ' ' SÓ FAÇA A CONVERSÃO DO STRING DO XML EM UTF-8 COM O procCTe ' '------------------------------------------------------------------------------ Dim nomeArquivo As String ' nome do arquivo que contem o CTe ' nomeArquivo = App.Path & "\CTe.xml" ' ' importante: verificar a existência do arquivo solicitado na pasta do VB e indicar o caminho correto para ele em modo debug ' ' Carrega o conteúdo do nome do arquivo em CTe, só funciona para arquivo com codificação ANSI. ' Open nomeArquivo For Input As #1 CTe = Input$(LOF(1), 1) Close #1 ' ' instancia a DLL ' Dim objCTeUtil As Object Set objCTeUtil = CreateObject("CTe_Util.Util") ' Screen.MousePointer = vbHourglass ' ampulheta cStat = objCTeUtil.EnviaCTe(siglaWS, _ CTe, _ nroRecibo, _ nomeCertificado, _ versao, _ msgDados, _ msgRetWS, _ msgResultado, _ CTeAssinado, _ proxy, usuario, senha, _ licenca) Screen.MousePointer = vbDefault ' normal If cStat = 103 Then ' ' grava CT-e Assinado ' nomeArquivo = "CTeAssinado.xml" Open nomeArquivo For Output As #1 Print #1, CTeAssinado Close #1 MsgBox Str(cStat) & " - " & msgResultado & vbCrLf & vbCrLf & "Faça a busca do resultado do processamento do recibo: " & nroRecibo, vbInformation, "Informação" Else ' ' grava Log do Erro ' nomeArquivo = "logErro.txt" Open nomeArquivo For Output As #1 Print #1, "EnviaCTe :" & Now Print #1, "siglaWS = [" & siglaWS & "]" Print #1, "Certificado = [" & nomeCertificado & "]" Print #1, "versao = [" & versao & "]" Print #1, "msgDados = [" & msgDados & "]" Print #1, "msgResultado = [" & msgResultado & "]" Print #1, "msgRetWS = [" & msgRetWS & "]" Close #1 MsgBox Str(cStat) & " - " & msgResultado & vbCrLf & vbCrLf & msgRetWS, vbError, "Atenção: Falha no envio..." End If ' libera DLL Set objCTeUtil = Nothing
- 10.2.1. EnviaCTe [v3.00]
10.2. Envio de um CT-e individual - « Anterior
10.2. Envio de um CT-e individual - Próximo »
10.2.2. BuscaCTe [v3.00]