Eis que anos já se passaram depois do inicio do tópico SAT-Fiscal a mistica está desvendada do qual aprendemos como manipular as .DLLs do trato com o ambiente S@T-CFe.
Para os que decidiram usar programação pura ao invés do projeto ACBr provavelmente estão felizes com os resultados, mas a pergunta que não quer calar é:
Como estão as leituras dos códigos QR-Code gerado por suas aplicações?
Estão sendo lidas corretamente e direcionando para o cupom armazenado no ambiente da Receita?
Eu uso em meu smartphone com Android o aplicativo DeOlhoNaNota e em muitos testes cheguei a um ponto de 99% de acerto.
Uso também a codificação pura, e em testes com DIMEP pude perceber que o mesmo retorna uma string criptografada que vem com algo a mais, me causando erros de leitura do aplicativo da Receita.
No trecho abaixo está contida a assinatura retornada pelo DIMEP o qual deverá ser usado para gerar o QR-Code que será impresso:
<assinaturaQRCODE>ItoUgEIfFKSh2fzo1HoxtL8uTmB7y+gVr49K7u/NH+S9g/aobElBQnYf5l7EalJB7r8v1hKszuUOk+yoYRnsH8AI5ap7tPqfAwAIehv7PcGWNfVJii7qurs++
71VR+mCwDMZjRV66jYTNal4/2xJAc/Wnqop18NlpSdoevn6i4OMi89OZO++vy5hpAByHCoRqXHBAkummmNFxBCw2x4nN0KuZnkExgeCBW8PbVYDUJ92Arm1f42ecrVMB4QOo
C2zMt0Z99HWWoVW2CpdQi85XC0zZl21wPHcPgrOw97gc0R/JSWbxK2Bj6hEeTPjZ+Q1b5Q+9XBds3OLRhzEdfnXlw==hygljwuohmmoewarfnmighlxzke7k2bjlto4
sb2vltorgm26khhangknnfvpzydt5terudyw5vuvtzlhlqs3qrzvplfnlvw==</assinaturaQRCODE>
Para montagem da string que será passada para a impressora para a montagem perfeita eu preciso retirar da assinatura acima somente o que eu desejo:
ItoUgEIfFKSh2fzo1HoxtL8uTmB7y+gVr49K7u/NH+S9g/aobElBQnYf5l7EalJB7r8v1hKszuUOk+yoYRnsH8AI5ap7tPqfAwAIehv7PcGWNfVJii7qurs++
71VR+mCwDMZjRV66jYTNal4/2xJAc/Wnqop18NlpSdoevn6i4OMi89OZO++vy5hpAByHCoRqXHBAkummmNFxBCw2x4nN0KuZnkExgeCBW8PbVYDUJ92Arm1f42ecrVMB4QOo
C2zMt0Z99HWWoVW2CpdQi85XC0zZl21wPHcPgrOw97gc0R/JSWbxK2Bj6hEeTPjZ+Q1b5Q+9XBds3OLRhzEdfnXlw==
Vejam que desprezei o trecho:
hygljwuohmmoewarfnmighlxzke7k2bjlto4sb2vltorgm26khhangknnfvpzydt5terudyw5vuvtzlhlqs3qrzvplfnlvw==
Vejam um trecho de código:
Código: Selecionar todos
oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
oXMLDoc:async := .f.
lSuccess := oXMLDoc:loadXML( cXMLFile )
if lSuccess // se abriu com sucesso...
oXMLide := oXMLDoc:getElementsByTagName( "ide" ):Item(0) // pega o objeto completo // :xml
// Pego a assinatura completa
assinaturaQRCODE := XMLGetResult( "assinaturaQRCODE", oXMLide ) // oXMLide:getElementsByTagName( "assinaturaQRCODE" ):Item(0):Text
// Pego somente o trecho correspondente a assinatura
cAssinaturaQRCodeOK := substr( assinaturaQRCODE, 1, at("==", assinaturaQRCODE )+1 )
...
35160511111111111111599000001020001697721888|20160518000333|26.60|11111111111111|ItoUgEIfFKSh2fzo1HoxtL8uTmB7y+gVr49K7u/NH+S9g/aobElBQnYf5l7EalJB7r8
v1hKszuUOk+yoYRnsH8AI5ap7tPqfAwAIehv7PcGWNfVJii7qurs++71VR+mCwDMZjRV66jYTNal4/2xJAc/Wnqop18NlpSdoevn6i4OMi89OZO++vy5hpAByHCoRqXHBAkummmNFxBC
w2x4nN0KuZnkExgeCBW8PbVYDUJ92Arm1f42ecrVMB4QOoC2zMt0Z99HWWoVW2CpdQi85XC0zZl21wPHcPgrOw97gc0R/JSWbxK2Bj6hEeTPjZ+Q1b5Q+9XBds3OLRhzEdfnXlw==
Vejam que depois dos caracteres "==" não exista mais nada e assim deve ser.
Estou codificando a impressão usando ESC/POS na Bematech MP-2500, MP-4000 e MP-4200 sendo que na MP-4200 o QR-Code é nativo e nas outras é necessário atualizar o firmware.
Código: Selecionar todos
...
// Configuracao do QRCode
iTamanho := Len( x_URL_QrCode ) + 3
iHigh := iif( iTamanho > 255, iTamanho / 256 , iTamanho )
iLow := iif( iTamanho > 255, MOD( iTamanho, 256 ), 0 )
// Impressão do QRCode
iTam1 := 8 // Melhores resultados
iTam2 := 8 // Melhores resultados
// Funciona normalmente
cBuffer := chr(27) + chr(97) + chr(1) + ; //esse código faz a centralização
chr(29) + chr(107) + chr(81) + ; //esse é o do qr code
chr(2) + chr(iTam1) + chr(iTam2) + chr(1) + ; //aqui é o tamanho 12/8 8/4
chr(iLow) + ; //divisão correspondente ao tamanho do texto
chr(iHigh) + ; //resto da divisão correspondente ao tamanho do texto / 255
x_URL_QrCode //aqui começa o texto
fwrite( nTXTCFe, cBuffer )
...
Bematech – MP4200 TH
Bematech – MP2500 TH
Daruma – DR700
EPSON – T20
Caso a sua Bematech não esteja imprimindo nada ou desconfigurada você pode limpar as instalações usando o BemaGost
Caso precise atualizar o firmware de sua MP-4200TH Veja este link
Aqui Um documento interessante
Coloquei este tópico separado do principal para manter o foco somente no QR-Code. Peço aos amigos que mantenham o foco.

