Pix Gerar QRCode
Moderador: Moderadores
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Pix Gerar QRCode
Alguem ja teve de gerar qrcode de um pix com um determinado valor ?
A ideia é somente gerar na tela o qrcode (com chave e o valor) para o cliente do meu usuario poder pagar,
nao sendo necessario integracao com o banco (sem verificar se teve o deposito)
A ideia é somente gerar na tela o qrcode (com chave e o valor) para o cliente do meu usuario poder pagar,
nao sendo necessario integracao com o banco (sem verificar se teve o deposito)
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Pix Gerar QRCode
Código: Selecionar todos
************************************************************************************************************************************************************************************************************************
METHOD Pix_String( ) CLASS PIXClass
************************************************************************************************************************************************************************************************************************
LOCAL cString
cString := ""
cString += get_p_value('00', '01')
// cString += get_p_value('01', '11')
cString += get_p_account_information(::cPIX_KEY, ::cPIX_RECEIVER, ::pix_url)
cString += get_p_value('52', '0000')
cString += get_p_value('53', '986')
cString += get_p_value('54', ::nPIX_AMOUNT)
cString += get_p_value('58', 'BR')
cString += get_p_value('59', SUBSTR(::cPIX_DESCRIPTION,1,25))
cString += get_p_value('60', ::cPIX_CITY)
** cString += get_p_value('61', '')
cString += get_p_additional_data_field(::cPIX_IDENTIFICATION)
cString += "6304"
cString += hb_numtohex(hb_crcct(cString, 0xFFFF, 0x11021))
::qrcode := cString
return Nil
************************************************************************************************************************************************************************************************************************
STATIC function get_p_value(identify, value)
************************************************************************************************************************************************************************************************************************
Value := AllTrim( Value )
return identify + StrZero( Len( value ), 2 ) + value
//return trim(identify + strzero(len(alltrim(value)), 2) + value)
************************************************************************************************************************************************************************************************************************
STATIC function get_p_account_information(key, description, url)
************************************************************************************************************************************************************************************************************************
Local base_pix := get_p_value('00', 'br.gov.bcb.pix')
Local info_string := ''
if key != Nil
info_string += get_p_value('01', key)
elseif url != Nil
info_string += get_p_value('25', url)
endif
info_string += get_p_value('02', description)
return get_p_value('26', base_pix + info_string)
************************************************************************************************************************************************************************************************************************
STATIC function get_p_additional_data_field(identification)
************************************************************************************************************************************************************************************************************************
if identification != Nil
return get_p_value('62', get_p_value('05', identification))
endif
return get_p_value('62', get_p_value('05', '***'))
************************************************************************************************************************************************************************************************************************
FUNCTION create_Txid( )
************************************************************************************************************************************************************************************************************************
Local cRetorno:="";
, nCont;
, equivalente:= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',;
'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',;
'Z','0','1','2','3','4','5','6','7','8','9'}
For nCont:=1 to 32
cRetorno += equivalente[HB_RandomInt(1, 62)]
next
return cRetorno
******************************************************************************************************************************
METHOD PDF_QRCode( ) CLASS PIXClass
******************************************************************************************************************************
LOCAL h1, iPDF, sPDF, hPDF, cFileName;
h1:=::qrcodeImage
iPDF:= Array( 1, 1 )
iPDF[1, 1] := h1
sPDF:= hb_base64Decode( iPDF[1, 1] )
cFileName:="C:\filesold\report\PIX_" + strzero(HB_RandomInt(1, 99999999),8,0) +'.PDF'
hPDF := FCreate(cFileName, 0)
FWrite(hPDF, sPDF)
FClose(hPDF)
WAPI_ShellExecute( NIL, "OPEN", cFileName ,"",NIL,5 )
RETURN Nil
************************************************************************************************************************************************************************************************************************
METHOD PrintQRCode( ) CLASS PIXClass
************************************************************************************************************************************************************************************************************************
LOCAL oPDF;
// , nTamValor;
if ::erro_status = WS_OK
oPDF := PDFClass()
IF oPDF == NIL
hwg_msginfo("Falha da criação do objeto PDF","ATENÇÃO!!!")
RETURN .F.
ENDIF
oPDF:cFileName := ::cFileName
oPDF:SetType( PDFCLASS_ROLLS )
oPDF:nPageHeight := 150
oPDF:Begin()
oPDF:AddPage()
// nTamValor := (38 - (len("Valor do PIX: " + LTRIM(TRANSFORM(::nPIX_AMOUNT,"@E 999,999,999.99" ))))) /2
oPDF:DrawText( 0 , 8, "Leia o QR Code Pix e pague" , Nil, 8, "Helvetica-Bold", Nil, Nil )
oPDF:DrawText( 0.7, 5, "utilizando o aplicativo do seu banco." , Nil, 8, "Helvetica-Bold", Nil, Nil )
oPDF:DrawBarcodeQRCode( 1, 4.5, 0.22, ::qrcode )
oPDF:DrawText( 11.3 , 30, ::cPDF_Linha1, Nil, 6, "Helvetica-Bold", 90, Nil )
oPDF:DrawText( 11.3 , 31 , ::cPDF_Linha2, Nil, 6, "Helvetica-Bold", 90, Nil )
oPDF:DrawText( 11.3 , 32 , "PIX: R$ " + LTRIM(TRANSFORM(VAL(::nPIX_AMOUNT),"@E 999,999,999.99" )), Nil, 6, "Helvetica-Bold", 90, Nil )
// oPDF:DrawLine( 10, 0, 10, 38, 3 )
oPDF:End( )
oPDF:PrintPreview( )
ENDIF
RETURN NILHARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Pix Gerar QRCode
Olá!
Eu vi este tópico com a rotina do Fernando Queiroz e ia sugerir ao Alexandre Silva. Só não o fiz porque consta na assinatura do mesmo que ele ainda utiliza Clipper. Obviamente este código não servirá.
Eu vi este tópico com a rotina do Fernando Queiroz e ia sugerir ao Alexandre Silva. Só não o fiz porque consta na assinatura do mesmo que ele ainda utiliza Clipper. Obviamente este código não servirá.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Pix Gerar QRCode
Mas isso ai é harbour nao é ?
Uso o MRBOLETO, que tambem usa CLASS e Method
Penso que tambem daria pra fazer usando funcoes em vez de metodos
Tem coisas que nao entendo, desculpem se parecem basicas, quero aprender
Por exemplo essa funcao create_Txid( ) que nao é chamada pode tirar ?
ou essa referencia h1:=::qrcodeImage , esse qrcodeimage nao aparece em outro lugar, entao como funciona isso ?
Preciso saber os #include e se tem algum #define ou algo a acrescentar na compilacao
para essas funcoes por exemplo :
hb_numtohex(hb_crcct(cString, 0xFFFF, 0x11021))
hb_base64Decode( iPDF[1, 1] )
oPDF := PDFClass()
Uso o MRBOLETO, que tambem usa CLASS e Method
Penso que tambem daria pra fazer usando funcoes em vez de metodos
Tem coisas que nao entendo, desculpem se parecem basicas, quero aprender
Por exemplo essa funcao create_Txid( ) que nao é chamada pode tirar ?
ou essa referencia h1:=::qrcodeImage , esse qrcodeimage nao aparece em outro lugar, entao como funciona isso ?
Preciso saber os #include e se tem algum #define ou algo a acrescentar na compilacao
para essas funcoes por exemplo :
hb_numtohex(hb_crcct(cString, 0xFFFF, 0x11021))
hb_base64Decode( iPDF[1, 1] )
oPDF := PDFClass()
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Pix Gerar QRCode
bom eu enviei somente a parte de gerar o PIX, a classe não foi completa justamente por isso, a TXId é usada somente para casos de integracao com bancos que utilizam esse recurso, mas o que tem no que mandei serve para o que ele quer fazer, só trocar o METHOD por FUNCTION e as variáveis utilizadas na classe por variáveis nas funções
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Pix Gerar QRCode
Mas quando o pix tem valor definido, não é obrigatório registrar primeiro ?
Se for isso, o que ele quer não existe.
Se for isso, o que ele quer não existe.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Pix Gerar QRCode
JoséQuintas escreveu:Mas quando o pix tem valor definido, não é obrigatório registrar primeiro ?
Se for isso, o que ele quer não existe.
Não precisa, eu coloco valor e numero do pedido no PIX mesmo não tendo ele registrado, e esses dados ficam no recebimento,
Código: Selecionar todos
************************************************************************************************************************************************************************************************************************
METHOD qrCode( oDlg ) CLASS Pagamento
************************************************************************************************************************************************************************************************************************
LOCAL cSQL;
, oSQL;
, oSQL_FLAG;
, h1, h4, tamanho;
IF ! ::PIX_IMPRESSO
cSQL:="SELECT "
cSQL+="DATABASE() AS FILIAL, "
cSQL+="pedidospagamento.PEDIDOS_ID, "
cSQL+="pedidospagamento.VALOR "
cSQL+="FROM pedidospagamento "
cSQL+="WHERE pedidospagamento.PEDIDOS_ID = '" + STRZERO(::nPEDIDOS_ID,11,0) + "' AND pedidospagamento.TIPPGTO_ID = '17' "
oSQL:= Connections():ExecuteSQL(::oServer, cSQL)
IF ! oSQL:eof( )
cSQL:="SELECT "
cSQL+="flag.PIX_ENVIROMENT, "
cSQL+="flag.PIX_BANCO, "
cSQL+="flag.PIX_CHAVE, "
cSQL+="flag.PIX_RECEBEDOR, "
cSQL+="flag.PIX_CIDADE, "
cSQL+="flag.PIX_CERTIFICADO, "
cSQL+="flag.PIX_CLIENT_ID, "
cSQL+="flag.PIX_CLIENT_SECRET, "
cSQL+="flag.NOMEUSUARIO "
cSQL+="FROM flag WHERE flag.FLAG_Id = 1 "
oSQL_FLAG := Connections():ExecuteSQL(::oServer, cSQL)
IF ! EMPTY(oSQL_FLAG:Fields( "PIX_CHAVE" ):Value )
::oPIX := PIXClass( ):New( )
::oPIX:Setup(oSQL_FLAG:Fields( "PIX_BANCO" ):Value, ; // METHOD Setup(sBanco, nEnviroment, sCertificado, sClient_Id, sClient_Secret, sPIX_Key, sPIX_Receive, sPIX_City, sPIX_Amount, sPIX_Description, sPIX_Identification, sPDF_Linha1, sPDF_linha2)
oSQL_FLAG:Fields( "PIX_ENVIROMENT" ):Value, ;
oSQL_FLAG:Fields( "PIX_CERTIFICADO" ):Value, ;
oSQL_FLAG:Fields( "PIX_CLIENT_ID" ):Value, ;
oSQL_FLAG:Fields( "PIX_CLIENT_SECRET" ):Value, ;
oSQL_FLAG:Fields( "PIX_CHAVE" ):Value, ;
oSQL_FLAG:Fields( "PIX_RECEBEDOR" ):Value, ;
oSQL_FLAG:Fields( "PIX_CIDADE" ):Value, ;
LTRIM(STR(oSQL:Fields( "VALOR" ):Value,10,2)), ;
RTRIM(UPPER(oSQL:Fields( "FILIAL" ):Value)) , ;
LTRIM(TRANSFORM(oSQL:Fields( "PEDIDOS_ID" ):Value,"99999999999" )), ;
oSQL_FLAG:Fields( "NOMEUSUARIO" ):Value, ;
"Pedido: " + LTRIM(TRANSFORM(oSQL:Fields( "PEDIDOS_ID" ):Value,"99999999999" )))
::oPIX:Execute( )
if ::oPIX:erro_status = 200
::PIX_IMPRESSO := .T.
h1 := FOpen(::oPIX:cFileName) // abre o arquivo de imagem para leitura
tamanho := FSeek(h1, 0, 2) // move o ponteiro pelo arquivo até o fim para pegar o tamanho
FSeek(h1, 0, 0) // volta para o início
h4 := Space(tamanho) // declara variável para receber o conteúdo do arquivo
FRead(h1, @h4, tamanho) // faz a leitura do conteúdo do arquivo jogando-a na variável de memória
FClose(h1) // fecha o arquivo
h4 := hb_base64Encode(h4, tamanho) // converte o conteúdo do arquivo em base64
cSQL:="UPDATE pedidospagamento SET "
cSQL+="pedidospagamento.PIX_ID = '" + STRZERO(::oPIX:id,10,0) + "', "
cSQL+="pedidospagamento.PIX_TXID = '" + ::oPIX:txid + "', "
if ! empty(::oPIX:location)
cSQL+="pedidospagamento.PIX_LOCATION = '" + ::oPIX:location + "', "
endif
cSQL+="pedidospagamento.PIX_QRCODE = '" + ::oPIX:qrcode + "', "
cSQL+="pedidospagamento.PIX_QRCODEIMAGE = '" + h4 + "' "
cSQL+="WHERE pedidospagamento.PEDIDOS_ID = '" + STRZERO(::nPEDIDOS_ID,11,0) + "' AND pedidospagamento.TIPPGTO_ID = '17' "
Connections():ExecuteSQL(::oServer, cSQL)
// HB_GTINFO( HB_GTI_CLIPBOARDDATA, ::oPIX:cFileName)
::ativarTimer( oDlg )
else
hwg_MsgInfo("REMOVA A FORMA DE PAGAMENTO"+ HB_EOL() + ;
"E INCLUA NOVAMENTE PARA REPETIR"+ HB_EOL() + ;
"A OPERAÇÃO"+ HB_EOL() + HB_EOL() + ::oPIX:erro_mensagem, "OPERAÇÃO NÃO EFETUADA!!!")
endif
ENDIF
endif
ENDIF
RETURN NILalgusn parametros que uso sao utilizados somente quando tem interface com instituições financeiras
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Pix Gerar QRCode
Legal isso.
Dá pra inventar um boleto como se o cliente fosse o próprio banco, pra pagar por pix.
Não sabia que isso era possível.
Posso acrescentar na boletoclass.
Dá pra inventar um boleto como se o cliente fosse o próprio banco, pra pagar por pix.
Não sabia que isso era possível.
Posso acrescentar na boletoclass.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Pix Gerar QRCode
Código: Selecionar todos
******************************************************************************************************************************
METHOD PDF_QRCode( ) CLASS PIXClass
******************************************************************************************************************************
LOCAL h1, iPDF, sPDF, hPDF, cFileName;
h1:=::qrcodeImage
iPDF:= Array( 1, 1 )
iPDF[1, 1] := h1
sPDF:= hb_base64Decode( iPDF[1, 1] )
cFileName:="C:\filesold\report\PIX_" + strzero(HB_RandomInt(1, 99999999),8,0) +'.PDF'
hPDF := FCreate(cFileName, 0)
FWrite(hPDF, sPDF)
FClose(hPDF)
WAPI_ShellExecute( NIL, "OPEN", cFileName ,"",NIL,5 )
RETURN Nil
Na primeita parte ok o ::qrcode recebe cString, mas esse ::qrcodeImage nao entendi
Alguem pode me esclarecer ?
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2