Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   MercadoPago y RadStudio XE3 (https://www.clubdelphi.com/foros/showthread.php?t=91091)

fabianmk 09-11-2016 20:28:26

MercadoPago y RadStudio XE3
 
Hola. Tengo un Punto de Venta desarrollado con RadStudio XE3 / Firebird 2.5 (Windows XP/7/8.1) desearia integrar el pago de Tarjetas de Credito/Debito a travez de MercadoPago. Ademas tengo los teclados programables con lectora de banda magnetica y con Impresoras Fiscales Epson TM-U220AF para imprimir los boucher de tarjeta.
Que experiencia tienen al respecto? Y si alguien sabe como seria para darme un orientacion o si tiene un ejemplo como se podria hacer la integracion?
Desde ya muchas gracias.
Saludos

fabianmk 09-11-2016 20:54:22

Vivo en Argentina y si conocen alguna otra opcion recomendable seria bueno escucharla

AgustinOrtu 09-11-2016 23:48:55

Al parecer todas las API de Mercado Libre se pueden acceder mediante REST. Lamentablemente no hay, a menos no que yo sepa, alguna solucion o SDK ya hecho, y hay que implementar todo a pulmon

Lo bueno es que la documentacion es razonablemente buena. Este es el sitio especifico para Mercado Pago

Tambien le pegaria una ojeada este articulo de Mercado Libre, Build your SDK, si bien es para la API de Mercado Libre y no Mercado Pago, supongo que la parte de autorizacion y autenticacion y el protocolo en general va a ser muy similar

En mi firma hay un link a un repositorio en GitHub donde empece a desarrollar la API de Mercado Libre. Apenas esta en pañales pero si queres le podes pegar un vistazo. El proceso de autenticacion esta casi terminado

softarg 12-05-2018 15:28:46

Hola Fabianmk. Estoy exactamente en la misma situacion que vos con MercadoPago. Lograste avanzar con el tema?

(MAJ) 15-05-2018 21:15:58

En realidad no es muy complicado poder utilizar las api de mercado pago, las estuve viendo, y son llamadas que con indy tranquilamente podes hacerlo, incluso las ultimas versiones de delphi ya vienen con un trio de componentes rest que te simplifican aun mas la vida, lo que tenes que hacer es ver cual api es la que querés utilizar hacer la llamada al servidor pasando los datos que requiera la api y esperar la respuesta, en la respuesta te dice si la transacción fue aceptada o rechazada, obviamente si no querés introducir los datos manualmente tenes que capturarlos del lector de bandas magneticas.

Chaja 02-03-2019 18:13:27

Hola.... Me llamo luis soy de Mar del plata. Pudistes avanzar en algo con esto de mercado pago? Yo uso por ahora xe5 pero si tenes o para orientarne estaria agradecido

xebas123 19-12-2019 23:48:53

Hola colegas, tengo hecha una integración a mercadolibre y mercadopago con Delphi XE. Estoy usando una vesión modificada de superobject para convertir de json a clases y viceversa y la última versión de Indy. Contactenme y les doy una mano.
Saludos, Sebas

hsbelli72 25-12-2019 16:36:00

hola xsebas123. por favor podrias compartir un breve ejemplo de como usaste la api de mercado pago en delphi. lo necesito para una aplicacion mobile en delphi que estoy desarrollando. Gracias!


saludos

xebas123 31-12-2019 17:16:24

Durante la semana que viene publico los pasos.

Saludos

hsbelli72 31-12-2019 21:56:01

muchas gracias!

saludos

hsbelli72 11-01-2020 14:34:28

Cita:

Empezado por xebas123 (Mensaje 535028)
Durante la semana que viene publico los pasos.

Saludos


Hola como estas?. Cuando podras publicar los pasos para usar la Api del MercadoPago?
Saludos

xebas123 16-01-2020 16:03:59

Pasos para integrar MercadoPago y Mercadolibre con Delphi XE1, XE2 y espero que XE3
 
Para integrar mi aplicación Delphi XE/XE2 con MercadoLibre/MercadoPago yo seguí estos pasos.
Parece que aún no soy digno de postear links, armadlos vosotros.

Ingredientes:
-Indy versión Indy10_5461 o superior (buscar IndyProject Indy10Installation)
-OpenSSL versión (buscar indy fulgan barra SSL)
-ISuperObject tuneado (github |xebas123|superobject)
-JsonToDelphiClass 0.65 (PKGeorgiev|Delphi-JsonToDelphiClass|releases)

Configuraciones:
-ISuperObject:
Tuve que tocar ISuperObject para que me funque como yo quería.
Por defecto, al convertir un TObject a json lista las todos los "fields" que no es lo mismo que properties, sino que son todas las variables de la clase.
Esto me sirve, lo cambié para que trabaje solo sobre las Properties.
En teoría XSuperObject (otro proyecto de sourceforge) funcionaría bien, pero sólo es para XE2 en adelante y yo uso principalmente XE1.

-Uso de JsonToDelphiClass:
Ajuste del Json:
Los campos que pueden venir como "null" tienen que ser string en la clase que vayamos a generar y en todo caso se agregan funciones para obtener lo que se necesite necesitamos (ej: datetimes, boolean o números).
Usar Json Simples, si hay un array, que tenga un solo elemento (así no repite clases delphi)
No puede haber null ni arrays vacíos en el json de ejemplo. Sacarlos, o convertirlos en array de strings o info dummy.

Usando la aplicación:
1- Pegar a la derecha el json válido!
2- Presionar Visualize para armar el arbol a la izquierda.
3- El arbol permite renombrar las clases (al menos la Root conviene renombrarla).
También permite renombrar los tipos de dato (pero todo termina con Class) yo prefiero hacer busca/reemplaza en el .pas final.
Hay algunos "extended" que en realidad son long o longword. de nuevo, ojo que si son opcionales puede que haya que ponerlos como string.
4- [opcional] Ingresar el nombre de la unit
5- Presionar PreviewUnit
6- MUY IMPORTANTE: el botón Save no hace nada!!! hay que copiar el texto y guardarlo en un .pas
7- Abrir la Unit y ajustarla para que use ISuperObject modificado por mi. (ver sección de ISuperObject)
7a- Cambiar referencia a Rest.Json por SuperObject
7b- Los métodos "ToJsonString" se cambian por exactamente esto:
Result := Self.ToJson().AsJSon(false, false);
7c- Los métodos "FromJsonString" se cambian por exactamente esto:
Result := Self.FromJson(AJsonString);

8- Las fechas vienen como string con formato 2017-11-04T12:51:51-04:00, para obtener una fecha delphi hay que:
8a- Agregar funciones tipo GetFechaCreacion en cada clase y dentro poner:
if not ISO8601DateToDelphiDateTime( created_at , Result) then Result := 0;
8b- sino, hay que usar esa función en cada lugar que se necesite.
8c- Algo similar para las funciones Setters.

9- Con el .pas acomodar nombres de clases, sacar clases repetidas.

-Indy:
Se puede instalar o se puede dejar en un directorio a mano.
Para XE y XE2 no es posible instalarlo porque hay dependencias en el core de Delphi, conviene descomprimirlo en algún directorio y configurar el proyecto para que Search Path referencie al directorio donde hayamos dejado los .dcu (luego de haber compilado todo el paquete de Indy).

Inicializando componentes:
Código Delphi [-]
    FIdHTTP1 := TIdHTTP.Create(nil);
    FIdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    FIdCompressorZLib1 := TIdCompressorZLib.Create(nil);

    FIdHTTP1.AllowCookies := True;
    FIdHTTP1.Request.ContentLength := -1;
    FIdHTTP1.Request.ContentRangeEnd := -1;
    FIdHTTP1.Request.ContentRangeStart := -1;
    FIdHTTP1.Request.ContentRangeInstanceLength := -1;
    FIdHTTP1.Request.Accept := 'application/json';
    FIdHTTP1.Request.ContentType := 'application/json';
    FIdHTTP1.Request.AcceptEncoding := 'gzip';
    FIdHTTP1.Request.BasicAuthentication := True;
    FIdHTTP1.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
    FIdHTTP1.Request.Ranges.Units := 'bytes';
    FIdHTTP1.HandleRedirects := False;    //OJO Si es true algunos PUT pueden fallar y va a loopear 15 veces para nada
    FIdHTTP1.HTTPOptions := [hoForceEncodeParams];

    FIdSSLIOHandlerSocketOpenSSL1.Port := 0;
    FIdSSLIOHandlerSocketOpenSSL1.DefaultPort := 0;
    FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
    FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
    FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;
    FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method  := sslvTLSv1_2;
    FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
    FIdSSLIOHandlerSocketOpenSSL1.OnStatus := .(...);  //muy util para ver hasta dónde llega con SSL cuando hay errores.

    Result.FIdHTTP1.IOHandler := Result.FIdSSLIOHandlerSocketOpenSSL1;
    {$IFNDEF VER230}
    Result.FIdHTTP1.Compressor := Result.FIdCompressorZLib1; //En Delphi XE 2 (VER230) falla el descompresor.
    {$ENDIF}
//    Result.FIdHTTP1.OnWorkEnd := Result.IdHttp1WorkEnd; //Esto sirve para obtener el mensaje real que llegó antes del parseo de códigos de error de Indy

function xxxx.GETSample(const PaymentId: cardinal): string;
var
  reqURL, rsp: string;
  rspStream: TMemoryStream;
begin
    reqURL := 'aca va la url segura de mercadopago /v1/payments/' + IntToStr(PaymentId) + '?access_token=' + ACCESS_TOKEN
    if FIdHTTP1.Compressor <> nil then begin
        rsp := FIdHTTP1.Get(reqURL);
    end else begin
        rspStream := TMemoryStream.Create; //stream comprimido de respuesta
        try
            FIdHTTP1.Get(reqURL, rspStream);
            rsp := UngzipStream(rspStream);
        finally
            rspStream.Free;
        end;
    end;
    SetLastResult(rsp);

    Result := rsp;
end;

Este String de respuesta se convierte en clase de Delphi usando:
Código Delphi [-]
TMiClaseDeMercadoPagoParaPayment.FromJsonString(rsp);

Código Delphi [-]
function xxxx.UngzipStream(srcStream: TStream): string;
var
  strStream: TStringStream;
  deco : TZDecompressionStream;
begin
    srcStream.Position := 0;
    strStream := TStringStream.Create;
    deco := nil;
    try
        //Resulta que no siempre viene comprimido, verificamos
        if Pos('Content-Encoding: gzip', FIdHTTP1.Response.RawHeaders.Text) < 1 then begin
            strStream.LoadFromStream(srcStream);
        end else begin
            deco := TZDecompressionStream.Create(srcStream, 31); //stream para descomprimir, el 31 es para que se de cuenta que es gzip
            strStream.LoadFromStream(deco); //a medida que va copiando va descomprimiendo, very cheto
        end;
        Result := strStream.DataString;
    finally
        strStream.Free;
        if deco <> nil then deco.Free;
    end;
end;

Recomendación:
atrapar globalmenet las excepciones y loguear especialmente las EIdHTTPProtocolException
Código Delphi [-]
    if e is EIdHTTPProtocolException then
       Logueo( EIdHTTPProtocolException(e).ErrorMessage );

Otros:
También tengo integrado MercadoLibre.
Si necesitan algunos tips para obtener el bendito token, me avisan y posteo.
También tengo info de qué funciona y qué no para buscar pagos.
No integré mucho más que buscar buscar pagos, pero dado que la comunicación (ida y vuelta de jsons) funciona, no debería ser problemático.


Saludos

xebas123 16-01-2020 16:06:56

Integración con MP
 
Cita:

Empezado por fabianmk (Mensaje 510568)
Hola. Tengo un Punto de Venta desarrollado con RadStudio XE3 / Firebird 2.5 (Windows XP/7/8.1) desearia integrar el pago de Tarjetas de Credito/Debito a travez de MercadoPago. Ademas tengo los teclados programables con lectora de banda magnetica y con Impresoras Fiscales Epson TM-U220AF para imprimir los boucher de tarjeta.
Que experiencia tienen al respecto? Y si alguien sabe como seria para darme un orientacion o si tiene un ejemplo como se podria hacer la integracion?
Desde ya muchas gracias.
Saludos

Como comentaba en el post anterior, lo básico para integrar las API de MP estarían ahi. De ser necesario se puede hacer un server con Indy para recibir los requests desde MP o ML.
Obviamente para que MP/ML puedan avisarte de algo es necesario que tengas una IP o URL pública (ej. para recibir el callback desde ML)

Casimiro Notevi 16-01-2020 17:19:52

Puedes escribir enlaces simplemente quitando alguna letra, ejemplo: ttp, htt, htp, etc.
Y lo que sí puedes y debes es poner las etiquetas para código.
Gracias.



hsbelli72 16-01-2020 17:54:01

Excelente Aporte!.
Muchas Gracias.

Casimiro Notevi 16-01-2020 17:58:55

He añadido las etiquetas para código.
Gracias por compartirlo ^\||/^\||/^\||/

balger 17-02-2022 19:28:36

Cita:

Empezado por (MAJ) (Mensaje 526285)
En realidad no es muy complicado poder utilizar las api de mercado pago, las estuve viendo, y son llamadas que con indy tranquilamente podes hacerlo, incluso las ultimas versiones de delphi ya vienen con un trio de componentes rest que te simplifican aun mas la vida, lo que tenes que hacer es ver cual api es la que querés utilizar hacer la llamada al servidor pasando los datos que requiera la api y esperar la respuesta, en la respuesta te dice si la transacción fue aceptada o rechazada, obviamente si no querés introducir los datos manualmente tenes que capturarlos del lector de bandas magneticas.

Hola Gente.
Me toco. Tengo que integrar MP en el sistema, utilizando D10.3.3.
Estoy queriendo utilizar REST debugger para establece la conexión primaria y generar los complemente. Pero no estoy teniendo muy clara la utilización con la autenticación. Creo que hay que utilizar OAUTH2.

Alguien me podrá dar una mano. Gracias

softarg 22-02-2022 14:50:13

MercadoPago
 
Hola gente alguien utilizo MercadoPago4D ?

Parece estar bastante avanzado.
ttps://github.com/bravesoftdz/MercadoPago4D

Saludos Francisco

balger 22-02-2022 15:16:30

Cita:

Empezado por softarg (Mensaje 545523)
Hola gente alguien utilizo MercadoPago4D ?

Parece estar bastante avanzado.
ttps://github.com/bravesoftdz/MercadoPago4D

Saludos Francisco

Lo reviso y luego comento. Gracias.
La verdad es que busque por todos lados y no habia encontrado nada. evidentemente no busque nada bien.

Gracias nuevamente


La franja horaria es GMT +2. Ahora son las 18:23:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi