Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Integracion con pago por tarjeta Redsys: TpvPcImplantado.dll (https://www.clubdelphi.com/foros/showthread.php?t=93693)

fmira 14-01-2019 17:27:03

Integracion con pago por tarjeta Redsys: TpvPcImplantado.dll
 
Buenas tardes,


Estoy intentando integrar el módulo de pago de Redsys con una de nuestras aplicaciones. Para ello utilizamos la librería TpcPcImplantado.dll (que nos facilita Redsys).


La verdad es que nos da muchísimos problemas, si queremos usarla como ActiveX da errores de importación en las versiones 2007 y Rad Studio 10.2,en funciona en Delphi 5 se importa bien pero si en el proyecto usas alguna función de la unidad shlobj de Delphi da errores de “Access violation” en olaut32.dll.


Si la intentamos usar como una DLL, no se carga si el IDE de Delphi está abierto. Si la inicias con fndllIniTpvpcLatente te devuelve respuesta Ok y cuando intentas ejecutar cualquier otra función te diche que no está inicializado

Alguna idea?
Gracias por anticipado.

Casimiro Notevi 14-01-2019 22:01:49

¿Habéis consultado a Redsys?

fmira 15-01-2019 08:10:22

Si. He consultado a Redsys y me dicen que tienen ejemplos en C, Visual Basic, HTML, Java, pero nada en Delphi.
Abro un ejemplo de VB o C, intento hacer lo mismo en Delphi (es relativamente sencillo) y da errores. Yo creo que es la manera de cargar a la libreria o definir las funcones de la dll.

Casimiro Notevi 15-01-2019 09:51:19

Difícil ayudarte si no tenemos esa dll ni vemos el código que estás usando, ni el que tienen de ejemplo en redsys :(

APO 28-03-2019 12:52:38

Yo utilizo la dllTpvpcLatente.dll y funciona correctamente. Te pongo el código de la declaración y creación:

Código Delphi [-]
   //Declaración Objeto REDSYS
   Tpvpc: TTpvpc;

   //Creamos el Objeto RedSys
   if Tpvpc=nil then Tpvpc:=TTpvpc.Create(Tpvpc_Comercio,Tpvpc_Terminal,Tpvpc_ClaveFirma);

mqm 10-05-2019 10:27:32

Estoy liado con lo mismo, abrir desde delphi una pasarela de cobro con redsys.
Podrías mostrar un pequeño ejemplo de como realizas el proceso?

RUBEN_SP 20-09-2019 19:27:08

Hola APO

¿Me puedes indicar como lo haces? y ¿Donde consigues la DLL?

Gracias de antemano y saludos

tec 19-02-2020 13:08:20

dllTpvpcLatente.dll
 
Buenos días,


debo implantar la integración con dicha libreria en D6. ¿ Se puede con D6 ?. ¿ Algún ejemplo ?



Muchas gracias,


Saludos

nincillo 30-10-2020 17:26:01

Conseguir hacer funcionar la OperPinPad
 
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.

Cita:

Identificador Objeto: DllTpvpcLatente.TpvpImplantado

Para inicializar (que me funciona perfectamente):
int fnDllIniTpvpcLatente(LPCTSTR cComercio, LPCTSTR cTerminal, LPCTSTR cClaveFirma, LPCTSTR cConfPuerto, LPCTSTR cVersion)

Para mandar la petición de pago (que me funciona parcialmente, me aparece en el importe del pinpad el importe a cobrar y todo, pero que me rompe al intentar tratar el parámetro en el que me viene la información "importante" de la operación):
int fnDllOperPinPad(LPCTSTR cImporte, LPCTSTR cFactura, LPCTSTR cTipoOper, LPTSTR cXMLResp, int iTamMaxResp);
Un ejemplo que ponen en .NET
Cita:

[DllImport("dllTpvpcLatente.dll")]
public static extern int fnDllOperPinPad(String cImporte, String cFactura, String cTipoOper, StringBuilder cXMLResp, int iTamMaxResp);

/// <summary>
/// Función que confirma como se quiere realizar una operación que es DCC. Este método sólo debe
/// ser llamado después de fnDllOperPinPad.
/// </summary>
/// <param name="cImporte">Mismo valor que el que se utilizó en fnDllOperPinPad</param>
/// <param name="cFactura">Mismo valor que el que se utilizó en fnDllOperPinPad</param>
/// <param name="cTipoOper">Mismo valor que el que se utilizó en fnDllOperPinPad</param>
/// <param name="cCodDivisa">Código de divisa que debe seleccionar el Titular de la Tarjeta.</param>
/// <param name="cXMLResp">buffer que almacenará la cadena con el XML de respuesta recibido desde el TPV-PC. El XML se describe en detalle en el documento TPVPC WS Consultas 2d1.</param>
/// <param name="iTamMaxResp">tamaño máximo de la cadena que puede almacenar el buffer cXMLResp.</param>
/// <returns>valor = 0, la operación se proceso correctamente. Este resultado no indica que se ha autorizado o denegado, simplemente
/// que la petición se ha realizado con exito. Para ver el resultado de la operación se debe analizar la respuesta
/// recibida en cXMLResp.
///
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:
Cita:

implementation

{$R *.dfm}
// Método dinámico ->
type
TOperPinPad = function(cImporte, cFactura, cTipoOper :string; var cXmlResp :String; iTamMaxResp : integer) : integer;stdcall;

.....

procedure TForm1.BtnEnviarClick(Sender: TObject);
var
err : Integer;
OperPinPad : TOperPinPad;
cImporte, cFactura, cTipoOper:string;
cXmlResp: String;
iTamMaxResp:Integer;
begin
// if Conectado then
begin
{ Intento mandar la orden de pago }
@OperPinPad := GetProcAddress(dllHandleTpvPcLatente, PChar('fnDllOperPinPad'));
if @OperPinPad <> Nil then
begin
iTamMaxResp := 1024;
cImporte:= '0.01';
cFactura:='NF 2222';
cTipoOper:='PAGO';
cXmlResp:='';
err:=OperPinPad(cImporte, cFactura, cTipoOper, cXmlResp, iTamMaxResp);
Memo1.lines.add('Resultado: ' + IntToStr(err));
ShowMessage('Resultado: ' + IntToStr(err));
ShowMessage('cXmlResp: ' + cXmlResp);
Memo1.lines.add('cXmlResp: ' + cXmlResp) // --> Al principio, la llegar a esta línea, rompía. Ahora ya rompe al hacer el ShowMessage de un poco más arriba
end;
end
// else
// Memo1.lines.add('No hay conexión establecida...');
end;



La franja horaria es GMT +2. Ahora son las 00:54:27.

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