Jump to content

click.png click.png click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

Gerando o QRCode


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

Recommended Posts

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.

Link to comment
Share on other sites

  • Consultores

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.

  • Like 2
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • Consultores

Mas, o componente gera automaticamente a string do QR-Code e gera a TAG que contem ela.

Por que você esta gerando o QR-Code por fora?

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Consultores

Você não respondeu.

Porque esta usando o método  ACBrNFe1.GetURLQRCode ?

O componente já o utiliza automaticamente, você não precisa chamar ele,

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

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);

 

Link to comment
Share on other sites

  • Moderadores

Vc está informando o token corretamente ao componente? Existem tokens diferentes para cada ambiente(homologação/produção).

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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;

 

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.