Hola, siguiendo vuestros ejemplos, estoy intentando enviar un 240 a Vizcaya y recibo
response status code: 200
RESP.BODY:
RESP.HEADER:
Date: Mon, 24 Jan 2022 16:51:58 GMT
Server: JBoss-EAP/7
eus-bizkaia-n3-identificativo: 5506744
X-Powered-By: Undertow/1
eus-bizkaia-n3-mensaje-respuesta: El interesado no está identificado.
eus-bizkaia-n3-codigo-respuesta: N3_0000002
eus-bizkaia-n3-numero-registro:
eus-bizkaia-n3-tipo-respuesta: Incorrecto
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Y no hay manera de avanzar, entiendo que es algun problema de firma pero lo he intentado con dos firmas diferentes de la FNMT (de representante) y que segun he leido no tienen ningun problema para entrar en los expedientes de
https://www.ebizkaia.eus/es/mis-expedientes
El codigo delphi , lo he hecho con las chilkat, pero recibo el mismo error con NetHTTPClient
Código Delphi
[-]
procedure TForm1.enviovizcaya(Sender: TObject);
var
glob: HCkGlobal;
success: Boolean;
xmlToSign: HCkXml;
gen: HCkXmlDSigGen;
object1: HCkXml;
Cert: HCkCert;
sbXml: HCkStringBuilder;
verifier: HCkXmlDSig;
numSigs: integer;
verifyIdx: integer;
verified: Boolean;
Http: HCkHttp;
json: HCkJsonObject;
url: PWideChar;
bGzip: Boolean;
resp: HCkHttpResponse;
status, ik1: integer;
nombre_archivo: string;
mid, mser, mnum, mim, mcrc: string;
RequestBody: TFileStream;
AResponse: IHTTPResponse;
sb1: HCkStringBuilder;
sb2: HCkStringBuilder;
Xml: HCkXml;
tspen: TStringlist;
mcon: integer;
Comprimido: TFileStream;
s: TStringlist;
m: tmemorystream;
begin
begin
Memo1.clear;
glob := CkGlobal_Create();
success := CkGlobal_UnlockBundle(glob, 'xxxxxxxxxxxxxxxxxx');
if (success <> True) then
begin
Memo1.Lines.Add(CkGlobal__lastErrorText(glob));
Exit;
end;
status := CkGlobal_getUnlockStatus(glob);
if (status = 2) then
begin
Memo1.Lines.Add('Unlocked using purchased unlock code.');
end
else
begin
Memo1.Lines.Add('Unlocked in trial mode.');
end;
Memo1.Lines.Add('');
success := True;
Xml := CkXml_Create();
if mmodelo = '140' then
begin
CkXml_putTag(Xml, 'lrpficfcsgap:LROEPF140IngresosConFacturaConSGAltaPeticion');
CkXml_AddAttribute(Xml, 'xmlns:lrpficfcsgap',
'https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PF_140_1_1_Ingresos_ConfacturaConSG_AltaPeticion_V1_0_2.xsd');
end
else
begin
CkXml_putTag(Xml, 'lrpficfcsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion');
CkXml_AddAttribute(Xml, 'xmlns:lrpficfcsgap',
'https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd');
end;
CkXml_UpdateChildContent(Xml, 'Cabecera|Modelo', pchar(mmodelo));
CkXml_UpdateChildContent(Xml, 'Cabecera|Capitulo', '1');
CkXml_UpdateChildContent(Xml, 'Cabecera|Subcapitulo', '1.1');
CkXml_UpdateChildContent(Xml, 'Cabecera|Operacion', 'A00');
CkXml_UpdateChildContent(Xml, 'Cabecera|Version', '1.0');
CkXml_UpdateChildContent(Xml, 'Cabecera|Ejercicio', pchar(mperi));
CkXml_UpdateChildContent(Xml, 'Cabecera|ObligadoTributario|NIF', pchar(TRIM(ts[1])));
CkXml_UpdateChildContent(Xml, 'Cabecera|ObligadoTributario|ApellidosNombreRazonSocial', pchar(TRIM(ts[2])));
if mmodelo = '140' then
begin
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso|TicketBai', CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso|Renta|DetalleRenta|Epigrafe', '197330');
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|TicketBai', CkStringBuilder__getEncoded(sb2, 'base64', 'utf-8'));
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|Epigrafe', '197330');
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|IngresoAComputarIRPFDiferenteBaseImpoIVA', 'S');
CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|ImporteIngresoIRPF', '400.00');
end
else
begin
sb1 := CkStringBuilder_Create();
tspen := TStringlist.Create;
tspen.loadfromfile(ExtractFilepath(paramstr(0)) + 'pendiente.TXT');
for mcon := 1 TO tspen.Count DO
BEGIN
success := CkStringBuilder_LoadFile(sb1, pchar(tspen[mcon - 1]), 'utf-8');
CkXml_UpdateChildContent(Xml, pchar('FacturasEmitidas|FacturaEmitida[' + IntToStr(mcon) + ']|TicketBai'),
CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
END;
end;
success := CkXml_SaveXml(Xml, pchar(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml'));
CkStringBuilder_Dispose(sb1);
CkStringBuilder_Dispose(sb2);
CkXml_Dispose(Xml);
Http := CkHttp_Create();
success := CkHttp_SetSslClientCertPfx(Http, pchar(ExtractFilepath(paramstr(0)) + tsconf[0]), pchar(tsconf[1]));
if (success = FALSE) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(Http));
Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
Exit;
end;
sbXml := CkStringBuilder_Create();
success := CkStringBuilder_LoadFile(sbXml, pchar(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml'), 'utf-8');
if (success = FALSE) then
begin
Memo1.Lines.Add('Failed to load XML that is to be the HTTP request body');
Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
Exit;
end;
json := CkJsonObject_Create();
CkJsonObject_UpdateString(json, 'con', 'LROE');
CkJsonObject_UpdateString(json, 'apa', '1.1');
CkJsonObject_UpdateString(json, 'inte.nif', pchar(TRIM(ts[1])));
CkJsonObject_UpdateString(json, 'inte.nrs', pchar(TRIM(ts[2])));
CkJsonObject_UpdateString(json, 'drs.mode', pchar(mmodelo));
CkJsonObject_UpdateString(json, 'drs.ejer', pchar(mperi));
CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-version', '1.0');
CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-content-type', 'application/xml');
CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-data', CkJsonObject__emit(json));
bGzip := True;
resp := CkHttp_PTextSb(Http, 'POST', pchar(mURLAlta), sbXml, 'utf-8', 'application/octet-stream', FALSE, bGzip);
if (CkHttp_getLastMethodSuccess(Http) = FALSE) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(Http));
Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
Exit;
end;
CkHttp_ClearHeaders(Http);
Memo1.Lines.Add('response status code: ' + IntToStr(CkHttpResponse_getStatusCode(resp)));
Memo1.Lines.Add('RESP.BODY:' + CHR(13) + CHR(10) + CkHttpResponse__bodyStr(resp));
Memo1.Lines.Add('RESP.HEADER:' + CHR(13) + CHR(10) + CkHttpResponse__header(resp));
Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
CkHttpResponse_Dispose(resp);
CkHttp_Dispose(Http);
CkStringBuilder_Dispose(sbXml);
CkJsonObject_Dispose(json);
end;