Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Aca se puede ver el demo en ejecucion, compilado con Delphi 2010

Ya he solucionado los problemas de compilación (record helper, namespaces de las unidades, TFormatSettings)

Responder Con Cita
  #2  
Antiguo 30-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola nuevamente

He creado un port para FreePascal de esta biblioteca

Hay algunas pequeñas diferencias con la version para Delphi (mas que nada las dependencias, tuve que tocar bastante la biblioteca lkJSON)

Pueden obtenerlo acá

Saludos
Responder Con Cita
  #3  
Antiguo 04-08-2016
fcios fcios is offline
Miembro
 
Registrado: jul 2003
Posts: 108
Poder: 21
fcios Va por buen camino
Hola yo lo hice con 2 componentes de las ICS

TSslHttpCli y TSslContext;

// Consulta a Padrón Nivel 3 WSPN3

Código Delphi [-]
unit Unit1;
// usa los ICS de OverbyteIcsV7Gold
// http://www.overbyte.be/frame_index.h...ducts/ics.html

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OverbyteIcsWSocket, OverbyteIcsWndControl, OverbyteIcsHttpProt,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    SslHttpCli1: TSslHttpCli;
    SslContext1: TSslContext;
    Label5: TLabel;
    ConsultarCuitBB: TBitBtn;
    ICSMemo1M: TMemo;
    Memo1: TMemo;
    SalirBB: TBitBtn;
    ConsultarCuitE: TEdit;
    procedure SslHttpCli1RequestDone(Sender: TObject; RqType: THttpRequest;
      ErrCode: Word);
    procedure ConsultarCuitBBClick(Sender: TObject);
    procedure SalirBBClick(Sender: TObject);
  private
    { Private declarations }
    sAux : string;
    function  BuscoValorDelNodo1(const sTexto:{wide}String; const sNodoABuscar:string; var sRespuesta:{wide}string):boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses StrUtils{PosEx};

const
  myEOL        = #13+#10; // simula enter o fin de linea

{$R *.dfm}

procedure TForm1.ConsultarCuitBBClick(Sender: TObject);
var
  nCantErrores :byte;
  sCuit : string;
  sRespu :string;
const nMAX_ERRORES = 2; // PORQUE LA PRIMERA VEZ QUE SE CONECTA ES POSIBLE QUE DE ERROR

begin
  ConsultarCuitBB.Enabled := False;
  ConsultarCuitBB.Update;        

  ConsultarCuitE.Text := StringReplace(ConsultarcuitE.Text,'-','',[rfReplaceAll]);
  sCuit := ConsultarCuitE.Text;

  SslHttpCli1.URL := 'https://soa.afip.gob.ar/sr-padron/v2/persona/'+
    sCuit;

  SslHttpCli1.RcvdStream := TMemoryStream.Create;

  nCantErrores :=0;
  while True do begin
    try
      IcSMemo1M.Lines.Clear;
      SslHttpCli1.Get;
    except
      on E: Exception do begin
        if e.Message = 'Connection aborted on request' then begin
          ICSMemo1M.Lines.Append('Error al conectar, verifique tener libeay32.dll y ssleay32.dll'+myeol+
                              e.Message {+' '+e.ClassName});
          ConsultarCuitBB.Enabled := True;
          Exit;
        end;
        ICSMemo1M.Lines.Append(myEOL+'Error al conectar '+myeol+e.Message {+' '+e.ClassName});
        ConsultarCuitBB.Enabled := True;
        exit;
      end;
    end;        // 123,34,115,117, = {"su

