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 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
GetNoCertificado en Delphi 2010

Hola, yo tuve el mismo problema con Delphi 2010 y tuve que corregir la funcion. Aqui esta como quedo y funciona bien.


Código Delphi [-]
 
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;





Espero que te sirba, la gran diferencia es que Delphi 2010 usa Unicode en los carcteres, entonces el Char ya no es de 1 byte, ahora es de 2.
Responder Con Cita
  #2  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Smile pregunta sobre el resultado devuelto

Cita:
Empezado por Morrismx Ver Mensaje
Hola, yo tuve el mismo problema con Delphi 2010 y tuve que corregir la funcion.

Espero que te sirba, la gran diferencia es que Delphi 2010 usa Unicode en los carcteres, entonces el Char ya no es de 1 byte, ahora es de 2.
Muchas gracias Morrismx, observe bien la función que posteaste también tuve que hacer el mismo typecast a PChar al llamar BIO_read_filename y ya corre el programa, pero veo que el error que me marca ahora no es por eso, sino por el resultado que me da la función.

Una pregunta, usaste el XML DATA BIND del delphi para manejar tu xml??

porque el error que me marca ahora es cuando intento asignarle el resultado de la función a mi atributo NoCertificado en el xml:
Código Delphi [-]
CFD.NoCertificado := GetNoCertificado('aaa010101aaa_CSD_01.cer.pem');
EOleException : 'se encontró un carácter no válido en el contenido del texto'

Es decir, le hiciste algo al resultado antes de pasárselo a NoCertificado?

algo como:
Código Delphi [-]
CFD.NoCertificado := BinaryToStr(GetNoCertificado('aaa010101aaa_CSD_01.cer.pem'));

Muchas gracias.
Responder Con Cita
  #3  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Certificado

Hola,

No le doy ningun tratamiento especial, la funcion regresa un String y en mi caso uso ese string y lo meto a la base de datos y archivo XML

Código Delphi [-]
procedure TFrmFacturacion.Button1Click(Sender: TObject);
var
NoCertificado:String;
begin
NoCertificado:=GetNoCertificado(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
Label1.Caption:=NoCertificado;
end;


Saludos
Morris
Responder Con Cita
  #4  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Unhappy Regreso misterioso

Cita:
Empezado por Morrismx Ver Mensaje
Hola,

No le doy ningun tratamiento especial, la funcion regresa un String y en mi caso uso ese string y lo meto a la base de datos y archivo XML

Código Delphi [-]
procedure TFrmFacturacion.Button1Click(Sender: TObject);
var
NoCertificado:String;
begin
NoCertificado:=GetNoCertificado(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
Label1.Caption:=NoCertificado;
end;

Saludos
Morris

Híjole, a mí me regresa:
〱〰㈱〰〰〰〰㈰㔲㜱䓻@篖@텐·V

Entonces creo que estará perdiendo el apuntador de la cadena de regreso o algo por el estilo... o será la versión del libeay32.dll???
Responder Con Cita
  #5  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Edgar, asegurate de hacer los cambios a la funcion

Código Delphi [-]
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;  <<==== Este es el cambio
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;

el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo

dejame saber si te funciona

saludos
Morris
Responder Con Cita
  #6  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Talking Liiissto!

Cita:
Empezado por Morrismx Ver Mensaje
Edgar, asegurate de hacer los cambios a la funcion

Código Delphi [-]
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;  <<==== Este es el cambio
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;

el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo

dejame saber si te funciona

saludos
Morris

CLARO!!!!!! Aaaaarg qué coraje!!!! qué ciego estaba!

Ya está!

Chihuahua! Un día entero buscando la solución y en mis narices estuvo todo el tiempo! jajajaja, a veces eso pasa verdad?...

MUCHISISISISÍSIMAS GRACIAS MORRIS!!!!

Eso era.

Gracias y Saludos!!!!!
Responder Con Cita
  #7  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Wooot!!!

Me da gusto que ya te funcionó!

Saludos
Morris
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
Mexico - Como crear sellos en FACTURA ELECTRONICA.. pcicom API de Windows 12 10-11-2012 18:46:55
Factura Electrónica aig Varios 13 10-12-2010 17:12:44
factura electronica cmm07 Varios 4 02-04-2009 17:46:03
factura electronica spia Varios 2 22-02-2009 21:30:06
Factura electronica AUNA Aprendiz Varios 5 01-09-2005 10:44:15


La franja horaria es GMT +2. Ahora son las 11:00:29.


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