Hola a todos los foreros. creo que es la segunda vez que escribo y la verdad es que (como dicen en mi país) "no doy pie con bola". Este foro me ha ayudado incontables veces con dudas y problemas que tenía. Y ahora nuevamente recurro a ustedes para saber si pueden darme una mano.
Estoy desarrollando un sistema con parte de proveedores, compras, venta, etc. y en la parte de compra, quiero añadir la posibilidad de que se pueda verificar si el CAE de la factura entregada por el proveedor, está autorizado por AFIP. Tengo algo de código desarrollado, pero la verdad es que mi experiencia programando a este nivel es practicamente escaza o nula y estoy muy trabado.
En si, no se si la manera en que estoy enviando el token y sign de AFIP, es de esa manera o que mas me está faltando, al ejecutar mi codigo me devuelve desde el WS el error 1000 que es token y/o sign invalido.
Sin mas, les dejo el codigo a ver si pueden darme una mano.
Código Delphi
[-]unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxContainer, cxEdit, ComCtrls, dxCore, cxDateUtils, InvokeRegistry, Rio,
ShellAPI,SOAPHTTPClient, StdCtrls, cxTextEdit, cxMaskEdit, cxDropDownEdit,
cxCalendar;
type
TForm2 = class(TForm)
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
lblRst: TLabel;
lblError: TLabel;
Button1: TButton;
cxDEEmision: TcxDateEdit;
txtPVta: TEdit;
txtNro: TEdit;
txtCAE: TEdit;
txtIDoc: TEdit;
txtNDoc: TEdit;
txtFDoc: TEdit;
cmbTipoCbte: TComboBox;
txtImporte: TEdit;
HTTPRIO_CAE: THTTPRIO;
resp: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
token, sign : string;
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses
LoginCms1, service1, service;
procedure TForm2.Button1Click(Sender: TObject);
var
token, sign, ruta, cuit : string;
auth : FEAuthRequest;
respuesta : FEConsultaCAEResponse;
ConsultaCAE : FEConsultaCAEReq;
x : integer;
port: ServiceSoap;
begin
ruta := ExtractFilePath(Application.ExeName);
cuit := txtIDoc.Text+txtNDoc.Text+txtFDoc.Text;
resp.Lines.Add(ruta);
resp.Lines.Add(token);
resp.Lines.Add(sign);
resp.Lines.Add('2034038545');
resp.Lines.Add('-----------------------------------------');
resp.Lines.Add('-----------------------------------------');
auth := FEAuthRequest.Create;
auth.Cuit := 20340385455;
auth.Sign := sign;
auth.Token:= token;
ConsultaCAE := FEConsultaCAEReq.Create;
ConsultaCAE.cuit_emisor := strtoint64(cuit);
ConsultaCAE.tipo_cbte := cmbTipoCbte.ItemIndex;
ConsultaCAE.punto_vta := strtoint(txtPVta.Text);
ConsultaCAE.cbt_nro := strtoint64(txtNro.Text);
ConsultaCAE.imp_total := strtofloat(txtImporte.Text);
ConsultaCAE.cae := txtCAE.Text;
ConsultaCAE.fecha_cbte := formatdatetime('yyyymmdd', cxDEEmision.Date);
resp.Lines.Add(cuit);
resp.Lines.Add(inttostr(cmbTipoCbte.ItemIndex));
resp.Lines.Add(txtPVta.Text);
resp.Lines.Add(txtNro.Text);
resp.Lines.Add(txtImporte.Text);
resp.Lines.Add(txtCAE.Text);
resp.Lines.Add(formatdatetime('yyyymmdd', cxDEEmision.Date));
port := GetServiceSoap(false,'', HTTPRIO_CAE);
respuesta := port.FEConsultaCAERequest(auth, ConsultaCAE);
if (length(inttostr(respuesta.Resultado)) > 0) then
begin
if respuesta.Resultado = 1 then
begin
resp.lines.Add('CAE Autorizado y Valido.');
end
else
begin
resp.Lines.Add('CAE NO valido.');
resp.Lines.Add('Error Nro: '+inttostr(respuesta.RError.percode));
resp.Lines.Add('--Error Msg: '+respuesta.RError.perrmsg);
end;
end
else
begin
resp.Lines.Add('Error Nro: '+inttostr(respuesta.RError.percode));
resp.Lines.Add('--Error Msg: '+respuesta.RError.perrmsg);
end;
auth.Free;
ConsultaCAE.Free;
respuesta.Free;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
token := token.crt;
sign := certificado.key
end;
end.
Desde ya, muchas gracias a todos.
Saludos!