10.2. Envio de um CT-e individual
10.2.2. BuscaCTe [v3.00]
10.2.1. EnviaCTe [v3.00]
« Anterior
10.2.3. Envia CT-e Síncrono 03-08-19
Próximo »

10.2.2. BuscaCTe [v3.00]

Busca CT-e

Assinatura

int BuscaCTe(string siglaWS, int tipoAmbiente, string siglaUF, ref string CTeAssinado, ref string nroRecibo, out string procCTe, out string nroProtocolo, out string dAutorizacao, string nomeCertificado, string versao, out string msgDados, out string msgRetWS, out string msgResultado, string proxy, string usuario, string senha, string licenca)

Descrição:

Busca o resultado do processamento do CT-e enviado através do EnviaCTe.

Esta funcionalidade é complementar à funcionalidade EnviaCTe e serve para buscar o resultado do processamento do CT-e. O principal parâmetro de entrada desta funcionalidade é o número do recibo do lote obtido no envio do CTe (EnviaCTe).

Preenchimento da siglaWS

informar a sigla do WS de envio, veja Tabela de siglaWS, se a siglaWS não for informada, o WS será identificado com base nas informações existente no número do recibo do lote.

Número do recibo do lote

A funcionalidade identifica o WS que deve ser consultado com base no número do recibo e do tipo de ambiente.

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.

Significado do número do recibo do Lote:

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

Preenchimento do nomeCertificado

Informar o Nome do titular (campo Assunto) do certificado digital a ser utilizado na conexão SSL.

ALTERAÇÃO IMPORTANTE NO RETORNO DA VERSÃO 3.00

O WS não devolve mais o nRec nos caso de rejeição por duplicidade (cStat=204, 539), esta alteração vai prejudicar a montagem do procCTe, naqueles situações em que ocorre um problema na comunicação/WS e não obtemos o nRec...

Parâmetros:

nome tipo fluxo descrição
siglaWS string entrada informar a sigla do WS de envio, veja Tabela de siglaWS
tipoAmbiente inteiro entrada informar o código do ambiente desejado: 1- produção ou 2-homologação
siglaUF string entrada informar a sigla da UF
CTeAssinado string entrada/saída informar o XML do CTeAssinado que será utilizado para montar o procCTe em caso de autorização de uso
nroRecibo string entrada/saída informar o número do recibo do lote objeto da busca, em caso de autorização de uso o parâmetro retorna o número do protocolo e data de autorização no formato: nnnnnnnnnnnnnnn dd/mm/aaaa hh:mm:ss, que pode ser utilizado para mostrar no DACTE
procCTe string saída retorna procCTe (CTe + protocolo de autorização)
nroProtocolo string saída retorna o número do protocolo de autorização de uso do CT-e
dAutorizacao string saída retorna data e hora da autorização
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 do pedido de busca resultado do processamento do lote do CT-e enviado para o WS
msgRetWS string saída retorna a mensagem XML de resposta do WS
msgResultado string saída retorna a literal do resultado da chamada do WS
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 BuscaCTe devolve um código numérico com os seguintes significados:

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: XML com caracteres de identificação de codificação UTF-8/16/32/7
7 Erro: Tipo Ambiente informado: [tipoAmbiente] diverge do tpAmb do CT-e entrada:[tipoAmbiente]
8 Erro: tag tipoAmbiente inexistente no CT-e de entrada
9 Erro: UF informada: [siglaUF] diverge do cUF do emitente do CT-e entrada:[siglaUF]
10 Erro: tag cUF do emitente inexistente no CT-e de entrada
11 Erro: tag CNPJ do emitente não localizada no arquivo de entrada
12 Erro: codigo do ambiente inválido
13 Erro: sigla da UF inválida
14 Erro: a UF não oferece o serviço
15 Erro: Arquivo com a URL do WS não localizado
16 Erro não tratado de abertura/tratamento Arquivo ws.xml
17 Erro de validação de Schema
18 Erro: Nenhum Certificado Selecionado
19 Erro: Nenhum certificado válido foi encontrado com o nome informado
20 Erro Inesperado no acesso ao certificado digital: [Mensagem]
21 Erro: Time-out ao chamar o WS
22 Erro: exceção da biblioteca criptográfica
23 Erro: conectividade
24 Erro: tipoXML: [tipoXML]inválido (fora do intervalo 0-50)
25 Erro: arquivo de Schema XML: [nome do arquivo] não localizado
26 Erro: XML mal formado
27 Erro: XML não atende Schema XML
28 Erro: não previsto
29 Erro: XML com caracteres de identificação de codificação UTF-8/16/32/7
30 Erro: tag cStat não localizado na mensagem de retorno
31 Erro: tag xMotivo não localizado na mensagem de retorno
32 Erro: [DigestValue] do CT-e diverge do [digVal] do protocolo
33 Erro: Busca do lote: [recibo] mas não existe protocolo para o CT-e com chave de acesso
34 Erro: inesperado ao tratar o XML do retorno do WS
35 Erro: tag cStat não localizado no Protocolo de retorno [protCTe]
36 Erro: tag xMotivo não localizado no Protocolo de retorno [protCTe]
37 Erro: Funcionalidade [BuscaCTe] não licenciada para o CNPJ [CNPJ] e licenca [licenca]
38 Erro: O CNPJ do emitente tem tamanho diferente de 14 - [CNPJ] - tam [tamanho]
39 Erro: A licença informada tem tamanho diferente de 128 - [licenca] - tam [tamanho]
40 Erro: inesperado ao tratar o XML de retorno do WS de busca resultado
41 Erro: tipoAmbiente não informado

