Ir para conteúdo
  • Cadastre-se

Renan Garcia de Oliveira

Membros
  • Total de ítens

    58
  • Registro em

  • Última visita

Tudo que Renan Garcia de Oliveira postou

  1. Segue em anexo o arquivo .zip que gero pelo sistema, e na hora do envio dá a mensagem de caractere inválido. Eu já tentei enviar ele manualmente pela página de upload do sngpc e por lá funciona normalmente. 20130510172252309.zip
  2. Eu já esgotei todas as minhas possibilidades, alguém chegou a se deparar com esse erro ao enviar o SNGPC via webservice e conseguiu contornar ele? *Os códigos utilizados seguem na resposta anterior.
  3. "Caracteres inválidos encontrados no texto" Não aguento mais essa frase heheheheh mexi no código e agora ele está assim: vFileName := GetXmlCompressedInZipFileFromString(pArquivo); vHash := MD5File(vFileName); vFile := FileToByteArray(vFileName); WsTeste := GetSngpcSoapTeste(); Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, vFile, vHash); Seguem abaixo as funções utilizadas: function TSngpc2Gerenciador.GetXmlCompressedInZipFileFromString(pString: string): string; var vFileName: string; vXmlDocument: TStrings; vZipFile: TZipFile; begin //Salva o arquivo vFileName := FormatDateTime('yyyymmddhhnnsszzz', Now); if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc') then ForceDirectories(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc'); vXmlDocument := TStringList.Create; vXmlDocument.Text := StringReplace(StringReplace(pString, #10, '', [rfReplaceAll]), #13, '', [rfReplaceAll]); vXmlDocument.SaveToFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vFileName + '.xml'); //Compacta o arquivo vZipFile := TZipFile.Create; try vZipFile.Open(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vFileName + '.zip', zmWrite); vZipFile.Add(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vFileName + '.xml'); vZipFile.Close; finally vZipFile.Free; end; //Remove o XML antigo DeleteFile(ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vFileName + '.xml'); //Atribui o valor de retorno Result := ExtractFilePath(ParamStr(0)) + 'i_o\Sngpc\' + vFileName + '.zip'; end; function TSngpc2Gerenciador.MD5File(const pFileName: string): string; var vMD5 : TIdHashMessageDigest5; vFs : TFileStream; begin vMD5 := TIdHashMessageDigest5.Create; vFs := TFileStream.Create(pFileName, fmOpenRead OR fmShareDenyWrite) ; try Result := vMD5.HashStreamAsHex(vFs); finally vMD5.Free; vFs.Free; end; end; function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var vBytesRead, vBytesToWrite, vCount: integer; vF: file of Byte; vTemp: Pointer; begin AssignFile(vF, pFileName); Reset(vF); try vCount := FileSize(vF); SetLength(Result, vCount); vTemp := @Result[0]; vBytesRead := BLOCK_SIZE; while (vBytesRead = BLOCK_SIZE) do begin vBytesToWrite := Min(vCount, BLOCK_SIZE); BlockRead(vF, vTemp^, vBytesToWrite, vBytesRead); vTemp := Pointer(LongInt(vTemp) + BLOCK_SIZE); vCount := vCount - vBytesRead; end; finally CloseFile(vF); end; end; Código novo, mesmo erro
  4. Ainda continua o erro, ali basicamente você trocou 6 por meia dúzia, porque o método GetXmlCompressedInZipFileFromString recebe o conteúdo do XML e retorna o nome (endereço) do arquivo .zip, o método FileToByteArray recebe o nome do arquivo e devolve um TByteDynArray. Então eu chamar um dentro do outro ou um depois do outro dá no mesmo.
  5. Ainda não está funcionando, eu precisei salvar o arquivo .xml em disco e pedir para os usuários compactarem e enviarem pelo site, adivinha se já não estão reclamando... ehueheuheuhe Estou usando o seguinte método para compactar: function TSngpc2Gerenciador.GetXmlCompressedInZipFileFromString(pString: string): string; var vXmlDocument: TStrings; vFileName: string; vInFile, vTmpFile: TFileStream; vCompr: TCompressionStream; vL: Integer; begin //Salva o arquivo vFileName := FormatDateTime('yyyymmddhhnnsszzz', Now); vXmlDocument := TStringList.Create; vXmlDocument.Text := StringReplace(StringReplace(pString, #10, '', [rfReplaceAll]), #10, '', [rfReplaceAll]); vXmlDocument.SaveToFile(ExtractFilePath(ParamStr(0)) + '\' + vFileName + '.xml'); //Compacta o arquivo vInFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + '\' + vFileName + '.xml', fmOpenRead); vTmpFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + '\' + vFileName + '.zip', fmCreate); vCompr := TCompressionStream.Create(clDefault, vTmpFile); vL := vInFile.Size; try vCompr.CopyFrom(vInFile, vL); // Efetua a compressão do arquivo finally vInFile.Free; vCompr.Free; vTmpFile.Free; vXmlDocument.Free; end; //Remove o XML antigo DeleteFile(ExtractFilePath(ParamStr(0)) + '\' + vFileName + '.xml'); //Atribui o valor de retorno Result := ExtractFilePath(ParamStr(0)) + '\' + vFileName + '.zip'; end; Este método retorna o nome do arquivo que irei converter para TByteDynArray com o método abaixo: function TSngpc2Gerenciador.FileToByteArray(const pFileName: string): TByteDynArray; const BLOCK_SIZE = 1024; var vBytesRead, vBytesToWrite, vCount: integer; vF: file of Byte; vTemp: Pointer; begin AssignFile(vF, pFileName); Reset(vF); try vCount := FileSize(vF); SetLength(Result, vCount); vTemp := @Result[0]; vBytesRead := BLOCK_SIZE; while (vBytesRead = BLOCK_SIZE) do begin vBytesToWrite := Min(vCount, BLOCK_SIZE); BlockRead(vF, vTemp^, vBytesToWrite, vBytesRead); vTemp := Pointer(LongInt(vTemp) + BLOCK_SIZE); vCount := vCount - vBytesRead; end; finally CloseFile(vF); //Exclui o arquivo antigo DeleteFile(pFileName); end; end; E na hora da chamada ao web service: Result := WsTeste.EnviaArquivoSNGPC(pEmail, pSenha, FileToByteArray(GetXmlCompressedInZipFileFromString(pArquivo)), pHash); dá aquele erro de caracteres inválidos na mensagem.
  6. Eu ainda não consegui achar um modo de compactar o XML no delphi que seja compatível com o webservice, por hora os clientes estão tendo que fazer na unha mesmo a compactação... TCompressionStream não funciona, recebo a mensagem: "Existem caracteres inválidos na mensagem".
  7. Pois é, agora to com outro póbrema!!!! Segui as dicas acima, bascicamente, salvei um arquivo .xml, compirmi usando o TCompressionStream (tentei descompactar o .zip gerado mas não dá certo), converti para bit64 e enviei, mas o servidor me retorna um erro dizendo que há um caracter inválido. Não sei isso pode ter sido algumn lixo que o TXMLDocument deixa ao salvar o arquivo...
  8. Estou com uma dúvida nesse SNGPC, mesmo usando o WebService eu tenho que mandar um arquivo .zip, não posso por exemplo pegar uma string e mandar um FIleToByteArray?
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...