Ver Mensaje Individual
  #2644  
Antiguo 24-01-2022
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 114
Reputación: 20
elguille Va por buen camino
El interesado no está identificado

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
    // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida|TicketBai', CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
    // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida|Renta|DetalleRenta|Epigrafe', '197330');
    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'));
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|Epigrafe', '197330');
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|IngresoAComputarIRPFDiferenteBaseImpoIVA', 'S');
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|ImporteIngresoIRPF', '400.00');
    END;
  end;

  // Memo1.Lines.Add(CkXml__getXml(xml));

  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();

  // Add required headers...
  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));
  // url := 'https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena';
  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)));

  // Examine the response (it is already decompressed)
  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');
//lo siguente funciona pero obtenemos el mismo error
{  comprimir(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml', 'archivo.gz');
  // RequestBody := TFileStream.Create('archivo.gz', fmOpenRead);
  NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
  NetHTTPClient1.CustomHeaders['Accept-Encoding'] := 'gzip';
  NetHTTPClient1.CustomHeaders['Content-Encoding'] := 'gzip';
  NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/octet-stream';
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-version'] := '1.0';
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-content-type'] := 'application/xml';
  s := TStringlist.Create;
  m := tmemorystream.Create;
  // Formamos los parametros json de entrada
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-data'] := CkJsonObject__emit(json);
  // AResponse := NetHTTPClient1.post( mURLAlta, RequestBody);
  AResponse := NetHTTPClient1.post(mURLAlta, 'archivo.gz', m);
  m.Position := 0;
  s.LoadFromStream(m);
  Memo1.Lines.AddStrings(s);
  Comprimido := TFileStream.Create('respuesta.gz', fmCreate);
  Comprimido.CopyFrom(AResponse.ContentStream, AResponse.ContentStream.Size);
  Comprimido.Destroy;
  descomprimir('respuesta.gz', 'respuesta2.gz');
  descomprimir('respuesta2.gz', 'respuesta.xml');}
  CkHttpResponse_Dispose(resp);
  CkHttp_Dispose(Http);
  CkStringBuilder_Dispose(sbXml);
  CkJsonObject_Dispose(json);

end;
Responder Con Cita