Saludos a todos.
Como otros, he tenido el problema del fallo de falta de certificado cuando se envía más de 12 facturas... he releído varias veces este hilo (uffff) y la verdad es que está empezando a ser poco aclaratorio remitirse aquí para encontrar soluciones... Pero he encontrado algo que os puede ser de ayuda. El método que se posteó al principio, y del cual casi todos hemos empezado a tirar, proponía:
Código Delphi
[-]
procedure TFrmMain.HTTPRIO_EMIHTTPWebNode1BeforePost(
const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : PCCERT_CONTEXT;
V : OleVariant;
Certificado : String;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
begin
V := BUSCAR_CERTIFICADO(cbCertificados.text); Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
Certs := Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, V, False ); if Certs.Count > 0 then begin
Cert := IInterface(Certs.Item[1]) as ICertificate2;
CertContext := Cert as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False then
begin
ShowMessage( 'Certificado SSL. Algo ha fallado.' );
end;
end;
end;
la función BUSCA_CERTIFICADO pasando como parámetro el nombre del certificado te devolvía el GetCertSerialNumber de dicho certificado, el cual hay que usar en otro sitio, pero no aquí, ya que hay que hacer el Store.Certificates.Find pasando el "nombre del certificado" no su SerialNumber, por lo cual debería ser
Código Delphi
[-]
V := cbCertificados.Text;
Así se traga todas las facturas que le eches. Esto lo he sacado también de algún ejemplo que han posteado en este hilo, por lo cual quien haya tirado de ese ejemplo estaría trabajando sin problemas, y los estamos tirando desde el inicio, y no habíamos vuelto a repasar esa parte, a la de 13 facturas.... Curiosamente, si enviabas las facturas en bloques de 10, o una a una, todo funcionaba sin problemas, a pesar de que realmente, no estábamos cargando en la Api el certificado. ¿?¿?¿?
No sé si cuando dejemos de estar en pruebas cascará el programa si no cargamos el certificado correctamente.