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:

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:

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]