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 AJson: string): IPersona_Afip;
function JsonToDocumentos(const AJson: string): TArray<string>;
end;
IAfip_ItemParser = interface
['{0EF21EDC-EFE9-4600-8732-1BBE3A7B136C}']
function JsonToItems(const AJson: string): TArray<TItem_Afip>;
function JsonToDependencies(const AJson: string): 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 AUrl: string): string;
function HttpGetBinary(const AUrl: string): 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 := PersonParser := ItemsParser:= API_AFIP:= TAfipQuery.Create(HttpClient, PersonParser, ItemsParser);