Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 04-02-2020 em Posts

  1. Configurações do ACBrMail para os principais serviços de emails do mercado outlook e hotmail smtp: smtp.office365.com porta: 587 tsl : true; ssl : false; Referência: Microsoft hotmail O smtp.live.com, utilizado anteriormente para o hotmail, parou de funcionar. Para utilizar o smtp.office365.com: 1. Ao entrar no hotmail, embaixo tem a opção atualizar para microsoft office365 premium. 2. Depois, crie uma conta grátis que já atualiza o hotmail para receber email office365. office365 smtp alternativo: smtp-legacy.office365.com gmail smtp: smtp.gmail.com usuario: [email protected] porta: 465 tsl : true; ssl : true; é necessário criar uma senha para a aplicação, portanto não é permitido mais utilização da senha principal da conta. 1. Ativar a verificação em duas etapas. 2. Criar uma senha para a aplicação. https://myaccount.google.com/apppasswords yahoo smtp: smtp.mail.yahoo.com.br porta: 587 tsl : true; ssl : false; password: não use a senha padrão da conta, precisará criar uma exclusiva para sua aplicação. siga os passos abaixo: criada pelo link https://login.yahoo.com/account/security#less-secure-apps e depois 'Gerenciar Senha de app', selecione 'Outro app' ,der um nome ao app, e clique gerar senha.; Veja ainda, a dica desse Post sendgrid smtp : smtp.sendgrid.net usuario: nome da conta senha : senha da conta tsl : true; ssl : false; porta: 465 Autor: @Aurino Locaweb From := '[email protected]'; FromName := 'Nome do Remetente'; Host := 'email-ssl.com.br'; Username := '[email protected]'; Password := 'Sua_Senha'; Port := '465'; SetTLS := False; SetSSL := True; Locaweb2 From := '[email protected]'; FromName := 'Nome do Remetente'; Host := 'email-ssl.com.br'; Username := '[email protected]'; Password := 'Sua_Senha'; Port := '587'; SetTLS := True; SetSSL := False; SparkPost From := '[email protected]'; FromName := 'Nome do Remetente'; Host := 'smtp.sparkpostmail.com'; Username := 'SMTP_Injection'; Password := '8a93c971789791b0102d889dd8f5f9b40507288d'; // Sua API Key Port := '587'; SetTLS := True; SetSSL := False;
    12 pontos
  2. Link da noticia: https://www.portalntc.org.br/publicacoes/blog/noticias/rodoviario/decisao-liminar-suspende-por-240-dias-resolucao-da-antt-com-novas-regras-do-ciot
    4 pontos
  3. A situação no ambiente de testes (wssathomolog) foi normalizada após última alteração realizada pela Sefaz. Solicitamos os que possuem equipamentos SAT que vinham tendo problemas de comunicação com a Sefaz, e que foram ativados antes de novembro de 2019, que renovem os certificados digitais através do comando_001 até 14/02/2020. Após o prazo e sem que seja realizada a renovação do certificado, os equipamentos SAT em questão não funcionarão. Fonte: https://portal.fazenda.sp.gov.br/servicos/sat
    2 pontos
  4. Bom dia! Esta consulta eu fiz para exemplificar o problema (e é o mesmo documento que me causou problemas). A consulta foi feita no dia 03/02/2020, três dias após a ocorrência do último evento registrado e mesmo dia do post. Vou entrar em contato com o pessoal do SEFAZ-PR. Se eles tiverem alguma resposta relevante eu posto aqui.
    2 pontos
  5. Não notei problemas com a DLL... por favor tente instalar esse MSVC Runtime https://support.microsoft.com/pt-br/help/2977003/the-latest-supported-visual-c-downloads
    2 pontos
  6. Sim, não existe regra de DAV/PV para NFC-e. Eu utilizo a mesma estrutura que existia no ECF referente a DAV/PV para NFC-e. Mas sem os bloqueios que o ECF exigia, tipo cancelar as ultimas PV que estão no BD do PDV que não foram faturadas, etc...
    2 pontos
  7. Bom dia Jéter, Muito obrigado pela colaboração, já esta no repositório.
    2 pontos
  8. Tópico pode ser fechado. Era erro interno do Sistema mesmo e não do Emulador. Agradeço a todos e desculpa pela demora de retorno.
    2 pontos
  9. Resolvido pessoal!!! Na época era falta de conhecimento meu mesmo galera tava meio que iniciando na area mas obrigado pelas ajudas vinda de vocês.
    2 pontos
  10. Boa noite, Finalizar tópico, estava revendo o processo e vi que tinha uma validação, no caso só leva a informação caso o COD_MOD, seja 66. Obrigado.
    2 pontos
  11. Não pode. Cada componente se destina a uma declaração ACBrSpedFiscal - EFD ICMS/IPI (antigo Sped Fiscal) ACBrSpedPisCofins - EFD Contribuições (antigo Sped PIS/COFINS) Os blocos podem ser semelhantes em alguns casos mas os layouts não são compatíveis. E o fato de não ter o bloco B no exemplo do ACBrSpedFiscal não significa que não esteja implementado no componente, você ainda pode gerar o bloco B do Sped Fiscal baseando-se nos exemplos de geração dos demais blocos.
    2 pontos
  12. Planejamos trazer para o Trunk, nas próximas semanas...
    2 pontos
  13. Olá pessoal, Foi publica a NT 2020/001 do MDF-e e ela já se encontra em nossa biblioteca. Resumo: O projeto MDF-e Integrado tem como objetivo a disponibilização, pelas Secretarias de Fazenda, de uma infraestrutura digital de documentos, legislações e processos voltados para a simplificação da emissão de documentos fiscais eletrônicos de transporte e integração, dentro de um ecossistema digital, que permite às Empresas Transportadoras de Cargas (ETC), Transportadores Autônomos de Cargas (TAC), ANTT, Administradores de Meios de Pagamentos e as próprias Secretarias de Fazenda, o aperfeiçoamento dos seus processos e compartilhamento de informações entre todos estes atores, a partir de um único documento e infraestrutura já consolidada e em uso por todos os envolvidos. Diante desse desafio, as Secretarias de Fazenda e o ENCAT, vêm nos últimos meses e em parceria com os diversos atores intervenientes, adotando uma série de ações estruturantes voltadas para superação das dificuldades atuais enfrentadas pelos órgãos de controle e geração de um ambiente operacional mais eficiente e competitivo, a exemplo das ações descritas abaixo: Aprovação de legislação nacional que normatizou o compartilhamento dos MDF-e dos 27 estados com os órgãos reguladores de transportes; Aprovação de legislação nacional que normatizou a obrigatoriedade de emissão do MDF-e em todas as operações de transporte, sejam elas intermunicipais ou interestaduais; Implantação da plataforma digital e registro de eventos eletrônicos que permitem ao transportador confirmar a entrega da mercadoria ao destinatário, possibilitando assim, a redução do prazo para o recebimento do frete por parte do caminhoneiro; Aprovação de legislação criando a Nota Fiscal Fácil (NFF), que permitirá aos contribuintes que operam com vendas de mercadorias e transportadores autônomos emitirem seus respectivos documentos fiscais de forma simplificada e a partir do seu próprio smartphone, conforme legislação publicada no D.O.U. do dia 19/12/2019 (Ajuste SINIEF No. 37 de 13 de dezembro de 2019); Publicação dessa NT, que estrutura o MDF-e de forma a possibilitar, entre outros benefícios: Geração automática do CIOT, pelo Sistema MDF-e, tanto para as modalidades TAC-Independente como TAC-Agregado; Automação do processo de fiscalização do Piso Mínimo do Frete (Tabela do Frete), nos termos da Resolução ANTT nº 5.849 de 16 de julho de 2019. Geração de informações para facilitar a negociação de direitos de recebimentos de fretes, por parte do TAC, junto a instituição financeira onde possui conta corrente, sem a interferência de atravessadores. Com essa NT temos: - Alterações de schema e regras de validação do MDF-e - Alterações no schema do modal rodoviário no grupo infANTT - Criação do evento de Pagamento da operação de transporte Portanto teremos um evento novo, criação do grupo Produto Predominante <prodPred> na parte geral do MDF-e, alteração no grupo informações do contratante, inclusão dos campos <xNome> e do <idEstrangeiro>, no modal rodoviário foi criado o grupo informações do pagamento do frete <infPag>. Novas Regras de Validação: Se modal rodoviário e indicador de pagamento for a prazo (tag:indPag=1): O grupo de informações a prazo deve ser informado (grupo:infPrazo). Implementação Obrigatória. Gera a Rejeição: 724. Se modal rodoviário, o grupo produto predominante deve estar informado (grupo: prodPred). Implementação Obrigatória. Gera a Rejeição: 725. Se modal rodoviário e MDF-e possuir apenas um DF-e transportado no grupo infDoc: O grupo de informações da carga lotação (infLotacao) deve estar informado. Implementação Facultativa. Gera a Rejeição: 726. Se modal rodoviário e informado grupo de pagamento, rejeitar se CNPJ/CPF do responsável pelo pagamento estiver inválido. Implementação Obrigatória. Gera a Rejeição: 727. Se moda rodoviário e informado grupo de pagamento, rejeitar se CNPJ do IPEF estiver inválido. Implementação Obrigatória. Gera a Rejeição: 728. Vai ocorrer alterações no componente? Sim Vai ocorrer alterações nos schemas? Sim Vou ter que adequar a minha aplicação? Sim Prazos: Ambiente de Homologação: 09/03/2020 Ambiente de Produção: 06/04/2020
    1 ponto
  14. Se a tag for preenchida com "tpintegra=1" a impressão sai corretamente no Fortes e Fast Mas se preecher com "tpintegra=2", mesmo os campos cnpj , bandeira e caut preenchidos não é impresso. Com a sugestão de correção Fast e Forte passam a imprimir com tpintegra=1 ou tpintegra=2 Sugestão para correção: Impressão do código de autorização de cartão de credito sem TEF Se a tag detpag for gerado com tpintegra=2 não imprime -<detPag> <tPag>04</tPag> <vPag>3.00</vPag> -<card> <tpIntegra>2</tpIntegra> <CNPJ>99999999900100</CNPJ> <tBand>01</tBand> <cAut>333322</cAut> </card> </detPag> unit : ACBrNFeDANFEClass linha : 688 de: if ((tPag in [fpCartaoCredito, fpCartaoDebito]) and (tpIntegra = tiPagIntegrado)) Then para: if ((tPag in [fpCartaoCredito, fpCartaoDebito]) and (tpIntegra = tiPagIntegrado)) OR ((tPag in [fpCartaoCredito, fpCartaoDebito]) and (cAut <>'')) then //EDMAR 04/02/2020 somente se tiver sido informado o cAut(Código de autorização) ACBrNFeDANFEClass.pas
    1 ponto
  15. Obrigado pelos esclarecimentos, fareis algumas pesquisar a mais para implementar essa funcionalidade.
    1 ponto
  16. Boa tarde Chegou a realizar testes apenas utilizando a maquina local? Notei pelo log que gerou o XML no primeiro método, depois não obteve resposta, pode estar ocorrendo algum problema com acesso aos dados em rede.
    1 ponto
  17. Confere algumas coisas. por exemplo versão da NFC-e informado e se tem a parte do QRCode e por fim a questão do path mesmo e se salvou tudo antes de fazer o teste
    1 ponto
  18. Boa tarde @Milton Lima Se ainda estiver com problemas para emissão em contingência da NFCe, sugiro que dê uma olhada nessa apresentação. Embora seja sobre o ACBrMonitor, pode exemplificar como deve ser tratada na sua aplicação... Precisa armazenar a chave que enviou e não obteve retorno, para uma posterior consulta...
    1 ponto
  19. Boa tarde. Para fins informativos, o @BigWings fez um commit recente que deve resolver este problema. Att.
    1 ponto
  20. Vale ressaltar que tal decisão abrange tão somente as empresas representadas pelos respectivos sindicatos.
    1 ponto
  21. Boa tarde, Envio anexo o arquivo modificado no componente de consulta CPF. Realizei a atualização dos endereços de captura do CAPTCHA e consulta para os que tem atualmente ao acessar diretamente o site da Receita. Com estes novos endereços a captura do CAPTCHA e consulta ficaram mais estáveis do que com o endereço anterior. ACBrConsultaCPF.pas
    1 ponto
  22. Obrigado pela contribuição... commit:[r18977]
    1 ponto
  23. Bom dia Italo, Testes realizados, está tudo ok, muito obrigado.
    1 ponto
  24. Creio que tu está misturando Paf-ECF com NFC-e Paf-ECF tem as regras e legislações especificas, já NFC-e e contigo
    1 ponto
  25. Boa tarde. Fui implementar a impressão de Inutilização de Documento fiscal (Delphi) e ocorreu memoryLeak. Fui analisar, faltavam duas coisas. Efetuar o Free no ClientDataset (cdsItens) e vincular o evento FormDestroy ao Form. Segue a unit corrigida. (Abri o tópico no fórum errado. O correto é CTe) Atenciosamente. ACBrCTeDAInutRL.pas ACBrCTeDAInutRL.dfm
    1 ponto
  26. Resolvido... Foi regra no webservice que já desfizeram Obrigado a todos pela atenção Att Adriano
    1 ponto
  27. Bom dia tive esse problema no Parana com certificado A3. mudei a configuracao do componente. dmACBr.ACBrNFe1.SSL.SSLType := LT_TLSv1_3; e esta funcinando lembrando certificado A3 com o A1 funciona com as outras configuracoes
    1 ponto
  28. Entendi Fabiano. É como eu fiz também. Obrigado!
    1 ponto
  29. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  30. tive esse problema em RS,, porem em produção, só apliquei todas as atualizações no windows 10 pro e tudo resolvido!
    1 ponto
  31. É por isso mesmo. Obrigado Rafael, vou acertar e testar novamente.
    1 ponto
  32. Obrigado José pelos esclarecimentos.
    1 ponto
  33. Não problema nenhum, a aplicação que deverá ficar responsavel em enviar e dar os retornos, assim como tua aplicação cliente deverá passar as informações corretas, ai como já disse, é uma questão da programação e não do componente. Dercide Alvarez
    1 ponto
  34. 1 ponto
  35. Olá Pessoal, A lista de cidades que é possível emitir NFS-e através do componente ACBrNFSe já passa de 1.100, sendo não vou listar aqui nesse tópico. Quem desejar saber se a cidade XYZ consta dessa lista peço que abra o arquivo Cidades.ini que se encontra na pasta: ...\Exemplos\ACBrDFe\ACBrNFSe\ArqINI http://svn.code.sf.net/p/acbr/code/trunk2/Exemplos/ACBrDFe/ACBrNFSe/ArqINI/Cidades.ini Veja um exemplo abaixo: [3503208] Nome=Araraquara UF=SP Provedor=GINFES Na primeira linha temos o código IBGE, depois o Nome, UF e por fim qual é o provedor, ou seja, empresa contratada por licitação pela prefeitura. Os contratos por licitação tem prazos de termino definido e não poder ser renovados automaticamente. Sendo assim quando o contrato termina uma nova licitação é feita com varias empresas e pode ocorrer como ocorreu em diversas cidades de uma outra empresa ganhar. Algumas cidades tem o seu próprio sistema. O componente hoje reconhece por volta de 113 provedores (empresas que implementam nas cidades os seus webservices para recepcionar as notas). Dos quais 16 possuem um layout próprio, os demais, ou seja, 97 se dividem metade se utilizam da versão 1 do layout da ABRASF e a outra metade se utilizam da versão 2. Na mesma pasta mencionada acima que contem o arquivo Cidades.ini, vocês encontram os arquivos INI de cada um desses provedores. Peço a todos que não deixem de ler os artigos abaixo:
    1 ponto
  36. O apagarACBr.bat não apaga alguns dcu, geralmente os de terceiros. Então mesmo executando o apagaracbr ainda pode haver algum arquivo smtpsend.dcu ou smtpsend.pas desatualizado em algum lugar que o Delphi está encontrando na compilação. Então você precisa fazer uma varredura em todos os discos por estes arquivos e se for o caso removê-los ou atualizá-los.
    1 ponto
  37. Olá pessoal, No dia 20/12/2019 foi publicado o Decreto de numero 47.799 que trata sobre a venda de combustíveis a consumidor final em estabelecimento comercial varejista de combustíveis automotivo. O decreto possui dois artigos, o primeiro se refere a obtenção das informações referente ao encerrante e o segundo diz onde as informações do mesmo deve ser informadas no XML. Para ler na integra o decreto clique aqui. Minhas considerações: 1. Esse decreto só serve para informar que se tratando de venda de combustível para consumidor final devemos informar no XML da NFC-e os dados referente ao encerrante, visto que essas informações ficou a critério de cada UF exigir ou não. 2. O decreto é de 19/12/2019, mas na Nota Técnica 2015/002 já estava previsto que a obtenção dos dados referente ao encerrante deveria ser via hardware, logo não deve ser digitados. Final da página 4 da referida NT: C. Grupo de Combustível: Informação de “Encerrante” Dentro do grupo de informações relacionado com as operações de combustíveis, foi incluído o subgrupo de “encerrante” que permite o controle sobre as operações de venda de combustíveis, de forma semelhante à atualmente em vigor. Observação do grupo <encerrante>: Informações do grupo de “encerrante” disponibilizado por hardware específico acoplado à bomba de combustível, definido no controle da venda do Posto Revendedor de Combustível. 3. No segundo artigo do decreto diz que temos que informar os seguintes dados: nBico, nBomba, nTanque, vEncIni e vEncFin no grupo de informações do contribuinte, ou seja, no campo xCampo devemos colocar o nome do campo, por exemplo nBico e no campo xTexto o numero do bico propriamente dito. Mas acontece que na NT que eu me referi na mesma página temos os campos que compõe o grupo <encerrante>, são eles: nBico, nBomba, nTanque, vEncIni e vEncFin. Duvida cruel: Se tratando de Minas Gerais as informações referente ao encerrante devemos informar no grupo <encerrante> conforme layout apresentado na Nota Técnica 2015/002 ou devemos colocar essas informações no grupo de observações do contribuinte? Se no layout da NF-e/NFC-e já existe um grupo especifico para tais informações pra que informar em outro lugar? Desenvolvedores, que possuem clientes que comercializa combustível no varejo, favor ficar a tento a isso. Não sei se cabe a uma consulta ao órgão competente. Data de inicio da exigência dessas informações no XML: 01/04/2020 Pela data deve ser tudo mentira. Não se faz necessário alterações no componente ACBrNFe.
    1 ponto
  38. O Projeto ACBr está de roupa nova em seu portal! Confira. Veja o novo portal O novo tema, além de ser completamente responsivo e leve, promete tornar informações importantes mais acessíveis. Seu Mega Menu lateral, permite facilmente navegar entre todas as seções do novo site. Sobre Esta área agrupa todas as informações sobre o que é o Projeto ACBr. Já tentou explicar o que é ACBr para alguém (que não seja desenvolvedor) sem muito sucesso? Talvez esta página possa ajudar. Com o enfoque em educar novos usuários, também publicamos as perguntas frequentes sobre o funcionamento do ACBr. Soluções Organizamos de uma forma simples as informações sobre como usar nossos componentes, também facilitando o acesso às vídeo-aulas correspondentes à cada modalidade: Fontes, ACBrMonitor ou ACBrLib. Suporte Profissional SAC Como todos sabemos, não existe almoço grátis (mas fontes, sim). O Projeto ACBr hoje é uma empresa que conta com uma equipe de especialistas dedicados à prestação de suportes e manutenção dos componentes, e oferece cada vez mais facilidades para seus membros SAC ACBr. Se você ainda não conhece o nosso SAC, esse é o momento. Comunidade Fazer parte de uma comunidade significa não estar sozinho. Listamos os benefícios de ser um membro do Projeto ACBr, e também o que temos a oferecer além de nossas soluções. Você pode encontrar um link para o site do Dia do ACBr (Ainda em construção) nesta seção. Primeiros passos Uma área destinada aos novos membros, que por meio de um passo-a-passo simples, podem aprender a usar corretamente o fórum. Vale lembrar que ainda estamos migrando alguns conteúdos do antigo portal para o novo, e pretendemos inserir mais informações em breve. IMPORTANTE: Conte-nos como foi sua experiência com o novo portal e possíveis melhorias. Avalie o novo portal Sua opinião vale muito para nós.
    1 ponto
  39. Juliomar,me desculpe... Estou tendo problemas com notas em contigencias, quando o sistema vai enviar a nota em contigencia para ser autorizada as vezes o retorno do xml não vem com a tag autorizada, sendo que foi autorizada na sefaz
    1 ponto
  40. Bom dia; O acressimo tem que ser rateado entro os itens, o valor deve ser colocado [vOutro] do item.
    1 ponto
  41. Porque devo assinar digitalmente meus executáveis ? O Produto final de quase todo desenvolvedor de Software para Windows, é gerar um arquivo compilado e executável, ou seja, um arquivo com a extensão .EXE ou .DLL As versões recentes do Windows, incorporaram recursos de segurança, como o SmartScreen, que podem causar alertas quando Binários não assinados são executados... O mesmo pode ocorre com módulos de Segurança de terceiros, instalados na máquina, como por exemplo: Antivírus e módulos de segurança bancários... Para evitar mensagens assustadoras, como a exibida abaixo, é necessário Assinar digitalmente o seu binário, com um certificado emitido por uma Autoridade Certificadora válida A título de exemplo, todos os binários distribuídos pelo Projeto ACBr, na área de Download do SAC ACBr, são assinados digitalmente com um certificado do Projeto ACBr... Reparem que não somente o Executável final, mas o instalador, também deve ser assinado.. Abaixo, temos a imagem de quando é executamos o Instalador do ACBrMonitorPLUS SAC Bem melhor, não ? Repare que o Fornecedor do binário, fica bem identificado na mensagem... Isso além de trazer mais confiança para o usuário final, ajuda os programas de segurança, a classificar de forma positiva, o seu Executável ou instalador, evitando bloqueios indevidos. Ok, gostei... mas como fazer para assinar meus executáveis ? O primeiro passo é comprar um Certificado do tipo "Code Signing"... Garanto que agora você pensou algo como: - Humm.. será que posso usar o meu certificado A1 ou A3 ? A resposta é NÃO... os certificados que usamos para os Documentos Fiscais eletrônicos brasileiros, não tem as características esperadas pelo Windows, para assinatura e validação de binários... Quanto aos certificados gerados de forma local, ou seja, os Self-Signed Certificates, eles funcionarão para a assinatura... e podem ser ótimos para testes... Mas eles não devem garantir o nível de confiabilidade ao seu binário, pois eles não são gerados por uma Autoridade Certificadora válida Algumas empresas Brasileiras, vendem o certificado do tipo Code Signing.. Veja por exemplo esse link... Porém o preço é praticamente "o valor de um Rim esquerdo"... (ps: veja mais empresas brasileiras, no post a seguir) Você pode comprar o Certificado do Tipo OV, que é bem mais barato... Na página da KSoftware tem um interessante artigo, descrevendo a diferença da versão OV x EV Eu preferi comprar nesse site gringo, porém isso pode exigir que você tenha um bom conhecimento de Inglês, pois o todo o processo de compra será feito em Inglês. Esse certificado, também exige um processo de validação... ou seja, a Empresa que irá emitir o certificado, precisa saber se você é você mesmo... A validação foi feita pela empresa Sectigo... eles enviam e-mails com links para você subir a documentação necessária... Como o certificado será emitido para uma Entidade Pessoa Jurídica, na etapa de envio de documentos de prova de identidade... eu enviei um PDF com o resultado da consulta de meu CNPJ, na Receita... Na etapa final de validação, eles efetuam uma ligação para o telefone de sua empresa, para fornecer um Token, que deve ser usado para gerar o certificado... portanto, o número de telefone na documentação que você enviar, deve ser um número que você possa atender... Achei o Site de Validação da Sectigo, bastante confuso... Eu preferi comprar a opção de 4 anos, para evitar esse penoso processo de compra, e pelos descontos oferecidos... Após todas as validações de identidade, eles lhe enviarão um Link para baixar o certificado em sua máquina... Será criado um arquivo PFX, e o processo de geração do Certificado na sua máquina, é muito semelhante a dos Certificados A1 brasileiros... Ufa.. já tenho o meu certificado em PFX... Como eu assino os binários ? Existem algumas ferramentas disponíveis... na página da KSoftware, você pode ler um tutorial, de como assinar usando o KSign Você poderá assinar binários facilmente, usando a interface gráfica deles: Para automatizar o processo de assinatura, você provavelmente ira preferir usar um utilitário de Linha de Comando... Repare que na mesma pasta onde o KSign foi instalado, existe o utilitário signtool.exe Use esse utilitário com a seguinte sintaxe: signtool.exe sign /du "http://seusite.com.br" /d "Descrição do seu Programa" /f "C:\Path\SeuCertificado.PFX" /p SenhaCertififcado /t "http://timestamp.comodoca.com" SeuBinario.exe sign -> Comando para assinatura /du -> Informa a URL do seu Site /d -> Informa uma descrição resumida do seu Programa /f -> Informa o Path completo para o seu Certificado (arquivo PFX) /p -> Informa a Senha para abertura do seu Certificado /t -> Informa um Servidor de Time Stamp, para que fique gravada a Data / Hora da assinatura Mas como assinar um Binário Windows, de dentro do Linux ?? Todo processo de Build e Deploy dos binários do ACBr, é executado em um Linux OpenSuse. A compilação de todas as plataformas que suportamos ocorre com Cross-Compiling, e automatizamos o processo de Build e Deploy, com o uso de Jenkins e Shell Scripts, Para transmitir o binário para fórum, criamos alguns utilitários que consomem a API do Invision Power Board Para a assinatura dos binários, creio que seria possível usar o próprio signtool.exe, com Wine... mas encontramos um interessante utilitário nativo em Linux, chamado osslsigncode, repare que a sintaxe é muito semelhante a do signtool.exe... osslsigncode sign -pkcs12 /path/SeuCertificado.pfx -pass SuaSenha -n "Descrição do seu Programa" -i http://seusite.com.br -t http://timestamp.comodoca.com -in SeuBinario.exe -out SeuBinario.exe.sign (como passo final, apague o arquivo original, SeuBinario.exe e renomeie SeuBinario.exe.sign para SeuBinario.exe)
    1 ponto
  42. Ahh.. esse Google... efetuando pesquisas recentes, para escrever esse artigo.. notei que a Sectigo, agora tem um Site Brasileiro, e com preços bem semelhantes aos valores em Dólar... Deve ajudar muito, no momento da validação das informações... https://www.sectigo.com.br/produtos/certificado-codesigning.php Outra empresa, que também vende o Code Signing https://www.rapidssl.com.br/certificado-code-signing
    1 ponto
  43. tentei mais algumas opções e não deu certo... segue o array contendo apenas 1 item retornado do json: [{"name":"PEDIDO DE TESTE - GRANDE 3 SABORES","quantity":1,"price":0.0,"subItemsPrice":55.98,"totalPrice":55.98,"discount":0.0,"addition":0.0,"externalCode":"25","subIte ms":[{"name":"BORDA DE CHEDDAR","quantity":1,"price":6.0,"totalPrice":6.0,"discount":0.0,"addition":0.0,"externalCode":"3000"}, {"name":"1\/3 3 QUEIJOS","quantity":1,"price":16.66,"totalPrice":16.66,"discount":0.0,"addition":0.0,"externalCode":"30"}, {"name":"1\/3 CALABRESA","quantity":1,"price":15.0,"totalPrice":16.66,"discount":0.0,"addition":1.66,"externalCode":"31"}, {"name":"1\/3 MUSSARELA","quantity":1,"price":10.0,"totalPrice":16.66,"discount":0.0,"addition":6.66,"externalCode":"32"}]}] aqui uma simples leitura do array json em um botao do delphi procedure TfrmPrincipal.BitBtn6Click(Sender: TObject); var LJsonArr : TJSONArray; i: integer; ObjetoJsonLinha : TJSONObject; begin LJsonArr := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(mJson.Lines.Text),0) as TJSONArray; if (LJsonArr.Count > 0) then for I:=0 to LJsonArr.Count - 1 do begin ObjetoJsonLinha := LJsonArr.Items as TJSONObject; showmessage( objetojsonlinha.GetValue('name').value ); showmessage( objetojsonlinha.GetValue('subItems').value ); end; end; o array é carregado normalmente, quando uilizo o showmessage para mostrar o valor dentro do campo NAME a mensagem é retornada corretamente, quando utilizo o showmessage para mostrar o conteudo ou tento pegar o conteudo dentro do campo subItems ele dá erro de acesso ( erro básico do delphi ). Testando o exemplo que me passou se eu deixo o array completo como acima ele me diz que não é um objeto válido ( pois é um array ) se eu tiro os colches e deixo como objeto json e não array eu clico no botao e ele nao processa nada ( vide imagem ) preciso apenas ler o valor dentro do campo subitens ( que será o array json contendo os valores dos campos subitens, name, quantity, price ( etc etc ), porém sempre que tento acessar isto no delphi com tostring, value ou qualquer outra funcão relacionada a subItems ele dá erro e não consigo resolver isto, já tentei muitos exemplos e nada...
    1 ponto
  44. Sim, quando o iFood monta o JSON, eles ignoram arrays, strings, números, objetos em branco. Deixando assim o retorno somente com o que é necessário. Como eu citei acima, aqui eu criei um unit com todos os retornos possível do JSON (property). Depois eu só converto o JSON para um ObjectList usando generics. Fiz um exemplo bem simples, só pra mostrar que de um lado eu tenho um memo com o JSON do iFOOD e do outro o meu ObjectList. Vou deixar o código aqui. var MyPedidoiFood: TiFoodPedido; x, i: Integer; begin MyPedidoiFood := TJSON.JsonToObject<TiFoodPedido>(MemoJSON.Lines.Text); //Memo com o JSON do iFood try for x := 0 to Length(MyPedidoiFood.items) - 1 do begin MemoClasseDelphi.Lines.Add('Nome mercadoria base: '+MyPedidoiFood.Items[x].name); for i := 0 to Length(MyPedidoiFood.items[x].subItems) - 1 do MemoClasseDelphi.Lines.Add('Nome subitem: '+MyPedidoiFood.Items[x].subItems[i].name); MemoClasseDelphi.Lines.Add(''); end; finally MyPedidoiFood.Free; end; end; E o link do exemplo compilado caso queira testar com um JSON seu. Se estiver utilizando TCustomJSONDataSetAdapter. Você pode aumentar o tamanho da string por essa propriedade: StringFieldSize (antes de criar os campos).
    1 ponto
  45. JsonToDataset não leva em consideração o "detail" de um objeto ou array do json... A melhor forma de você tratar isso é convertendo um JSON para um Object usando Generics Em resumo, você cria uma classe no Delphi igual ao JSON que recebe do iFood. TPayments = class private Fname: string; Fcode: string; Fvalue: Extended; public property name: string read Fname write Fname; property code: string read Fcode write Fcode; property value: Extended read Fvalue write Fvalue; end; TArrayPayments = array of TPayments; TiFoodPedido = class private Fid: string; Freference: string; Fpayments: TArrayPayments; public property id: string read Fid write Fid; property reference: string read Freference write Freference; property payments: TArrayPayments read Fpayments write Fpayments; end; TiFoodPedidos = TObjectList<TiFoodPedido>; No caso do payments é um array. Mas terá casos onde serão objetos (merchant, address, customer...). Sendo assim não esqueça de criar constructor e destructor para criar e destruir esses objetos. constructor TiFoodPedido.Create; begin FCustomer := TCustomer.Create; FDeliveryAddress := TDeliveryAddress.Create; end; destructor TiFoodPedido.Destrtoy; begin FCustomer.Free; FDeliveryAddress.Free; end; Depois você pode simplesmente chamar assim: var PedidoiFood: TiFoodPedido; begin PedidoiFood := TJSON.JsonToObject<TiFoodPedido>('JSON de retorno do iFood'); try //dessa forma você consegue ler os items dentro de um array PedidoiFood.payments[0].name; PedidoiFood.payments[0].code; PedidoiFood.payments[0].value; finally PedidoiFood.Free; end; end; Caso queira adicionar mais pedidos na sua lista: var Pedidos: TiFoodPedidos; PedidoiFood: TiFoodPedido; x: Integer; begin Pedidos := TiFoodPedidos.Create; try for x := 0 to 5 do begin PedidoiFood := TJSON.JsonToObject<TiFoodPedido>('JSON de retorno do iFood'); Pedidos.Add(PedidoiFood); end; //No final poderá acessar assim Pedidos.Items[0].payments[0].name; finally Pedidos.Free; end; end;
    1 ponto
  46. Você pode converter o JSON em DataSet, eu particularmente acho bem mais fácil. client_id e client_secret: Obtido através do cadastro da SoftHouse no site do iFood. username e password: Obtido através do cadastro do seu cliente no site do IFood. Ou seja, devem ser variáveis no seu software. var IdHTTPConexao: TidHTTP; aArg: TStringList; begin IdHTTPConexao := TidHTTP.Create; aArg := TStringList.Create; try aArg.Add('client_id='+FClientID); aArg.Add('client_secret='+FClientSecret); aArg.Add('grant_type=password'); aArg.Add('username='+FUsername); aArg.Add('password='+FPassword); with IdHTTPConexao do begin Request.Accept := 'application/json'; JsonToDataset(FDMemTable1, Post('https://pos-api.ifood.com.br/oauth/token', aArg)); end; FDMemTable1.First; FToken := FDMemTable1.FieldByName('access_token').AsString; //<-Guada esse token para as demais requisições FExpires := FDMemTable1.FieldByName('expires_in').AsString; //<-Deve executar esse método novamente quando expirar finally IdHTTPConexao.Free; aArg.Free; end; Após obter o Token é necessário dar GET no endpoint /events:polling a cada 30 segundos. É aqui que você recebe um resumo dos pedidos ainda não capturados. var IdHTTPConexao: TidHTTP; JSONRetorno: TStringStream; begin IdHTTPConexao := TidHTTP.Create; JSONRetorno := TStringStream.Create('', TEncoding.UTF8); try with IdHTTPConexao do begin Request.Clear; Request.ContentType := 'application/json'; Request.Charset := 'UFT-8'; Request.BasicAuthentication := False; Request.CustomHeaders.Clear; Request.CustomHeaders.AddValue('Content-Type', 'application/json'); Request.CustomHeaders.AddValue('Authorization', 'bearer'+FToken); Request.CustomHeaders.AddValue('cache-control', 'no-cache'); Request.Accept := 'application/json'; Get('https://pos-api.ifood.com.br/v1.0/events%3Apolling', JSONRetorno); JsonToDataset(FDMemTableResumo, JSONRetorno.DataString); end; with FDMemTableResumo do begin First; while not Eof do begin FieldByName('id').AsString; //<-Id do evento. Necessário guardar para limpar a fila depois de processar esse evento. FieldByName('code').AsString; //<-Status retornado para o pedido (Confirmado, cancelado...). FieldByName('correlationId').AsString; //<-Código do pedido. Com esse código que você obtem o detalhamento do pedido. FieldByName('createdAt').AsString; //<-Data de criação do evento. Next; end; end; finally IdHTTPConexao.Free; JSONRetorno.Free; end; end; O próximo passo é executar o endpoints /orders/{reference} através do método GET (https://pos-api.ifood.com.br/v1.0/orders/reference). Substituindo o valor "reference" pelo o correlationId. Ou seja do pedido que deseja. Não vou postar um exemplo pois aqui o código fica grande e cada aplicação tratará diferente os resultados... Mas a lógica é a mesma. Não esqueça de alterar o status do pedido quando processar ele. O status integration é obrigatório. Após processar todos os pedidos, chegou a hora de limpar a fila... Alguns limpam a fila no final do dia. Mas particularmente eu prefiro limpar a fila a cada execução do polling. IdHTTPConexao: TidHTTP; aArg: TStringStream; FIds: string; begin FIds := ''; with FDMemTableResumo do begin while not Eof do begin if FIds <> '' then FIds := FIds + ', '; FIds := FIds + '{"id":"'+FieldByName('id').AsString+'"}'; Next; end; end; if FIds <> '' then begin FIds := '['+FIds+']'; IdHTTPConexao := TidHTTP.Create; aArg := TStringStream.Create(FIds, TEncoding.UTF8); try with IdHTTPConexao do begin Request.Clear; Request.ContentType := 'application/json'; Request.Charset := 'UFT-8'; Request.BasicAuthentication := False; Request.CustomHeaders.Clear; Request.CustomHeaders.AddValue('Content-Type', 'application/json'); Request.CustomHeaders.AddValue('Authorization', 'bearer'+FToken); Request.CustomHeaders.AddValue('cache-control', 'no-cache'); Request.Accept := 'application/json'; Post('https://pos-api.ifood.com.br/v1.0/events/acknowledgment', aArg); end; finally aArg.Free; IdHTTPConexao.Free; end; end; Enfim, é mais ou menos isso... Claro, da pra otimizar muito esse código. Deixei da forma mais simples possível. Uma outra solução seria utilizar RestClient ao invés do Indy.. Vou deixar alguns links bem legais explicando com mais detalhes o funcionamento: Documentação iFood A função JsonToDataSet pode ser encontrada aqui. Palestra do Kleberson Toro para o CodeRage Brasil 2019 Fórum do iFood Ah, uma observação... Na documentação do iFood já podemos notar que existe uma versão 2.0 para a API. A mesma está liberada apenas para /orders. Então caso for integrar, já use o novo endrpoints
    1 ponto
  47. Boa tarde. Eu resolvi fazendo a seguinte (POG - Programação Orientada a Gambiarra): Nas linhas onde tem o seguinte codigo eu comentei tudo: //{$IFDEF FPC} // {$IFDEF CPU64} // {$R ACBrNFeServicos.res} // Dificuldades de compilar Recurso em 64 bits // {$ELSE} // {$R ACBrNFeServicos.rc} // {$ENDIF} //{$ELSE} // {$R ACBrNFeServicos.res} //{$ENDIF} Funcionou que é uma maravilha.
    1 ponto
×
×
  • 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.