//  if SslHttpCli1.RcvdStream = nil then begin
    if SslHttpCli1.RcvdCount = 0 then begin
        Inc(nCantErrores);
        sAux := DateTimeToStr(Now) + ' ERROR DE CONEXION, RX, ' +
          ' INTENTO ' + IntToStr(nCantErrores) +myeol+ 'VERIFIQUE QUE EXISTE LIBEAY32.DLL Y SSLEAY32.DLL' ;
          // myEOL+ e.ClassName + myEOL + e.Message;
        //  GraboErrorLog(sSistema+myEOL+sAux,not bMostrarError);
        ICSMemo1M.Lines.Append(sAux);
        if nCantErrores <= nMAX_ERRORES then begin
          // MuestroErrorArba(False,True,sAux);
          ICSMemo1M.Lines.Append('Intento '+intToStr(nCantErrores));
        end else
        begin
          //MuestroErrorArba(False,True,sAux,5);
          ICSMemo1M.Lines.Append(sAux);
          Break;
        end;
      Continue;
    end;

    Break;
  end;
  SslHttpCli1.RcvdStream.Free;
  SslHttpCli1.RcvdStream := nil;

  if BuscoValorDelNodo1(ICSMemo1M.Text,'success', sRespu) = True then begin
    Memo1.Lines.Append('success='+sRespu);
  end else begin
    memo1.Lines.Append('No se encuentra cuit ' + sCuit + myeol+
      ICSMemo1m.Text);
  end;

  if BuscoValorDelNodo1(ICSMemo1M.Text,'idPersona', sRespu) = True then begin
    Memo1.Lines.Append('idPersona='+sRespu);
  end else begin
    memo1.Lines.Append('No se encuentra cuit ' + sCuit + myeol+
      ICSMemo1m.Text);
  end;

  if BuscoValorDelNodo1(ICSMemo1M.Text,'tipoPersona', sRespu) = True then begin
    Memo1.Lines.Append('tipoPersona='+ sRespu);
  end else begin
    memo1.Lines.Append('No se encuentra tipoPersona para ' + sCuit + myeol+
      ICSMemo1m.Text);
  end;


  //
  ConsultarCuitBB.Enabled := True;
end;

function  TForm1.BuscoValorDelNodo1(const sTexto:{wide}String; const sNodoABuscar:string; var sRespuesta:{wide}string):boolean;
// usada para AFIP
// si no encontró el sNodoABuscar retorna False y limpia sRespuesta
// sTexto : texto donde buscar el sNodoABuscar
// sNodoABuscar es el string a buscar ej. 'direccion'
//
var n,n2,nLongNodo:integer;
begin
  n:=Pos('"' + sNodoABuscar + '":',sTexto);
  if n = 0 then begin // si no lo encuentra retorna FALSE
    Result := False;
  sRespuesta := '';
    Exit;
  end;
  Result := True;
  nLongNodo := Length(sNodoABuscar) + 3;

  // busco donde empieza el nodo
  if sTexto[n + nLongNodo ] = '[' then begin // si es array
    n2 := PosEx(']',sTexto,n) +1 ;
  end
  else
    n2 := PosEx(',',sTexto,n);

  if sTexto[n2-1] = '}' then // saco el cierre } de por ejemplo idProvincia
    Dec(n2);


//  if n2 = 0 then
//    MuestroError(True,'NO SE ENCUENTRA FIN DE NODO' + sNodoABuscar,LogSL,True);
//sRespuesta := MidStr(sTexto,n+nLongNodo,n2{-n-nLongNodo});
  sRespuesta := copy(sTexto,n+nLongNodo,n2-n-nLongNodo);
end;


procedure TForm1.SslHttpCli1RequestDone(Sender: TObject;
  RqType: THttpRequest; ErrCode: Word);
var
  Data : String;
begin
    SslHttpCli1.SendStream.Free;
    SslHttpCli1.SendStream := nil;

    if ErrCode <> 0 then begin
        ICSMemo1M{ICSErrorM}.Lines.Append('Post error #' + IntToStr(ErrCode));
        SslHttpCli1.RcvdStream.Free;
        SslHttpCli1.RcvdStream := nil;
        Exit;
    end;
    if SslHttpCli1.StatusCode <> 200 then begin
        ICSMemo1M{ICSErrorM}.Lines.Append('Post error: ' + IntToStr(SslHttpCli1.StatusCode) +
                SslHttpCli1.ReasonPhrase);
        SslHttpCli1.RcvdStream.Free;
        SslHttpCli1.RcvdStream := nil;
        Exit;
    end;
//  Memo1.Lines.Append('Post was OK. Response was:');
    SslHttpCli1.RcvdStream.Seek(0, 0);
    SetLength(Data, SslHttpCli1.RcvdStream.Size);
    SslHttpCli1.RcvdStream.Read(Data[1], Length(Data));
    ICSMemo1M.Lines.Append(Data);
  // grabo log
//  ArbaLogSL.Append(FormatDateTime('dd-mm-yyyy hh:nn:ss ',now)+ UltimaActualizacionL.Caption+
//    ' TX '+ArbaDatosSL[ccDESCRIPCION]+
//    myEOL + ArbaSL.Text +myEOL+
//   'RX'+ myEOL + SslHttpCli1.RcvdHeader.Text +myEOL+ Data +myEOL);