Se a mensagem de busca estiver incorreta ou o lote ainda não tiver sido processado pelo WS teremos os seguintes códigos de retorno:

código Mensagem origem regra
105 Lote em processamento WS E04
106 Lote não localizado WS E03
108 Serviço Paralisado Momentaneamente (curto prazo) WS B03
109 Serviço Paralisado sem Previsão WS B04
214 Rejeição: Tamanho da mensagem excedeu o limite estabelecido WS B01
215 Rejeição: Falha no schema XML WS D01
223 Rejeição: CNPJ do transmissor do lote difere do CNPJ do transmissor da consulta WS E05
238 Rejeição: Cabeçalho - Versão do arquivo XML superior a Versão vigente WS C05
239 Rejeição: Cabeçalho - Versão do arquivo XML não suportada WS C06
242 Rejeição: Elemento cteCabecMsg inexistente no SOAP Header WS C01
243 Rejeição: XML Mal Formado WS B02
248 Rejeição: UF do Recibo diverge da UF autorizadora WS E02
252 Rejeição: Ambiente informado diverge do Ambiente de recebimento WS G001
280 Rejeição: Certificado Transmissor inválido WS A01
281 Rejeição: Certificado Transmissor Data Validade WS A02
282 Rejeição: Certificado Transmissor sem CNPJ WS A07
283 Rejeição: Certificado Transmissor - erro Cadeia de Certificação WS A03
284 Rejeição: Certificado Transmissor revogado WS A05
285 Rejeição: Certificado Transmissor difere ICP-Brasil WS A06
286 Rejeição: Certificado Transmissor erro no acesso a LCR WS A04
402 Rejeição: XML da área de dados com codificação diferente de UTF-8 WS D03
404 Rejeição: Uso de prefixo de namespace não permitido WS D02
409 Rejeição: Campo cUF inexistente no elemento cteCabecMsg do SOAP Header WS C02
410 Rejeição: UF informada no campo cUF não é atendida pelo WebService WS C03
411 Rejeição: Campo versaoDados inexistente no elemento cteCabecMsg do SOAP Header WS C04
473 Rejeição: Tipo Autorizador do Recibo diverge do Órgão Autorizador WS E02a

Se o CT-e foi recepcionado e processado pelo WS teremos os seguintes códigos de retorno:

