marcioe Posted August 15, 2023 Report Share Posted August 15, 2023 Estou gerando o qrcode de Pix se Fizer a Leitura no APP mercado pago (ok lê de boa) nubank Diz que o Qrcoe é inválido Sicob Diz que o Qr Code está Expirado Será que está Faltando Algum parametro FUNCTION Gerar_Qrcode_Pix(v_Documento) Local oDlg_Pix, oBmp1 Local nValor := 0 &&& 1200.75 //Valor do PIX Local cPIX_CHAVE := space(30) &&& chave pix Local cPIX_NOME := space(30) &&& Nome do Proprietario do PIX Local cPIX_cidade := space(15) &&& Nome da Cidade do proprietario do PIX Local cMsg := space(10) &&& Campo de Msg Opcional Para Pix (exemplo Pedido xxx) LOCAL nResp LOCAL qrDLL *------------------------------------------------------------------------------------ * Coloquei Aqui para Gerar Valores com Base na Hora/m/sg Apenas para testar *------------------------------------------------------------------------------------ nValor := val( substr(time(),04,2) + '.' + substr(time(),07,2) ) *---------------------------------------------------------------------------- * Pego os Dados da Chave Cadastrada no Banco de Dados *----------------------------------------------------------------------------- IF SELECT("pix_empresa") != 0 pix_empresa->(DbCloseArea()) ENDIF cQuery:='select * from empresa where CODIGO = ' + TRANSFORMA_SQL(1,'N',06,0) + ' Limit 1' use sql cQuery alias "pix_empresa" new via 'MYSQL' pix_empresa->( DbGoTop()) cPIX_CHAVE := IF(empresa->TIPO_CHAVE_PIX =4,'+55','') + (pix_empresa->CHAVE_PIX) && chave pix cPIX_NOME := alltrim(pix_empresa->NOME_CHAVE_PIX ) && Nome do Proprietario do PIX cPIX_cidade := alltrim(pix_empresa->CIDEMP) && Nome da Cidade do proprietario do PIX cMsg := IF(!EMPTY(v_Documento),v_Documento,'Nao Inf.') IF SELECT("pix_empresa") != 0 pix_empresa->(DbCloseArea()) ENDIF *---------------------------------------------------------------------------- * Passando Dados Para Gerar o Qrcod_pix *---------------------------------------------------------------------------- cMsg := '05'+ strzero(len(alltrim(left(alltrim(cMsg),21))),2) + left(alltrim(cMsg),21) //Reference label até 25 caracteres. *---------------------------------------------------------------------------- nTamChave := 22 + len(alltrim(cPIX_CHAVE)) //Tamanho da chave para ser colocado no registro 26 *---------------------------------------------------------------------------- cString := '000201' //Inicio do código para gerar o Qr-Code cString += '26'+strzero(nTamChave,2)+'0014BR.GOV.BCB.PIX01'+ strzero(len(alltrim(cPIX_CHAVE)),2) + alltrim(cPIX_CHAVE) cString += '52040000' cString += '5303986' cString += '54' + strzero(len(alltrim(str(nValor))),2) + alltrim(str(nValor)) cString += '5802BR' cString += '59' + strzero(len(alltrim(cPIX_NOME)),2) + alltrim(cPIX_NOME) //Merchant Name até 25 caracteres. cString += '60' + strzero(len(left(alltrim(cPIX_cidade),15)),2) + alltrim(left(cPIX_cidade,15)) //City Name até 15 caracteres. cString += '62' + strzero(len(cMsg),2) + cMsg cString += '6304' cString += GERA_CRC(cString) *---------------------------------------------------------------------------- PASTA_QRCOD := CurDrive() +':\'+ CurDir() +'\QRCODPIX\' IF !lIsDir(PASTA_QRCOD) lMkDir(PASTA_QRCOD) ENDIF *---------------------------------------------------------------------------- hBmp := FW_BarCodeBmp( alltrim(cString), "QRCODE", 200, 200 ) hBmp := bmp2alpha( hBmp ) FW_SaveImage( hBmp, (CurDrive() +':\'+ CurDir() +'\QRCODPIX\' + ALLTRIM('A_CHAVE_PIX') + ".png") ) cFile := (CurDrive() +':\'+ CurDir() +'\QRCODPIX\' + ALLTRIM('A_CHAVE_PIX') + ".png") *---------------------------------------------------------------------------- XIMAGE_zoom( cFile, 'Qrcode Pagamento Valor ' +M->cSimb+' '+ ALLTRIM(TRANSFORM(nValor,"@ZE 999,999,999.99")) + ' Valores de Teste' , (.T.), 60 ) *---------------------------------------------------------------------------- Return nil *------------------------------------------------------------------------------- FUNCTION bmp2alpha( hBmp1 ) local hBmp, oBmp oBmp := GdiBmp():New() oBmp:CreateFromRes( hBmp1, 0 ) oBmp:Conver24to32Alpha( .f. ) hBmp := oBmp:GetGDIHbitmap() oBmp:Destroy() DeleteObject( hBmp1 ) return hBmp *------------------------------------------------------------------------------- * *------------------------------------------------------------------------------- Func GERA_CRC(ctxt) local i,n,a:={} local polinomio:=0x1021 local resultado:=0xFFFF for i=1 to len(ctxt) resultado := nXor(hb_bitShift(asc(substr(ctxt,i,1)),8),resultado) for n=1 to 8 resultado := hb_bitShift(resultado,1) if nand(resultado, 0x10000)<>0 resultado:=nXor(resultado,polinomio) end resultado:=nAnd(resultado,0xFFFF) next next return(DecToHex(resultado)) *------------------------------------------------------------------------------- o Qrcode é esse Quote Link to comment Share on other sites More sharing options...
marcioe Posted August 16, 2023 Author Report Share Posted August 16, 2023 Deve estar falando algum parâmetro, pois em alguns app de pagamento funciona normalmente, conforme relatei acim Quote Link to comment Share on other sites More sharing options...
marcioe Posted August 17, 2023 Author Report Share Posted August 17, 2023 Olá a Todos Depois da ajuda do amigo *Jmsilva* Muito obrigado mesmo pela dedicação. O problema é que tem espaços no campo de 'Nao Inf.' tem que ser 'NaoInf.' ou seja o espaço em branco entre as palavras não pode cMsg := IF(!EMPTY(v_Documento),v_Documento,'Nao Inf.') Jmsilva 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.