Envio de Arquivos XML para NFe
Estou com problema para enviar alguns arquivos XML para a receita federal.
Arquivos de notas pequenas consigo transmitir normalmente, porém assim que um arquivo passa de 100kb, me retorna o erro:
"ESOAPHTTPException with message 'É necessário um certificado para concluir a autenticação do cliente - URL:https://nfe.sefaz.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx - SOAPAction:http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao'."
Detalhe, editando o arquivo XML que estou enviando, e removendo items para transformar o arquivo em menos de 100kb, o mesmo envia corretamente.
Pelo validador no site da receita, o mesmo valida, e no teste de simulação mostra que aceitaria a nota.
Meu processo de envio é o seguinte:
HTTPReqResp := THTTPReqResp.Create(nil);
HTTPReqResp.UseUTF8InHeader := True;
HTTPReqResp.URL := WSDL;
HTTPReqResp.SoapAction := Action;
HTTPReqResp.ConnectTimeout:=120000;
HTTPReqResp.ReceiveTimeout:=120000;
HTTPReqResp.SendTimeout:=120000;
HTTPReqResp.ClientCertificate.SerialNum := RetornaSerial(fPSi_DFe_002.CertificadoSelecionado.SerialNumber);
MemoriaStream := TMemoryStream.Create;
HTTPReqResp.Execute(XML, MemoriaStream);
Procurando mais a fundo, e olhando o Soap.SOAPHTTPTrans.pas
que é o .pas que controla os componentes THTTPReqResp
meu erro acontece dentro da função:
function THTTPReqResp.Send(const ASrc: TStream): Integer;
na linha:
Check(not HttpSendRequestEx(Request, @INBuffer, nil,
0(*HSR_INITIATE or HSR_SYNC*), 0));
Favor qualquer dica ou ideia é de grande ajuda.
Arquivos de notas pequenas consigo transmitir normalmente, porém assim que um arquivo passa de 100kb, me retorna o erro:
"ESOAPHTTPException with message 'É necessário um certificado para concluir a autenticação do cliente - URL:https://nfe.sefaz.rs.gov.br/ws/NfeAutorizacao/NFeAutorizacao.asmx - SOAPAction:http://www.portalfiscal.inf.br/nfe/wsdl/NfeAutorizacao'."
Detalhe, editando o arquivo XML que estou enviando, e removendo items para transformar o arquivo em menos de 100kb, o mesmo envia corretamente.
Pelo validador no site da receita, o mesmo valida, e no teste de simulação mostra que aceitaria a nota.
Meu processo de envio é o seguinte:
HTTPReqResp := THTTPReqResp.Create(nil);
HTTPReqResp.UseUTF8InHeader := True;
HTTPReqResp.URL := WSDL;
HTTPReqResp.SoapAction := Action;
HTTPReqResp.ConnectTimeout:=120000;
HTTPReqResp.ReceiveTimeout:=120000;
HTTPReqResp.SendTimeout:=120000;
HTTPReqResp.ClientCertificate.SerialNum := RetornaSerial(fPSi_DFe_002.CertificadoSelecionado.SerialNumber);
MemoriaStream := TMemoryStream.Create;
HTTPReqResp.Execute(XML, MemoriaStream);
Procurando mais a fundo, e olhando o Soap.SOAPHTTPTrans.pas
que é o .pas que controla os componentes THTTPReqResp
meu erro acontece dentro da função:
function THTTPReqResp.Send(const ASrc: TStream): Integer;
na linha:
Check(not HttpSendRequestEx(Request, @INBuffer, nil,
0(*HSR_INITIATE or HSR_SYNC*), 0));
Favor qualquer dica ou ideia é de grande ajuda.
Thairony Holz
Curtidas 0
Melhor post
Douglas
14/02/2015
Olá Thairony Holz, tudo bem?
Procure informar-se sobre o tamanho do arquivo a ser enviado, pois pode ser que você precise instalar um certificado para envio de arquivos com mais de 100kb. Um outro teste que você pode fazer, é indo no próprio site da receita e tentar enviar um arquivo com mais de 100kb.
Procure informar-se sobre o tamanho do arquivo a ser enviado, pois pode ser que você precise instalar um certificado para envio de arquivos com mais de 100kb. Um outro teste que você pode fazer, é indo no próprio site da receita e tentar enviar um arquivo com mais de 100kb.
GOSTEI 1
Mais Respostas
Thairony Holz
12/02/2015
Olá Douglas,
Obrigado pela ajuda, mas ontem mesmo consegui.
O tamanho máximo que pode ser usado na receita é 500kb, e na validação pelo site dava certo.
O meu problema estava em 2 pontos.
A Criação do componente não pode ser feita com "nil", pois dessa forma ele não consegue configurar toda questão de certificados.
No fim, as alterações necessárias para funcionar foram:
HTTPReqResp := THTTPReqResp.Create(fPSi_DFe_001);
HTTPReqResp.MaxSinglePostSize := 1000000;
E transformar todas minhas variaveis que continham o arquivo XML, de String para WideString.
Mas obrigado pela ajuda.
Obrigado pela ajuda, mas ontem mesmo consegui.
O tamanho máximo que pode ser usado na receita é 500kb, e na validação pelo site dava certo.
O meu problema estava em 2 pontos.
A Criação do componente não pode ser feita com "nil", pois dessa forma ele não consegue configurar toda questão de certificados.
No fim, as alterações necessárias para funcionar foram:
HTTPReqResp := THTTPReqResp.Create(fPSi_DFe_001);
HTTPReqResp.MaxSinglePostSize := 1000000;
E transformar todas minhas variaveis que continham o arquivo XML, de String para WideString.
Mas obrigado pela ajuda.
GOSTEI 0
Douglas
12/02/2015
Show de bola Thairony Holz!
GOSTEI 0
Fabio Ferreira..
12/02/2015
Caro Thairony Holz
fPSi_DFe_001
O que seria essa constante ? Para que serve ? Qual unit deve ser informada pois o delphi nao a reconhece.
Grato,
Fabio
fPSi_DFe_001
O que seria essa constante ? Para que serve ? Qual unit deve ser informada pois o delphi nao a reconhece.
Grato,
Fabio
GOSTEI 0