In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Integracion Mercado Pago - Pagos QR en Estaciones

Foro público de Xailer en español
ryder1912
Posts: 14
Joined: Thu Jul 09, 2015 8:17 pm

Integracion Mercado Pago - Pagos QR en Estaciones

Postby ryder1912 » Tue May 28, 2019 9:38 pm

Buenas a todos. Estoy haciendo la integracion con mercado Pago para las Estaciones de Servicio.
Estas son las urls para realizar las pruebas:
1) - Ejemplo POST para crear POS
POST https://api.mercadopago.com/pos?access_token=<access_token>
{
"name":"Surtidor 1",
"category": 473000,
"url": "api.integration.com?apies=1&pos=1"
}
name: Nombre descriptivo. Es un String de hasta 45 caracteres.
category: Para petroleras es 473000.
url: URL del servidor del sistema de gestión que devuelva los datos de un surtidor o bomba de una determinada estación.

2) - Buscar todos los POS
GET https://api.mercadopago.com/pos?access_token=<access_token>

3) - Buscar por pos_id
GET https://api.mercadopago.com/pos/<pos_id>?access_token=<access_token>

Para realizar POS (Point of Sale) por ahora no está implementado, lo dejo para mas adelante, pero he implementado buscar POS por ID y buscar todos los POS de un Usuario (de Prueba) el tema es que en ambos procedimientos me salta el mismo error: "La dirección URL no es válida" y Hrequest siempre biene en 0.
Verprocedimeientos btObtenerPagosClick() y btBuscaPagoClick()

Importante: Si copio las Urls en la barra de dirreccion del navegador puedo botener los datos del POS:
Buscar todos los POS
https://api.mercadopago.com/pos?access_ ... -397908435

Buscar un POS por ID
https://api.mercadopago.com/pos/174025? ... -397908435

Dejo la url con el Flujo de las Petroleras, y el codigo que me esta dando error
https://www.mercadopago.com.ar/developers/es/guides/instore-payments/qr-payments/qr-gas-station/

Codigo:

Code: Select all

/*
 * Proyecto: mp
 * Fichero: Form2.prg
 * Fecha: 28/05/2019
 */

#include "Xailer.ch"
#include "ExStruct.ch"
#include "hbxml.ch"

CLASS TForm2 FROM TForm

   COMPONENT oBevel1
   COMPONENT btObtenerPagos
   COMPONENT btBuscaPago
   COMPONENT btRealizarPOS
   
   DATA cIdUsuario       INIT '397908435'
   DATA cTokenAccesoProd INIT 'APP_USR-6820346994844219-012800-f1718af310c897b283b956a2fbe47e89-'
   
   METHOD CreateForm()
   METHOD btObtenerPagosClick( oSender )
   METHOD btBuscaPagoClick( oSender )
   METHOD FormInitialize( oSender )
   METHOD btRealizarPOSClick( oSender )

ENDCLASS

#include "Form2.xfm"

//------------------------------------------------------------------------------

STATIC FUNCTION UUrlEncode( cString )

   LOCAL nI, cI, cRet := ""

   FOR nI := 1 TO Len( cString )
      cI := SubStr( cString, nI, 1 )
      IF cI == " "
         cRet += "+"
      ELSEIF Asc( cI ) >= 127 .OR. Asc( cI ) <= 31
         cRet += "%" + hb_StrToHex( cI )
      ELSE
         cRet += cI
      ENDIF
   NEXT

RETURN cRet

//------------------------------------------------------------------------------

METHOD FormInitialize( oSender ) CLASS TForm2
   ::lCentered:=.T.
RETURN Nil

//------------------------------------------------------------------------------

METHOD btObtenerPagosClick( oSender ) CLASS TForm2
LOCAL hRequest, cBuffer := Space( 1024 ), cData := ""
LOCAL cUrl1:='https://api.mercadopago.com', cUrl2:='/pos?access_token='
LOCAL debug:=''

      WITH OBJECT TInternet():Create()
         IF :Open()
             IF :Connect( cUrl1 )
               hRequest := :GetRequest(cUrl1+cUrl2+::cTokenAccesoProd+::cIdUsuario)
               debug:=cUrl1+cUrl2+::cTokenAccesoProd+::cIdUsuario
               IF ! Empty( hRequest )
                  WHILE :ReadFile( hRequest, @cBuffer, 1024 )
                     cData += cBuffer
                     cBuffer := Space( 1024 )
                  END
                  :CloseRequest( hRequest )
                  MemoWrit( "c:test.html", cData )
               ENDIF
            ENDIF
            debug:=:GetErrorDescription(:nLastError())
            :Close()
         ENDIF
      END

RETURN Nil

//------------------------------------------------------------------------------

METHOD btBuscaPagoClick( oSender ) CLASS TForm2
LOCAL hRequest, cBuffer := Space( 1024 ), cData := ""
LOCAL cUrl1:='https://api.mercadopago.com', cUrl2:='/pos/174025?access_token='
LOCAL debug:=''

      WITH OBJECT TInternet():Create()
         IF :Open()
             IF :Connect( cUrl1 )
               hRequest := :GetRequest(cUrl1+cUrl2+::cTokenAccesoProd+::cIdUsuario)
               debug:=cUrl1+cUrl2+::cTokenAccesoProd+::cIdUsuario
               IF ! Empty( hRequest )
                  WHILE :ReadFile( hRequest, @cBuffer, 1024 )
                     cData += cBuffer
                     cBuffer := Space( 1024 )
                  END
                  :CloseRequest( hRequest )
                  MemoWrit( "c:test.html", cData )
               ENDIF
            ENDIF
            debug:=:GetErrorDescription(:nLastError())
            :Close()
         ENDIF
      END