código Mensagem origem regra
100 Autorizado o uso do CT-e WS -
203 Rejeição: Emissor não habilitado para emissão do CT-e WS G062
204 Rejeição: Existe CT-e já autorizado com a mesma série e número WS G115
205 Rejeição: CT-e está denegado na base de dados da SEFAZ WS G112
G117
G076
G085
G094
G103
206 Rejeição: Número de CT-e já está inutilizado na Base de dados da SEFAZ WS G118
209 Rejeição: IE do emitente inválida WS G060
210 Rejeição: IE do destinatário inválida WS G081
212 Rejeição: Data de emissão CT-e posterior a data de recebimento WS G066
213 Rejeição: CNPJ-Base do Emitente difere do CNPJ-Base do Certificado Digital WS F03
214 Rejeição: Tamanho da mensagem excedeu o limite estabelecido WS B01
218 Rejeição: CT-e já está cancelada na base de dados da SEFAZ WS G116
225 Rejeição: Falha no Schema XML do CT-e WS D01
226 Rejeição: Código da UF do Emitente diverge da UF autorizadora WS G002
227 Rejeição: Erro na composição do Campo ID WS G005
228 Rejeição: Data de Emissão muito atrasada WS G067
229 Rejeição: IE do emitente não informada WS G059
230 Rejeição: IE do emitente não cadastrada WS G063
231 Rejeição: IE do emitente não vinculada ao CNPJ WS G064
235 Rejeição: Inscrição SUFRAMA inválida WS G113
238 Rejeição: Cabeçalho - Versão do arquivo XML superior a Versão vigente WS C05
239 Rejeição: Cabeçalho - Versão do arquivo XML não suportada WS C06
242 Rejeição: Elemento cteCabecMsg inexistente no SOAP Header WS C01
243 Rejeição: XML Mal Formado WS B02
244 Rejeição: CNPJ do Certificado Digital difere do CNPJ da Matriz e do CNPJ do Emitente WS F04
245 Rejeição: CNPJ Emitente não cadastrado WS G061
247 Rejeição: Sigla da UF do Emitente diverge da UF autorizadora WS G003
251 Rejeição: UF/Município destinatário não pertence a SUFRAMA WS G114
252 Rejeição: Ambiente informado diverge do Ambiente de recebimento WS G001
253 Rejeição: Digito Verificador da chave de acesso composta inválida WS G006
254 Rejeição: CT-e referenciado não informado para CT-e complementar WS G119
267 Rejeição: CT-e Complementar referencia uma CT-e inexistente WS G121
269 Rejeição: CNPJ Emitente do CT-e Complementar difere do CNPJ do CT complementado WS G120
280 Rejeição: Certificado Transmissor inválido WS A01
281 Rejeição: Certificado Transmissor Data Validade WS A02
282 Rejeição: Certificado Transmissor sem CNPJ WS A07
283 Rejeição: Certificado Transmissor - erro Cadeia de Certificação WS A03
284 Rejeição: Certificado Transmissor revogado WS A05
285 Rejeição: Certificado Transmissor difere ICP-Brasil WS A06
286 Rejeição: Certificado Transmissor erro no acesso a LCR WS A04
290 Rejeição: Certificado Assinatura inválida WS E01
291 Rejeição: Certificado Assinatura Data Validade WS E02
292 Rejeição: Certificado Assinatura sem CNPJ WS E03
293 Rejeição: Certificado Assinatura - erro Cadeia de Certificação WS E04
294 Rejeição: Certificado Assinatura revogado WS E06
295 Rejeição: Certificado Assinatura difere ICP-Brasil WS E07
296 Rejeição: Certificado Assinatura erro no acesso a LCR WS E05
297 Rejeição: Assinatura difere do calculado WS F02
298 Rejeição: Assinatura difere do padrão do Projeto WS F01
301 Uso Denegado : Irregularidade fiscal do emitente WS G065
302 Uso Denegado : Irregularidade fiscal do remetente WS G076
303 Uso Denegado : Irregularidade fiscal do destinatário WS G085
304 Uso Denegado : Irregularidade fiscal do expedidor WS G094
305 Uso Denegado : Irregularidade fiscal do recebedor WS G103
306 Uso Denegado : Irregularidade fiscal do tomador WS G112
402 Rejeição: XML da área de dados com codificação diferente de UTF-8 WS D03
404 Rejeição: Uso de prefixo de namespace não permitido WS D02
409 Rejeição: Campo cUF inexistente no elemento cteCabecMsg do SOAP Header WS C02
410 Rejeição: UF informada no campo cUF não é atendida pelo WebService WS C03
411 Rejeição: Campo versaoDados inexistente no elemento cteCabecMsg do SOAP Header WS C04
413 Rejeição: Código de Município de término da prestação: dígito inválido WS G127
414 Rejeição: Código de Município diverge da UF de término da prestação WS G128
415 Rejeição: CNPJ do remetente inválido WS G068
416 Rejeição: CPF do remetente inválido WS G069
417 Rejeição: Código de Município de localização remetente: dígito inválido WS G070
418 Rejeição: Código de Município diverge da UF de localização remetente WS G071
419 Rejeição: IE do remetente inválida WS G072
420 Rejeição: CNPJ remetente não cadastrado WS G073
421 Rejeição: IE do remetente não cadastrada WS G074
422 Rejeição: IE do remetente não vinculada ao CNPJ WS G075
423 Rejeição: Código de Município de localização destinatário: dígito inválido WS G079
424 Rejeição: Código de Município diverge da UF de localização destinatário WS G080
425 Rejeição: CNPJ destinatário não cadastrado WS G082
426 Rejeição: IE do destinatário não cadastrada WS G083
427 Rejeição: IE do destinatário não vinculada ao CNPJ WS G084
428 Rejeição: CNPJ do expedidor inválido WS G086
429 Rejeição: CPF do expedidor inválido WS G087
430 Rejeição: Código de Município de localização expedidor: dígito inválido WS G088
431 Rejeição: Código de Município diverge da UF de localização expedidor WS G089
432 Rejeição: IE do expedidor inválida WS G090
433 Rejeição: CNPJ expedidor não cadastrado WS G091
434 Rejeição: IE do expedidor não cadastrada WS G092
435 Rejeição: IE do expedidor não vinculada ao CNPJ WS G093
436 Rejeição: CNPJ do recebedor inválido WS G095
437 Rejeição: CPF do recebedor inválido WS G096
438 Rejeição: Código de Município de localização do recebedor: dígito inválido WS G097
439 Rejeição: Código de Município diverge da UF de localização recebedor WS G098
440 Rejeição: IE do recebedor inválida WS G099
441 Rejeição: CNPJ recebedor não cadastrado WS G100
442 Rejeição: IE do recebedor não cadastrada WS G101
443 Rejeição: IE do recebedor não vinculada ao CNPJ WS G102
444 Rejeição: CNPJ do tomador inválido WS G104
445 Rejeição: CPF do tomador inválido WS G105
446 Rejeição: Código de Município de localização tomador: dígito inválido WS G106
447 Rejeição: Código de Município diverge da UF de localização tomador WS G107
448 Rejeição: IE do tomador inválida WS G108
449 Rejeição: CNPJ tomador não cadastrado WS G109
455 Rejeição: Código de Município de início da prestação: dígito inválido WS G125
456 Rejeição: Código de Município diverge da UF de início da prestação WS G126
457 Rejeição: O lote contém CT-e de mais de um estabelecimento emissor WS D04
458 Rejeição: Grupo de CT-e normal não informado para CT-e normal WS G007
459 Rejeição: Grupo de CT-e complementar não informado para CT-e complementar WS G008
460 Rejeição: Não informado os dados do remetente indicado como tomador do serviço WS G009
461 Rejeição: Não informado os dados do expedidor indicado como tomador do serviço WS G010
462 Rejeição: Não informado os dados do recebedor indicado como tomador do serviço WS G011
463 Rejeição: Não informado os dados do destinatário indicado como tomador do serviço WS G012
464 Rejeição: informação do modal rodoviário não informado WS G013
465 Rejeição: informação do modal aéreo não informado WS G014
466 Rejeição: informação do modal aquaviário não informado WS G015
467 Rejeição: informação do modal ferroviário não informado WS G016
468 Rejeição: informação do modal dutoviário não informado WS G017
469 Rejeição: Remetente deve ser informado para tipo de serviço diferente de redespacho intermediário WS G018
470 Rejeição: Destinatário deve ser informado para tipo de serviço diferente de redespacho intermediário WS G019
474 Rejeição: Expedidor deve ser informado para tipo de serviço de redespacho intermédiario WS G020
475 Rejeição: Recebedor deve ser informado para tipo de serviço de redespacho intermédiario WS G021
476 Rejeição: O tomador do serviço no tipo de serviço normal não pode ser o expedidor WS G022
477 Rejeição: O tomador do serviço no tipo de serviço normal não pode ser o recebedor WS G023
489 Rejeição: IE do tomador não cadastrada WS G110
490 Rejeição: IE do tomador não vinculada ao CNPJ WS G111
491 Rejeição: CT-e referenciado é CT-e complementar WS G122
492 Rejeição: Código de Município de emissão: dígito inválido WS G123
493 Rejeição: Código de Município diverge da UF de emissão WS G124
494 Rejeição: Processo de emissão informado inválido WS G004
496 Rejeição: Grupo CT-e de Anulação não informado para o CT-e de Anulação WS G024
497 Rejeição: CT-e objeto da anulação inexistente WS G026
498 Rejeição: CT-e objeto da anulação deve estar com a situação autorizada (não pode estar cancelado ou denegado) WS G027
499 Rejeição: CT-e de anulação deve ter tipo de emissão = normal WS G025
500 Rejeição: CT-e objeto da anulação deve ter finalidade = 0 (normal) WS G030
501 Rejeição: Data de emissão do CT-e de Anulação deve ocorrer em até 60 dias WS G031
502 Rejeição: CT-e de anulação deve ter o valor do ICMS e de prestação iguais ao CT-e original WS G032
503 Rejeição: CT-e Susbtituto deve ter tipo de emissão = normal WS G035
505 Rejeição: Grupo CT-e de Substituição não informado para o CT-e de Substituição WS G036
510 Rejeição: CNPJ do emitente do CT-e substituto deve ser igual ao informado no CT-e substituído WS G041
511 Rejeição: CNPJ do remetente do CT-e substituto deve ser igual ao informado no CT-e substituído WS G042
512 Rejeição: CNPJ do destinatário do CT-e substituto deve ser igual ao informado no CT-e substituído WS G043
550 Rejeição: O CNPJ do expedidor do CT-e substituto deve ser igual ao informado no CTe substituído WS G044
551 Rejeição: O CNPJ do recebedor do CT-e substituto deve ser igual ao informado no CTe substituído WS G045
552 Rejeição: O CNPJ do tomador do CT-e substituto deve ser igual ao informado no CT-e substituído WS G046
553 Rejeição: A IE do emitente do CT-e substituto deve ser igual ao informado no CT-e substituído WS G047
554 Rejeição: A IE do remetente do CT-e substituto deve ser igual ao informado no CT-e substituído WS G048
555 Rejeição: A IE do destinatário do CT-e substituto deve ser igual ao informado no CT-e substituído WS G049
556 Rejeição: A IE do expedidor do CT-e substituto deve ser igual ao informado no CT-e substituído WS G050
557 Rejeição: A IE do recebedor do CT-e substituto deve ser igual ao informado no CT-e substituído WS G051
558 Rejeição: A IE do tomador do CT-e substituto deve ser igual ao informado no CT-e substituído WS G052
559 Rejeição: A UF de início de prestação deve ser igual ao informado no CT-e substituído WS G053
560 Rejeição: A UF de fim de prestação deve ser igual ao informado no CT-e substituído WS G054
563 Rejeição: A anulação de um CT-e deve ocorrer no prazo máximo de 60 contados da data de emissão do CT-e objeto de Substituição WS G055
565 Rejeição: O CT-e só pode ser anulado pelo emitente WS G028
566 Rejeição: CT-e objeto da anulação não pode ter sido anulado anteriormente WS G033
567 Rejeição: CT-e objeto da anulação não pode ter sido substituído anteriormente WS G034
568 Rejeição: CT-e a ser substituído inexistente WS G037
569 Rejeição: CT-e a ser substituído deve estar com a situação autorizada (não pode estar cancelado ou denegado) WS G038
570 Rejeição: CT-e a ser substituído não pode ter sido substituído anteriormente WS G039
571 Rejeição: CT-e a ser substituído deve ter finalidade = 0 (normal) WS G040
572 Rejeição: CT-e de anulação informado no grupo “Tomador não é contribuinte do ICMS” inexistente WS G056
573 Rejeição: CT-e de anulação informado no grupo “Tomador não é contribuinte do ICMS” deve ter finalidade=2(Anulação) WS G057

