QR Api de Google

809 views
Skip to first unread message

Afpsistemas - Fernando Maggi

unread,
Feb 4, 2021, 6:13:27 AM2/4/21
to publice...@googlegroups.com

Buen día para todos.

 

Estoy usando el código que gentilmente compartió Luis Maria Guayán, para generar el QR con la API de Google y realmente me funciona perfecto.

Por ahora solo lo tengo en un cliente a modo de prueba y sin problemas, la consulta que quiero hacerles es que ERRORES o como capturar los mismos puedo tener con esta API ….. quisiera tener algún “control” antes de replicarlo en mis otros sistemas.

 

Saludos ¡!

Fernando.

 

 

 

*---------------------------------------------------------
* Genero la imagen del código QR con la API de Google
*  Parametetros:
*   tcText: Texto a codificar
*   tcFile: Nombre y ruta del archivo de imagen (opcional)
*   tnSize: tamaño en pixeles (opcional)
*---------------------------------------------------------

PROCEDURE GoogleApiQRBarcodeImage(tcText, tcFile, tnSize)
  LOCAL lcType, lcFolder, lcUrl

  IF VARTYPE(m.tnSize) <> "N"
    m.tnSize = 198 && Tamaño por omisión = 198 x 198 pixels
  ENDIF

  m.tnSize = MIN(MAX(m.tnSize, 72), 540)
  m.lcType = "PNG" && Solo PNG
  m.lcUrl = [https://chart.googleapis.com/chart?chs=] + ;
    TRANSFORM(m.tnSize) + [x] + TRANSFORM(m.tnSize) + ;
    [&cht=qr&chl=] + tcText

  IF EMPTY(m.tcFile)
    m.lcFolder = TempPath()
    IF NOT DIRECTORY(m.lcFolder)
      MD (m.lcFolder)
    ENDIF
    m.tcFile = FORCEEXT(m.lcFolder + SYS(2015), m.lcType)
  ELSE
    m.lcFolder = JUSTPATH(m.tcFile)
    IF NOT DIRECTORY(m.lcFolder) AND NOT EMPTY(m.lcFolder)
      MD (m.lcFolder)
    ENDIF
    m.tcFile = FORCEEXT(m.tcFile, m.lcType)
  ENDIF

  *-- Declaro la función URLDownloadToFile
  DECLARE LONG URLDownloadToFile IN URLMON.DLL ;
    LONG, STRING, STRING, LONG, LONG

  ERASE (m.tcFile)
  IF 0 = URLDownloadToFile(0, m.lcUrl, m.tcFile, 0, 0)
    RETURN m.tcFile
  ELSE
    RETURN ""
  ENDIF
ENDPROC

*---------------------------------------------------------
* PROCEDURE TempPath()
*---------------------------------------------------------
* Retorna la carpeta de archivos temporales de Windows
*---------------------------------------------------------

PROCEDURE TempPath()
  LOCAL lcPath, lnRet
  LOCAL lnSize
  m.lcPath = SPACE(255)
  m.lnSize = 255
  DECLARE INTEGER GetTempPath IN WIN32API ;
    INTEGER nBufSize, ;
    STRING @cPathName
  m.lnRet = GetTempPath(m.lnSize, @m.lcPath)
  IF m.lnRet <= 0
    m.lcPath = ADDBS(FULLPATH("TEMP"))
  ELSE
    m.lcPath = ADDBS(SUBSTR(m.lcPath, 1, m.lnRet))
  ENDIF
  RETURN m.lcPath
ENDPROC

*---------------------------------------------------------

 

 

 

 

Luis Maria Guayan

unread,
Feb 5, 2021, 3:18:45 PM2/5/21
to Comunidad de Visual Foxpro en Español
Hola, que bueno que te sirva ese código. Imagino que los errores que deberías controlar es tener conexión de internet y el valor retornado por la función URLDownloadToFile.

Allí en el ejemplo, si tuvo éxito retorna la ruta y nombre del archivo generado, si falló retorna una cadena vacía.

Saludos,

Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com
  
Reply all
Reply to author
Forward
0 new messages