Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Web Service con error al conectarme (https://www.clubdelphi.com/foros/showthread.php?t=73078)

raulb 30-03-2011 17:01:01

Web Service con error al conectarme
 
Estoy desarrollando un sistema para facturas electrónicas en argentina. Bajo de la página del afip los WSDL y desde el webservices importer de delphi XE, genero la unidad pascal wssa.pas, luego la comienzo a utilizar.

El proceso de autenticación es generar un ticket XML, firmarlo y enviar el XML firmado, para ello que hago.

owssa -> Objeto HTTPRIO
trans -> Variable THTTPReqResp
kin -> Variable widestring
kout -> Variable widestring
Código Delphi [-]
  trans := THTTPReqResp.create(Nil);
  owsaa.HTTPWebNode := trans;
  owsaa.URL := 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms';
  owsaa.WSDLLocation := 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL';
  owsaa.Service := 'LoginCMSService';
  owsaa.Port := 'LoginCMS';
La única función del wssa es ->
Código Delphi [-]
kout := (OWSAA as TLoginCMS).loginCms(kin);
Donde kin esta cargada con el contenido del XML firmado.

Cuando lo ejecuto me da el siguiente error ->
unable to retrieve the url endpoint for service/port 'LoginCMSService'/'LoginCMS' from WSDL 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL'

He verificado la extructura del XML para confirmar que este correcta (la original) porque a la firmada le agrega en la cabecera y al pie todo lo que tiene que ver con los certificados, entre medio queda el XML original sin cambios.

La parte que me queda y saber si hay alguna propiedad del objeto HTTPRIO que se deba setear además de las que te mencione anterioremente. En el objeto.

cybsistemas 03-04-2011 20:59:29

entiedo que si ponés wsdllocation no tenés que poner url y viceversa.
A propósito como hacés para firmar el xml

raulb 05-04-2011 16:34:34

Carlos, disculpas por la demora, pero recien entro al foro, si, logre hacerlo andar, el error era que estaba mal firmado el cms (mensaje). Para firmarlo utilizo el openssl-win32, como detalle para poder visualizar los errores te recomiendo bajar el soupui, luego de instalarlo y probarlo pude ver los errores en el cms.

Para firmar el ticket
openssl-win32 smime -sign -in ticket_sinfirmar.xml -out ticket_firmado.xml -inkey clave_privada -signer certificado_tramitado_en_afip -outform PEM -nodetach

la solución que encontre fue que el proceso arme un batch con esta linea de comando y luego la ejecuto.
Saludos.

cybsistemas 06-04-2011 16:34:00

Gracias, lo hice igual.
Yo tengo un problema ahora al solicitar CAE
Declaro una variable FECAERequest
Código Delphi [-]
Var
  Kin : FECAERequest;
La creo
Código Delphi [-]
 
Kin := FECAERequest.Create;
Y cuando le quiero asignar un valor
Código Delphi [-]
  
kin.FeCabReq.CantReg := 1;
me sale un error de Violación de acceso como si no la hubiera creado.

cybsistemas 07-04-2011 15:41:52

Ya lo arreglé

raulb 07-04-2011 23:52:07

Re-pregunto
 
Carlos, si ya superaste el paso de inicializar
Código Delphi [-]
 
var
      kcfac     : Ferequest;
 
      kcfac  := Ferequest.Create;
      kcfac.fecr := FecabeceraRequest.create;
Asignas el contenido de fecr, pero cuando inicializas fedr, se me queman los papeles.
Código Delphi [-]
      kcfac.fedr[0]  := FedetalleRequest.create;    // (Aca da error la ejecucion)
si le antepongo Setlength(kcfac.fedr,1) dimensionando el array que voy a crear, me da error el compilador diciendo que el objeto no puede utilizarce.

Como lo resolviste?

raulb 08-04-2011 00:50:47

Otra pregunta
 
Carlos :
Me doy cuenta que estas usando otra wsfe.wdsl porque los procedimientos tienen otro nombre, me imagino que debe ser la version que entra en vigencia el 01/07/2011, de donde bajaste el wdsl (me podes pasar el link) porque evidentemente estoy probando con la versión vieja.
Gracias

cybsistemas 10-04-2011 14:32:24

En afip.gob.ar/fe/ click en herramientas de asistencia
RG 2485 Diseño de registro XML V 1.1
RG 2485 Manual V1.1
Te bajás esos 2 arhivos.
Te mando el procedure completo. Fijate que Kin tenés que crearla pero Kout se crea sola. A los array de entrada tenés que asignarle espacio a los de salida se asigna solo
Código Delphi [-]
 Function TFormFac.SolicitarCAE : Boolean;
 Var
 I : Integer;
 Kin : FECAERequest;
 CAECabReq : FECAECabRequest;
 ACAEDetReq : ArrayOfFECAEDetRequest;
 CAEDetReq : FECAEDetRequest;
 ADetIva : ArrayOfAlicIva;
 DetIva : AlicIva;
 KOut : FECAEResponse;
 CAECabResp : FECAECabResponse;
 ACAEDetResp : ArrayOfFECAEDetResponse;
 CAEDetResp : FECAEDetResponse;
 AObserv : ArrayOfObs;
 AError : ArrayOfErr;
      Begin
      {
      1: Factura A
      2: Nota de Débito A
      3: Nota de Crédito A
      6: Factura B
      7: Nota de Débito B
      8: Nota de Crédito B
      }
      SetLength(ACAEDetReq,1);
      SetLength(ADetIva,1);
      Kin := FECAERequest.Create;
      CAECabReq := FECAECabRequest.Create;
      CAEDetReq := FECAEDetRequest.Create;
      DetIva := AlicIva.Create;
      CAECabReq.CantReg := 1;
      CAECabReq.CbteTipo := TipDoc;
      CAECabReq.PtoVta := PuntodeVenta;
      CAEDetReq.Concepto := 1;
      CAEDetReq.DocTipo  := 80;
      CAEDetReq.DocNro := DmMain.CliCuit.AsLargeInt;
      CAEDetReq.CbteDesde := numfac;
      CAEDetReq.CbteHasta := numfac;
      CAEDetReq.CbteFch := FormatDateTime('YYYYMMDD',EdFecha.Date);
      CAEDetReq.ImpTotConc := 0;
      CAEDetReq.ImpOpEx := 0;
      CAEDetReq.ImpTrib := 0;
      If LookMoneda.KeyValue = 1 then
           Begin
           CAEDetReq.ImpTotal := StrToFloat(Format('%12.2f',[TotalFinal]));
           CAEDetReq.ImpNeto := StrToFloat(Format('%12.2f',[TotalNeto]));
           CAEDetReq.ImpIVA := StrToFloat(Format('%12.2f',[IvaTotal]));
           End
 
      Else
           Begin
           CAEDetReq.ImpTotal := StrToFloat(Format('%12.2f',[TotalFinal * ValDolar]));
           CAEDetReq.ImpNeto := StrToFloat(Format('%12.2f',[TotalNeto * ValDolar]));
           CAEDetReq.ImpIVA := StrToFloat(Format('%12.2f',[IvaTotal * ValDolar]));
           End;
 
      CAEDetReq.MonId := 'PES';
      CAEDetReq.MonCotiz := 1;
      DetIva.Id := 5;
      DetIva.BaseImp := CAEDetReq.ImpNeto;
      DetIva.Importe := CAEDetReq.ImpIVA;
      ADetIva[0] := DetIva;
      CAEDetReq.Iva := ADetIva;
      DmMain.TWsaa.Close;
      ACAEDetReq[0] := CAEDetReq;
      Kin.FeCabReq := CAECabReq;
      Kin.FeDetReq := ACAEDetReq;
      //
      Kout := (HWSFE as ServiceSoap).FECAESolicitar(KinType,Kin);
      CAECabResp := KOut.FeCabResp;
      ACAEDetResp := KOut.FeDetResp;
      CAEDetResp := ACAEDetResp[0];
      AError := KOut.Errors;
      For i := 0 to Length(AError) - 1 do
         ShowMessage ('Error' + IntToStr(AError[i].Code) +') ' + AError[i].Msg);
 
      AObserv := CAEDetResp.Observaciones;
      For i := 0 to Length(AObserv) - 1 do
         Alert ('Obs: ' + AObserv[i].Msg);
 
      If CAECabResp.Resultado = 'R' then  //A=APROBADO, R=RECHAZADO, P=PARCIAL
         Result := False
      Else
           Begin
           LCAE := CAEDetResp.CAE;
           LvtoCae := VtoCaeToDate(CAEDetResp.CAEFchVto);
           Result := True;
           End;
 
      Kin.Free;
      KOut.Free;
      End;

cybsistemas 10-04-2011 14:39:00

Código Delphi [-]
KinType : FEAuthRequest;
Está declarado en todo el Form por eso no aparece ahí
Código Delphi [-]
      DmMain.TWsaa.Open;
      KinType.token := DmMain.TWsaaToken.Value;
      KinType.sign := DmMain.TWsaaSign.Value;
      KinType.Cuit := DmMain.TWsaaCuit.Value;
      DmMain.TWsaa.Close;
Ojo que la versión que vos usas deja de funcionar en junio y la 1.1 ya está funcionando, así que usá esa.

cybsistemas 10-04-2011 14:45:09

Otra cuestión
 
Ahora estoy viendo si puedo prescindir de openssl.
Para cifrar en base 64 está el componente TIdEncoderMIME, ahora faltaria firmar el XML para convertirlo en CMS. Tenés alguna idea de como hacerlo sin usar openssl.

fcios 16-01-2013 15:35:26

Hola simple pregunta, estás seguro que estos objetos se liberan correctamente con Kin.Free;
KOut.Free; ?

al cerrar la aplicación el eureka me dice que no están liberados

Gracias de antemano
Fabián

Ramirogd 12-06-2015 20:06:26

Login en webservices de afip
 
Hola Raul,
Vi tu post sobre los webservices de afip y tengo el mismo problema.
Me cuesta conectarme al webservice de afip con el loginCMS.
Me dice que el CMS no es válido una y otra vez.
Podrias decirme los pasos que haces para poder conectarte? nisiquiera puedo conectarme a los webservices de homologacion.
Si me explicas un poco como es el proceso te lo agradecería mucho!

saludos y gracias de antemano,
Ramiro

Ramirogd 12-06-2015 20:24:01

Hola podrias postear el tema del login?
me esta resultando dificil poder generar el token
Muchas Gracias!

ecfisa 12-06-2015 21:13:11

Hola Ramirogd.

Lamentablemente veo que el usuario raulb no frecuenta estos foros desde el 03/11/2011, infiero que difícilmente obtengas respuestas de él...

Encontré estos dos temas relacionados en nuestros foros:Y fijate si alguno de estos enlaces externos te resulta útil:Saludos :)


La franja horaria es GMT +2. Ahora son las 08:05:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi