Ver Mensaje Individual
  #1266  
Antiguo 18-08-2021
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Reputación: 14
iMia Va por buen camino
Red face Gracias

Hola a tod@s...
Primero daros las gracias por compartir todos los conocimientos y dudas que os habéis ido encontrando con el TBAI (ese gran desconocido con el que acabas soñando...)
He conseguido, gracias a vosotros generar el xml, firmarlo (con el AutoFirmaCommandLine), generar el QR, enviarlo y casi lo más difícil, que lo acepten en Guipuzcoa...
Lo he hecho todo con Tokyo (10.2.3), si alguien tiene alguna duda... aquí estoy a vuestra disposición...

Sólo tengo un problemilla con la respuesta, por ahora leo la respuesta directamente a pelo en puro xml. (FindNode('Salida'), etc...) y funciona, pero no la puedo parsear al tipo IXMLTicketBaiResponse (generado automáticamente a partir del xsd)... que sería más elegante, legible y correcto.

intento esto:

Código Delphi [-]
          
var
  idHttp: TIdHttp;
  xmlResp: IXMLDocument;
  xmlTBResp: IXMLTicketBaiResponse;
begin
          ...
          idhttp.Request.ContentType := 'application/xml; charset=utf-8'; // Para evitar el 'ón' de la firma.
          strResponse := idHttp.Post(tblTBAI_Admin.FieldByName('URL_Envia').AsString.Trim + '\alta', RequestBody);
          if not strResponse.isEmpty then
          begin
            xmlResp := TXMLDocument.create(nil);
            strResponse := strResponse.Replace('ns2:TicketBaiResponse','TicketBaiResponse',[rfReplaceAll]); // probado de quitar y nada...
            CoInitialize(nil);
            xmlResp.LoadFromXML(strResponse);
            xmlResp.Active := true;
            responseFileName := strFileName + '_Respuesta_' + formatDateTime(TBAI_DATE_FORMAT_FILE, now()) + FILE_EXT_XML;
            xmlResp.SaveToFile(responseFileName);
            // Aquí podría recorrer xmlResp sin problema...
            if fileExists(responseFileName) then
            begin
              xmlTBResp := NewTicketBaiResponse();
              CoInitialize(nil);
              // Aquí falla con el EIntfCastError 'interface not supported' al intentar meterlo en el tipo TBAIResponse con el LoadTicketBaiResponse
              xmlTBResp := LoadTicketBaiResponse(responseFileName);
              xmlTBResp.Active := true;
              if (xmlTBResp <> nil) and (xmlTBResp.Salida <> nil) then
              ....

Tambien he probado con
Código Delphi [-]
              ...
              xmlTBResp := NewTicketBaiResponse();
              CoInitialize(nil);
              // Aquí falla con el EIntfCastError 'interface not supported' al intentar meterlo en el tipo TBAIResponse con el LoadTicketBaiResponse
              xmlTBResp := GetTicketBaiResponse(xmlResp);  /// Get del xml en vez de load, que es más directo y no hay que guardar a disco
              xmlTBResp.Active := true;
              if (xmlTBResp <> nil) and (xmlTBResp.Salida <> nil) then
              ...
y tampoco...

Si a alguien se le ocurre algo... si no lo dejaré moviéndome por los nodos a pelo...

Muchas gracias de nuevo...

Última edición por iMia fecha: 18-08-2021 a las 08:51:33.
Responder Con Cita