O procCTe

O procCTe é uma estrutura XML de distribuição do CT-e composta pelo XML do CT-e e pelo protocolo de autorização de uso, sendo a forma padrão de armazenamento e distribuição do projeto. Muitos desenvolvedores são pegos de surpresa quando o usuário, o contador ou o destinatário solicita o procCTe. Assim, não deixe de gravar o procCTe que a funcionalidade retorna. Também é importante que a string da procCTe seja convertida em UTF-8 antes da gravação para evitar problemas de leitura no browser ou no aplicativo visualizador da Receita Federal do Brasil, para maiores detalhes veja o post: Distribuição da NF-e para o Destinatário, com as devidas adaptações ao CTe.

Histórico de atualização:

Exemplo de uso:

Visual Basic 6.0

'
' declaração da função Sleep que será utilizada para evitar o consumo indevido
'
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'
'
'
'
'  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 tipoAmbiente As Long        ' informar o código do ambiente desejado: 1- produção ou 2-homologação
Dim siglaUF As String           ' informar a sigla da UF do emissor
Dim CTeAssinado As String       ' informar o XML do CTe Assinado
Dim nroRecibo As String         ' informar com o número do recibo obtido como resposta do envio do CT-e
Dim procCTe As String           ' retorna o XML do procCTe
Dim nProtocolo As String        ' retorna o número do protocolo de autorização de uso do CT-e, informação necessária para cancelar o CT-e
Dim dAutorizacao As String      ' retorna a data e hora de autorização do CT-e
Dim nomeCertificado As String   ' informar o Nome do titular (campo Assunto) do certificado digital a ser utilizado na conexão SSL. Ex.: "CN=NFe - Associacao NF-e:99999090910270, C=BR, L=PORTO ALEGRE, O=Teste Projeto NFe RS, OU=Teste Projeto NFe RS, S=RS"
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 o resultado da chamada da funcionalidade, se o WS acessado com sucesso será devolvido o cStat da resposta do WS
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 resultado As Long           ' retorna o código do resultado da chamada do WS
'
' inicializa parâmetros de entrada
'
siglaWS = "RS"          ' SEFAZ Virtual do RS
siglaUF = "AM"          ' SEFAZ do emissor
tipoAmbiente = 2        ' informar o código do ambiente desejado: 1- produção ou 2-homologação
versao = "1.04"         ' informar a versão da mensagem do WS - 1.03 / 1.04
nomeCertificado = "CN=M R M KATO ASAKURA ME:69621187915, OU=AC CAIXA PJ, OU=Caixa Economica Federal, O=ICP-Brasil, C=br"        ' 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
'
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
'
' informações de interesse do CT-e autorizado
'
procCTe = ""            ' retorno o procCTe que deve ser armazenado e distribuído para o tomador do serviço
nProtocolo = ""         ' número do protocolo de autorização de uso do CT-e, informação necessária para cancelar o CT-e
dAutorizacao = ""       ' data e hora de autorização do CT-e
resultado = ""      ' retorna o código do resultado da chamada do WS
'
'  parâmetros de busca do lote de CT-e
'
nroRecibo = "132110000001"              ' informar com o número do recibo obtido como resposta do envio do CT-e
'
' carrega o CT-e Assinado no parâmetro de entrada
'
Dim nomeArquivo As String  ' nome do arquivo que contem o CTe
'
nomeArquivo = App.Path & "\CTeAssinado.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 CTeAssinado
'
'------------------------------------------------------------------------------
'
'  ********************************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
'
'------------------------------------------------------------------------------
'
Open nomeArquivo For Input As #1
CTeAssinado = Input$(LOF(1), 1)
Close #1
'
' instancia a DLL
'
Dim objCTeUtil As Object
 
