- 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:
- 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
- 2013-05-21 Revisão do código exemplo VB 6.0 para evitar o consumo indevido
- 2017-01-12 - Alteração para suportar a versão 3.00 (CT-e e CT-e OS)
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