Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2938 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado
function TFormMesa.Gera_hashqrcode(Emissao: TDateTime;
  TotalNota, TotalICMS: Real; Chave, CPFCNPJ, DigVal: String): String;
var
 vTexto, vAmbiente, vdemi, vlnf, vlicms, vCPFCNPJ, vCidToken: String;
begin
 Case ACBrNFe1.Configuracoes.WebServices.Ambiente of
  taHomologacao: begin
                  vAmbiente := '2';
                  vCidToken := '&cIdToken=' + '000001' + Copy(TiraCaracterDocumento(Trim(Dtm.QueryEmpresaCNPJF.AsString)), 1, 8) + IntToStr(YearOf(Emissao)) + '0001';
                 end;
  taProducao: begin
               vAmbiente := '1';
               vCidToken := '&cIdToken=' + Dtm.QueryEmpresaIdToken1.AsString + Dtm.QueryEmpresaCodToken1.AsString;
              end;
 end;
 vdemi := StringtoHex(Formata_DataUTC(Emissao, UFtoCUF(Trim(Dtm.QueryEmpresaEstado.AsString))));
 vlnf := StringReplace(FormatFloat('###0.00', TotalNota), ',', '.', []);
 vlicms := StringReplace(FormatFloat('###0.00', TotalICMS), ',', '.', []);
 If TiraCaracterDocumento(Trim((CPFCNPJ))) <> '' then
  vCPFCNPJ := '&cDest=' + TiraCaracterDocumento(Trim((CPFCNPJ)))
 Else
  vCPFCNPJ := '';

 vTexto := 'chNFe=' + Chave +
   '&nVersao=' + '100' +
   '&tpAmb=' + vAmbiente +
   vCPFCNPJ +
   '&dhEmi=' + vdemi +
   '&vNF=' + vlnf +
   '&vICMS=' + vlicms +
   '&digVal=' + StringtoHex(DigVal) +
   '&cIdToken=' + '000001' + vCidToken;
 Result := ACBrEAD1.CalcularHash(vTexto, dgstSHA1);
end;

function TFormMesa.Gera_chaveconsultaNFCe: String;
var
 vRetorno, vAmbiente, vChave, vDataEmissao, vlnf, vlicms, vHashqrcode,
 vCPFCNPJ, vTokenURL: String;
begin
 Case ACBrNFe1.Configuracoes.WebServices.Ambiente of
  taHomologacao: begin
                  vAmbiente := '2';
                  // Pega endereço de consulta publica da nfce
                  vRetorno := 'http://homologacao.sefaz.mt.gov.br/nfce/consultanfce?';//'http://www.hom.nfe.sefaz.mt.gov.br/portal/consultarNFCe.jsp';
                  vTokenURL := Dtm.QueryEmpresaIdToken1.AsString;
                 end;
  taProducao: begin
               vAmbiente := '1';
               // Pega endereço de consulta publica da nfce
               vRetorno := 'http://www.sefaz.mt.gov.br/nfce/consultanfce?';//'http://www.sefaz.mt.gov.br/nfe/portal/consultanfce';
               vTokenURL := Dtm.QueryEmpresaIdToken1.AsString + Dtm.QueryEmpresaCodToken1.AsString;
              end;
 end;
 vChave := MQCupomChave.AsString;
 vDataEmissao := StringtoHex(Formata_DataUTC(MQCupomDataHora.AsDateTime, UFtoCUF(Trim(Dtm.QueryEmpresaEstado.AsString))));
 vlnf := StringReplace(FormatFloat('###0.00', MQCupomValorTotal.AsFloat), ',', '.', []);
 vlicms := StringReplace(FormatFloat('###0.00', MQCupomValorICMS.AsFloat),',', '.', []);
 If TiraCaracterDocumento(Trim((MQCupomCNPJ_RG.AsString))) <> '' then
  vCPFCNPJ := '&cDest=' + TiraCaracterDocumento(Trim((MQCupomCNPJ_RG.AsString)))
 Else
  vCPFCNPJ := '';

 vHashqrcode := Gera_hashqrcode(MQCupomDataHora.AsDateTime,
   MQCupomValorTotal.AsFloat, MQCupomValorICMS.AsFloat, vChave,
   MQCupomCNPJ_RG.AsString, MQCupomDigVal.AsString);
 vRetorno := vRetorno + 'chNFe=' + vChave +
   '&nVersao=' + '100' +
   '&tpAmb=' + vAmbiente +
   vCPFCNPJ +
   '&dhEmi=' + vDataEmissao  +
   '&vNF=' + vlnf +
   '&vICMS=' + vlicms +
   '&digVal=' + StringtoHex(MQCupomDigVal.AsString) +
   '&cIdToken=' + vTokenURL +
   '&cHashQRCode=' + vHashqrcode;
 Result := vRetorno;