RETURN Nil

//------------------------------------------------------------------------------

METHOD btRealizarPOSClick( oSender ) CLASS TForm2
// No esta Implementado
RETURN Nil

//------------------------------------------------------------------------------

ftwein
Posts: 34
Joined: Mon Oct 22, 2007 5:17 pm

Re: Integracion Mercado Pago - Pagos QR en Estaciones

Postby ftwein » Thu May 30, 2019 2:35 pm

Por favor intente con el proyecto adjunto.

Fausto Di Creddo Trautwein
Attachments
TestePOS.zip
(3.57 KiB) Downloaded 21 times
ryder1912
Posts: 14
Joined: Thu Jul 09, 2015 8:17 pm

Re: Integracion Mercado Pago - Pagos QR en Estaciones

Postby ryder1912 » Wed Jun 12, 2019 6:39 pm

Gracias ftwein, me sirvio el proyecto. Siguiendo con el hilo, como puedo realizar un POST?.
El siguiente codigo lo saque de otro thread del mismo usuario, en este caso nunca envia los datos del json.
Slds.

Code: Select all

METHOD btRealizarPOSClick( oSender ) CLASS TForm2
LOCAL cTexto, cData, xerror, cJson, cDatos:=''
LOCAL oInternet, Connection, File
cTexto:=''
BEGIN SEQUENCE
   oInternet:= TInternet():New( Self )
   oInternet:nPort := INTERNET_DEFAULT_HTTPS_PORT
   oInternet:nTimeOut:= 60000
   IF !oInternet:Open()
      BREAK "Not Open"
   ENDIF
   Connection:= oInternet:Connect("https://api.mercadopago.com")
   IF !Connection
      BREAK "Not Connection"
   ENDIF

      cJson:='{'
      cDatos+='"name":"Surtidor2",'
      cDatos+='"fixed_amount": true,'
      cDatos+='"category": 473000,'
      cDatos+='"external_id": "external ID del Surtidor 2",'
      cDatos+='"url": "http://prueba.com/mp?estacion=1&surtidor=2"'
      cDatos+='}'
   cJson+=cDatos   
   File:= oInternet:OpenRequest("POST","/pos?"+::cTokenAccesoProd+::cIdUsuario,INTERNET_FLAG_SECURE,"HTTP/1.0")
   IF !oInternet:SendRequest(File, "Content-type: application/json", cJson )
      BREAK "Not SendRequest"
   ENDIF
   cTexto:=''
   WHILE oInternet:ReadFile( File, @cData, 65536 )
       cTexto += cData
   ENDDO
   cTexto += " *** "+oInternet:GetErrorDescription()

RECOVER USING xerror
   xerror:= oInternet:GetErrorDescription()
   MsgInfo( xerror )
END SEQUENCE


RETURN Nil
ftwein
Posts: 34
Joined: Mon Oct 22, 2007 5:17 pm

Re: Integracion Mercado Pago - Pagos QR en Estaciones

Postby ftwein » Wed Jun 12, 2019 10:49 pm

Hice algunas modificaciones, ahora muestra:

Code: Select all

{"error":"invalid_external_id","message":"external_id must be alphanumeric","status":400,"causes":[]}


Código modificado:

Code: Select all

METHOD btRealizarPOSClick( oSender ) CLASS TForm2
LOCAL cTexto, cData, xerror, cJson, cDatos:=''
LOCAL oInternet, Connection, File
cTexto:=''
BEGIN SEQUENCE
   oInternet:= TInternet():New( Self )
   oInternet:nPort := INTERNET_DEFAULT_HTTPS_PORT
   oInternet:nTimeOut:= 60000
   IF !oInternet:Open()
      BREAK "Not Open"
   ENDIF
   Connection:= oInternet:Connect("api.mercadopago.com")
   IF !Connection
      BREAK "Not Connection"
   ENDIF
      cJson:='{'
      cDatos+='"name":"Surtidor2",'
      cDatos+='"fixed_amount": true,'
      cDatos+='"category": 473000,'
      cDatos+='"external_id": "external ID del Surtidor 2",'
      cDatos+='"url": "http://prueba.com/mp?estacion=1&surtidor=2"'
      cDatos+='}'
   cJson+=cDatos
   File:= oInternet:OpenRequest("POST","/pos?access_token="+::cTokenAccesoProd+::cIdUsuario,INTERNET_FLAG_SECURE,"HTTP/1.0")
   IF !oInternet:SendRequest(File, "Content-type: application/json", cJson )
      BREAK "Not SendRequest"
   ENDIF
   cTexto:=''
   WHILE oInternet:ReadFile( File, @cData, 65536 )
       cTexto += cData
   ENDDO
   cTexto += " *** "+oInternet:GetErrorDescription()+" "+HB_NToS(oInternet:nLastError)+" "+HB_NToS(GetLastError())
   ::oMemo1:Value:= cTexto
RECOVER USING xerror
   xerror:= oInternet:GetErrorDescription()
   MsgInfo( xerror )
END SEQUENCE

RETURN Nil


Slds.

Return to “Spanish”