Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2025
Maska10 Maska10 is offline
Miembro
 
Registrado: abr 2020
Posts: 50
Poder: 7
Maska10 Va por buen camino
Cita:
Empezado por nincillo Ver Mensaje
Creo que necesito ayuda para saber como tratar la cadena que me devuelve dicha función en uno de sus parámetros.
La función devuelve un integer, y luego la "chicha" la devuelve en uno de los parámetros, que se supone que es una string con formato xml.

Yo hago la llamada a la función, y en el valor entero que me devuelve al función me viene un 0, con lo cual se supone que todo fue correcto, pero cuando intenten visualizar el contenido que ve viene en el parámetro string o añadirlo a las lineas de un memo, el programa se cierra de pronto sin llegar a sacar ningún mensaje de error.

Voy a poner el formato de llamada que viene en el manual y posteriormente los trozos de código de Delphi2007.



Un ejemplo que ponen en .NET


Y como hago yo la definición en Delphi que seguro que algo estoy haciendo mal en la definición o en el tratamiento de la respuesta:
Buenas tardes compañero, tengo exactamente el mismo problema con la respuesta ... ¿conseguiste saber cual era el problema?

Saludos.
Responder Con Cita
  #2  
Antiguo 25-02-2025
Maska10 Maska10 is offline
Miembro
 
Registrado: abr 2020
Posts: 50
Poder: 7
Maska10 Va por buen camino
Me contesto yo solo, la solución pasa por usar una variable de array of char en vez de un string.
Responder Con Cita
  #3  
Antiguo 25-02-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.441
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Maska10 Ver Mensaje
Me contesto yo solo, la solución pasa por usar una variable de array of char en vez de un string.

Es una norma genérica, en DLL, ActiveX, COM,... nunca usar string, siempre punteros, PChar, PAnsiChar,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 25-02-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Buenas.


Este es un tema que me interesa. En su día (hace años) contacté con RedSys para poder usar sus terminales pero me plantearon unas condiciones de "homologación" brutales por lo que al final desistí del tema.


Hace año y pico decidí integrar la plataforma Paytef con lo que el tema fue bastante más llevadero pero claro, tienes que ceñirte a sus condiciones de terminales propios y pagar un mantenimiento, pequeño pero hay que pagar.


Si obtienes resultados te agradecería que comentaras.


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 26-02-2025
Maska10 Maska10 is offline
Miembro
 
Registrado: abr 2020
Posts: 50
Poder: 7
Maska10 Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Buenas.


Este es un tema que me interesa. En su día (hace años) contacté con RedSys para poder usar sus terminales pero me plantearon unas condiciones de "homologación" brutales por lo que al final desistí del tema.


Hace año y pico decidí integrar la plataforma Paytef con lo que el tema fue bastante más llevadero pero claro, tienes que ceñirte a sus condiciones de terminales propios y pagar un mantenimiento, pequeño pero hay que pagar.


Si obtienes resultados te agradecería que comentaras.


Gracias y un saludo.
Exacto, yo estuve en la misma situación, incluso también integré Paytef .... resulta que para esto tienes la librería dllTpvpcLatente.dll que es de Redsys y ya está homologada por lo que solamente tienes que trabajar con ella y solo necesitas el código de comercio, clave de firma y número de terminal.

Notas:

- La documentación es una castaña
- Hasta descubrir que carajo de librería necesitas es navegar, preguntar, que te digan chorradas, que no saben, preguntas a tu banco, preguntas a Redsys ... nadie sabe que carajo le estas diciendo.
- La de tiempo de mi vida que habré perdido con esto y al final era sencillo

Resumen:

1 - Logicamente necesitas el servicio TPV/PC de Redsys (contratado en tu banco)
2 - Para conectar a ese TPV/PC de las narices vas a optar por el método SLIM PACK, que es el que proporciona la librería y por tanto no tienes que homologar tu aplicación (ya que la que interactura con el datafono, pin-pad, ping pong) es la librería
3 - La documentación es cachonda, por ejemplo la función para conectar e inicializar el datafono te pide varios parámetros (codigo de comercio, número de terminal, clave de firma), pero también el puerto com al que está conectado y la versión ... pero luego la documentación te dice que los 2 últimos no los tienes que pasar .. y claro, como la función los espera, no sabes si enviar cadena en blanco, nulo, o que carajo .. así que prueba/error
4 - Respecto al útimo problema que tenía el otro usuario (y yo) que al final era el tipo de variable, pues eso, la documentación te dice que le pases un string, pero te dice que es un "buffer de string", así que creando el puntero pues ha quedado resuelto.