end;

vQRCode := Gera_chaveconsultaNFCe;

 

Alguém pode me ajudar?

Tem alguma coisa errada na geração do QRCode.

Ou alguém tem alguma forma mais simples para fazer?

Obrigado.

  • Consultores
Postado

Boa tarde,

Para que isso?

Porque você não usa a função do ACBrNFe?

vQRCode := ACBrNFe1.GetURLQRCode(const CUF: integer; const TipoAmbiente: TpcnTipoAmbiente;
  const AChaveNFe, Destinatario: String; const DataHoraEmissao: TDateTime;
  const ValorTotalNF, ValorTotalICMS: currency; const DigestValue: String): String;

De quebra coloquei os parâmetros da função.

  • Curtir 2
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Estou recebendo este erro:

Versão Layout: 3.10 
Ambiente: 2 
Versão Aplicativo: 3.00 
Status Código: 464 
Status Descrição: Rejeicao: Codigo de Hash no QR-Code difere do calculado 
UF: MT 
dhRecbto: 19/10/2016 17:25:14 
chNFe: 51161024362038000172650010000000049000000043 

ERRO: Rejeicao: Codigo de Hash no QR-Code difere do calculado
 

- <qrCode>
- <![CDATA[ http://homologacao.sefaz.mt.gov.br/nfce/consultanfce?chNFe=51161024362038000172650010000000049000000043&nVersao=100&tpAmb=2&cDest=03694273190&dhEmi=323031362D31302D31395431373A32333A32302D30333A3030&vNF=5.50&vICMS=0.00&digVal=6A69462F4C6839434768546C7366744F6266624566582B67516A303D&cIdToken=000001&cHashQRCode=EA097E839D32A4982DDE93F331B768BC1F587B21
  ]]> 
  </qrCode>

Acima esta o qrcode

Postado
Em 18/10/2016 at 15:58, Italo Jurisato Junior disse:

Boa tarde,

Para que isso?

Porque você não usa a função do ACBrNFe?

vQRCode := ACBrNFe1.GetURLQRCode(const CUF: integer; const TipoAmbiente: TpcnTipoAmbiente;
  const AChaveNFe, Destinatario: String; const DataHoraEmissao: TDateTime;
  const ValorTotalNF, ValorTotalICMS: currency; const DigestValue: String): String;

De quebra coloquei os parâmetros da função.

Estou gerando por essa tua fica

Postado

Eu uso a função abaixo para jogar na impressão, pois não uso a impressão do acbr.

Mas isso que faço não influencia no erro que esta dando. E se eu não resolver esse problema logo vou estar enrolado, pois a partir do dia 01/11 não vai enviar mais com esse erro.

O componente atualizei ontem e uso o delphi 2006

Se puder me ajudar eu agradeço.

    vQRCode := ACBrNFe1.GetURLQRCode(UFtoCUF(Trim(Dtm.QueryEmpresaEstado.AsString)),
                                     ACBrNFe1.Configuracoes.WebServices.Ambiente,
                                     MQCupomChave.AsString,
                                     vDestinatario,
                                     MQCupomDataHora.AsDateTime,
                                     MQCupomValorTotal.AsFloat,
                                     MQCupomValorICMS.AsFloat,
                                     MQCupomDigVal.AsString);
    
    frxReport1.Variables['qrcode'] := QuotedStr(vQRCode);

 

Postado

Olá leufmt,