//  ArbaLogSL.SaveToFile(sArbaArchivoLog);
end;

procedure TForm1.SalirBBClick(Sender: TObject);
begin
  Close;
end;

end.

Última edición por fcios fecha: 04-08-2016 a las 01:50:38.
Responder Con Cita
  #4  
Antiguo 27-06-2017
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
He visto el código y esta todo muy bueno.

El problema es que necesitamos entre todos buscar alguna solución para poder usar tu código con las librerías que trae Delphi XE8. Es que intento por mi parte usar lo menos posible componentes de terceros, ya que en ocaciones me ha pasado que al cambiar de versión de Delphi no hay actualización de los mismos y es engorroso ponerce a tocarlos para hacerlos compatibles.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #5  
Antiguo 27-06-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo utilizo ese codigo con Delphi 2010. Compila sin ningun problema. Eso si, necesitas la biblioteca Synapse para la parte de HTTP, ya que con Indy he tenido problemas; y alguna otra biblioteca para tratar con JSON, yo he usado lkJson

De hecho, el mismo codigo lo he traducido a FreePascal (hay algunas cuestiones menores relacionadas con el soporte a genericos y ayudantes, pero es en esencia el mismo codigo)

Si queres usar otras bibliotecas simplemente tenes que implementar un par de interfaces:

Las que convierten JSON a objetos de negocio, definidas en Afip.PublicAPI.Parsers.pas

Código PHP:
  IAfip_PersonParser = interface
    [
'{3A2CC23D-B463-45C8-B3BA-8546DBF21A62}']
    function 
JsonToPerson(const AJsonstring): IPersona_Afip;
    function 
JsonToDocumentos(const AJsonstring): TArray<string>;
  
end;

  
IAfip_ItemParser = interface
    [
'{0EF21EDC-EFE9-4600-8732-1BBE3A7B136C}']
    function 
JsonToItems(const AJsonstring): TArray<TItem_Afip>;
    function 
JsonToDependencies(const AJsonstring): TArray<TDependencia_Afip>;
  
end
Y un cliente HTTP, esta interfaz esta definida en Afip.PublicAPI.HttpClient.pas

Código PHP:
  /// <summary>
  ///  Esta interface define los dos metodos basicos que tienen que implementar los clientes HTTP
  ///  Segun la documentacion de la AFIP el encoding del response es UTF-8
  /// </summary>
  
IHttpClient = interface
    [
'{AFA99837-6CBB-4111-A268-D8AB8E4CD8DD}']
    function 
HttpGetText(const AUrlstring): string;
    function 
HttpGetBinary(const AUrlstring): TStream;
  
end
Despues conectas todo, creando una instancia de la clase TAfipQuery. El constructor te va a indicar que objetos necesitas suministrar:


Código Delphi [-]
var
  API_AFIP: IApi_Afip;
  HttpClient: IHttpClient;
  PersonParser: IAfip_PersonParser;
  ItemsParser: IAfip_ItemParser;
begin
  HttpClient := // crear http client
  PersonParser := // crear parser json
  ItemsParser:= // crear parser json
  API_AFIP:= TAfipQuery.Create(HttpClient, PersonParser, ItemsParser);
  // usar API

Última edición por AgustinOrtu fecha: 27-06-2017 a las 05:15:12.
Responder Con Cita
  #6  
Antiguo 28-06-2017
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Parece que para poder usar tu código en Delphi XE8 no me va a quedar otra que usar clases de terceros para la parte de JSON. El tema es que quería evitar eso para no tener muchas cosas de terceros que luego complican la migración a otras versiones

Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #7  
Antiguo 28-06-2017
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Perdón que mi mensaje anterior salió dos veces. Dío error al enviarlo la primera vez y cuando lo mande la segunda no me dicuenta que ya se había grabado la primera

Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
Respuesta



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
Factura Electronica - Afip Argentina Joe_Balda Varios 30 30-01-2021 04:10:34
Factura Electrónica AFIP Argentina SergioFrey Noticias 2 19-05-2017 21:02:03
Como informar Factura Electrionica 'B' AFIP ARGENTINA adripugliesso Varios 1 24-08-2015 14:14:28
Ayuda Web Service AFIP Argentina patriciojgf Delphi para la web 1 04-11-2014 17:46:34
Padrón telefónico rruffino SQL 2 09-08-2008 16:27:02


La franja horaria es GMT +2. Ahora son las 08:33:51.


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
Copyright 1996-2007 Club Delphi