Set objCTeUtil = CreateObject("CTe_Util.Util")
 
'
resultado = 105     ' inicializa resultado com 105, lote em processamento, a aplicação deve persistir na busca enquanto resultado = 105

Screen.MousePointer = vbHourglass    ' ampulheta

Do While resultado = 105
 
resultado = objCTeUtil.BuscaCTe(siglaWS, _
                                tipoAmbiente, _
                                siglaUF, _
                                CTeAssinado, _
                                nroRecibo, _
                                procCTe, _
                                nProtocolo, _
                                dAutorizacao, _
                                nomeCertificado, _
                                versao, _
                                msgDados, _
                                msgRetWS, _
                                msgResultado, _
                                proxy, usuario, senha, _
                                licenca)
If resultado = 105 Then
                         ' aguardar 15 segundos para não ocorrer 656 - Rejeição: Consumo Indevido do WS
                         ' 1 segundo equivale a 1000 ms, assim devemos informar 15000
   Sleep (15000)         ' declarar a função Sleep no aplicativo
                         ' Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
End If
 
Loop
 
Screen.MousePointer = vbDefault ' normal

If resultado = 100 Then
   '
   '  grava procCTe
   '
   nomeArquivo = "procCTe.xml"
   Open nomeArquivo For Output As #1
   Print #1, UTF8_Encode(procCTe)        ' grava o XML codificado em UTF-8, se não fizer isto, o destinaário não conseguir
                                         ' abrir o XML utilizando o browser IE
                                         ' guarde o procCTe sem fazer a codificação em UTF-8 na sua aplicação, pois a
                                         ' conversão da string para UTF-8, corrompe o arquivo quando lido em aplicação VB ou
                                         ' Delphi que tem adotam codificação padrão ANSI
   Close #1
   MsgBox Str(resultado) & " - " & msgResultado & vbCrLf & vbCrLf & "CT-e autorizado em : " & dAutorizacao & " protocolo de autorização: " & nProtocolo, vbInformation, "Informação"