Cara... pelo que estou percebendo, você está com dois problemas distintos relacionados ao QR-CODE:

1) Não está conseguindo autorizar o XML, não está gerando o QR-CODE correto. 

Se utilizar o trunk2 com ACBrNFe, basta setar a propriedade ACBrNFe.Configuracoes.Geral.IncluirQRCodeXMLNFCe para True, mas para funcionar vale a ressalva do André, setar corretamente o IdCSC e CSC no ambiente correto. Outra coisa é garantir o seu trunk2 atualizado para gerar com as URLs corretas.

2) Você utiliza DANFE próprio e não está conseguindo gerar a imagem do QR-CODE correto.

Também tenho DANFE próprio, que copiei do ACBr a muito tempo atrás, que foi o DANFE com QuickReport, e de lá copiei a geração da imagem do QR-CODE... nem sei dizer se tem uma forma mais eficiente de gerar essa informação, mas ainda tenho essa codificação e está funcionando, ou seja, ao ler de um smartfone vai para o site de boa. Se for isso que está querendo me avisa que posto aqui.

Qualquer coisa avisa.

 

Postado

Olá @petry,

Como disse antes, não sei se existe atualmente uma forma melhor de se gerar o QR-CODE, o fato é que para mim está funcionando. O código abaixo é o evento OnBeforePrint da banda do QuickReport que possui apenas um componente de imagem com o nome qriQRCode (tipo TQRImage):

 

procedure TFormRelDANFE_Bobina_NFCe.qrbQRCodeBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
var
 QRCodeBitmap: TBitmap;
 QRCode: TDelphiZXingQRCode;
 Row, Column: Integer;
 Scale: Double;
 cDest, sURL: String;
begin
  QRCodeBitmap := TBitmap.Create;
  try
    QRCode := TDelphiZXingQRCode.Create;
    try
      if (FNFe.Dest.idEstrangeiro <> '') then
        cDest := FNFe.Dest.idEstrangeiro
       else
         cDest := FNFe.Dest.CNPJCPF;

      FACBrNFe.Configuracoes.Geral.IdCSC := FIdCSC; 
      FACBrNFe.Configuracoes.Geral.CSC   := FCSC;   

      sURL := FACBrNFe.GetURLQRCode(FNFE.Ide.cUF,
                                    FNFe.Ide.tpAmb,
                                    Copy(FNFe.InfNFe.Id, 4, 44),
                                    cDest,
                                    FNFe.Ide.dEmi,
                                    FNFe.Total.ICMSTot.vNF,
                                    FNFe.Total.ICMSTot.vICMS,
                                    FNFe.procNFe.digVal);
      QRCode.Data := sURL;

      // TQRCodeEncoding = (qrAuto, qrNumeric, qrAlphanumeric, qrISO88591, qrUTF8NoBOM, qrUTF8BOM);
      // 0=Auto, 1=Numeric, 2=Alphanumeric, 3=ISO-8859-1, 4=UTF-8 without BOM, 5=UTF-8 with BOM
      QRCode.Encoding     := qrAuto; //TQRCodeEncoding(0);
      QRCode.QuietZone    := 2; 
      QRCodeBitmap.Width  := QRCode.Rows;
      QRCodeBitmap.Height := QRCode.Columns;

      for Row:=0 to QRCode.Rows-1 do
      begin
        for Column:=0 to QRCode.Columns-1 do
        begin
          if (QRCode.IsBlack[Row, Column]) then
            QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack
          else
            QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
        end;
      end;
    finally
      QRCode.Free;
    end;

    qriQRCode.Canvas.Brush.Color := clWhite;
    qriQRCode.Canvas.FillRect(Rect(0, 0, qriQRCode.Width, qriQRCode.Height));
    if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then
    begin
      if (qriQRCode.Width < qriQRCode.Height) then
        Scale := qriQRCode.Width / QRCodeBitmap.Width
      else
        Scale := qriQRCode.Height / QRCodeBitmap.Height;

      qriQRCode.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
    end;
  finally
    QRCodeBitmap.Free;
  end;
end;

 

  • 2 semanas depois ...
  • Este tópico foi criado há 2938 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.