Jump to content
Fivewin Brasil

Gerar Qrcode com para Pagamento de PIX


marcioe

Recommended Posts

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 

A-CHAVE-PIX.png

Link to comment
Share on other sites

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.')   
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...