Else
   '
   '  grava Log do Erro
   '
   nomeArquivo = "logErro.txt"
   Open nomeArquivo For Output As #1
   Print #1, "BuscaCTe :" & Now
   Print #1, "siglaWS      = [" & siglaWS & "]"
   Print #1, "siglaUF      = [" & siglaUF & "]"
   Print #1, "Ambiente     = [" & Str(tipoAmbiente) & "]"
   Print #1, "Numero Recibo= [" & nroRecibo & "]"
   Print #1, "Certificado  = [" & nomeCertificado & "]"
   Print #1, "versao       = [" & versao & "]"
   Print #1, "msgDados     = [" & msgDados & "]"
   Print #1, "msgResultado = [" & msgResultado & "]"
   Print #1, "msgRetWS     = [" & msgRetWS & "]"
   Close #1
 
   MsgBox Str(resultado) & " - " & msgResultado & vbCrLf & vbCrLf & msgRetWS, vbError, "Atenção: Falha no envio..."
 
End If
 
' libera DLL

Set objCTeUtil = Nothing

O procCTe deve ser gravado em codificação UTF-8

A maioria das linguagens trabalham em codificação ANSI, assim é importante que a string da procCTe seja convertida em UTF-8 antes da gravação para evitar problemas de leitura no browser ou no aplicativo visualizador da Receita Federal do Brasil, para maiores detalhes veja o post: Distribuição da NF-e para o Destinatário, com as devidas adaptações ao CTe.

Função para converter a string em codificação UTF-8

 
'
'  Converte a string para codificação UTF-8
'
'  Este processo evita problemas de leitura via browser
'  e principalmente no visualizador da RFB
'
' *****************************************************
' IMPORTANTE:
' A conversão sucessiva corrompe a string, assim nunca faça a conversão em uma string UTF-8
'
' Caso receba ou tenha que trabalhar com a string já codificada em UTF-8 é necessário fazer a operação inversa.
'
'  veja: https://www.flexdocs.net/guiaCTe/funcao.utilidades.LerArquivoANSI.html
'

Private Function UTF8_Encode(ByVal sStr As String)
    Dim l As Long, lChar As Integer, sUtf8 As String
    For l = 1 To Len(sStr)
        lChar = AscW(Mid(sStr, l, 1))
        If lChar < 128 Then
            sUtf8 = sUtf8 + Mid(sStr, l, 1)
        ElseIf ((lChar > 127) And (lChar < 2048)) Then
            sUtf8 = sUtf8 + Chr(((lChar \ 64) Or 192))
            sUtf8 = sUtf8 + Chr(((lChar And 63) Or 128))
        Else
            sUtf8 = sUtf8 + Chr(((lChar \ 144) Or 234))
            sUtf8 = sUtf8 + Chr((((lChar \ 64) And 63) Or 128))
            sUtf8 = sUtf8 + Chr(((lChar And 63) Or 128))
        End If
    Next l
    UTF8_Encode = sUtf8
End Function
10.2.2. BuscaCTe [v3.00]
10.2. Envio de um CT-e individual
« Anterior
10.2.1. EnviaCTe [v3.00]
Próximo »
10.2.3. Envia CT-e Síncrono 03-08-19