En fin, si necesitas el código de la función me dices.
Responder Con Cita
  #6  
Antiguo 26-02-2025
jakematespain jakematespain is offline
Miembro
 
Registrado: ene 2025
Posts: 69
Poder: 2
jakematespain Va por buen camino
Hola, yo justo también estoy liado con ese tema, si me pudiese pasar un ejemplo de como haces el proceso de la declaracion y llamada te lo agradecería. Como dices, la documentación es muy mala y conseguir las librería es todo un suplicio.
Gracias de antemano.
Responder Con Cita
  #7  
Antiguo 26-02-2025
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.215
Poder: 24
newtron Va camino a la fama
Cita:
Empezado por Maska10 Ver Mensaje
...
En fin, si necesitas el código de la función me dices.

¡¡Pues claro!!


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 26-02-2025
Maska10 Maska10 is offline
Miembro
 
Registrado: abr 2020
Posts: 50
Poder: 7
Maska10 Va por buen camino
Aquí os dejo el código, la primera función es solo para pasar el array of char a String, la segunda función es la que creo que buscais:

Código Delphi [-]
function tfrmentradassalidascaja.ArrayToString(const a: array of Char): string;
begin
  if Length(a)>0 then
    SetString(Result, PChar(@a[0]), Length(a))
  else
    Result := '';
end;


procedure tfrmentradassalidascaja.enviadatafono(Sender: TObject);
type
  TIniTpvpcLatente = Function(cComercio,cTerminal,cClaveFirma,cConfPuerto,cVersion: string) : integer;stdcall;
  TOperPinPad = function(cImporte, cFactura, cTipoOper :string; var cXmlResp :array of Char; iTamMaxResp : integer) : integer;stdcall;
var
  DLLHandle: THandle;
  IniTpvpcLatente: TIniTpvpcLatente;
  OperPinPad: TOperPinPad;
  respuesta: integer;
  strrespuesta, codcomercio,terminal,firma,importe,venta: string;
  Str2: array[0..29999] of Char;

begin

  codcomercio:='45465464';
  firma:='assadfsadfasdfsadfsadf';
  terminal:='1';
  importe:='20.50';
  venta:='Fact1001';

  DLLHandle := LoadLibrary('dllTpvpcLatente.dll');
  try
    if DLLHandle <= 0 then
      begin
      ShowMessage('Error, conector dllTpvcLatente.dll no encontrado');
      exit;
      end;


    @IniTpvpcLatente := GetProcAddress(DLLHandle, 'fnDllIniTpvpcLatente');
    @OperPinPad := GetProcAddress(DLLHandle, PChar('fnDllOperPinPad'));

    if Assigned(IniTpvpcLatente) then
    begin
           respuesta:=IniTpvpcLatente(codcomercio,terminal,firma,'','');
           if respuesta < 0 then
              begin
              showmessage('Error de comunicación con el Datafono/Tpv/PinPad, código de error: ' + inttostr(respuesta));
              Exit;
              end;

           strrespuesta:='';
           respuesta:=OperPinPad(importe,venta,'PAGO',Str2,30000);
           if respuesta < 0 then
              begin
              showmessage('Error al enviar la orden al Datafono/Tpv/PinPad, código de error: ' + inttostr(respuesta));
              Exit;
              end;

           strrespuesta:=ArrayToString(Str2);


           if pos('Autorizada',strrespuesta)> 0 then
              begin
              // aceptada
        showmessage('Operación Aceptada');
              end
           else
              begin
              // denegada
              showmessage('Operación Denegada');
              exit;
              end;

    end
    else
      begin
      ShowMessage('Error, procedimiento/Funcion no encontrado');
      end;

  except
     on E : Exception do
     begin
       ShowMessage('Exception class name = '+E.ClassName);
       ShowMessage('Exception message = '+E.Message);
     end;
  end;

end;

Última edición por Casimiro Noteví fecha: 26-02-2025 a las 20:34:39.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Integración con una dll externa con COM+ jars Providers 2 08-03-2013 11:09:42
Pago con Tarjeta de Credito OnLine Neeruu Internet 8 24-02-2012 22:33:14
Integración de php y delphi Will PHP 4 10-08-2006 23:13:48
Integración de datos kalimero Firebird e Interbase 3 17-02-2005 22:03:38
Pago con tarjeta de crédito aom PHP 6 30-11-2004 10:16:40


La franja horaria es GMT +2. Ahora son las 12:25:55.


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