Skip to content

métodos de fearProxy

Desbloquear

(fearRespuesta) Desbloquear(archivoLIC)

parametro tipo descripción
archivoLIC string Archivo de licencia a utilizar (opcional). Si no se indica se utilizara el valor de la propiedad archivoLIC

Permite desbloquear la librería con la licencia y passkey proporcionados. Este método debe invocarse antes de utilizar los demas métodos de la librería.

Ejemplos:

1
2
3
4
5
6
7
8
9
LOCAL oResp
FEAr.passKey = "su-passkey"
oResp = FEAr.Desblquear("su-licencia.lic")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Licencia #:", oResp.data.numero
?"Cliente   :", oResp.data.Cliente
?"Tipo      :", oResp.data.tipo
1
2
3
4
5
6
7
8
9
FEAr.passKey = "su-passkey";
fearRespuesta resp = FEAr.Desblquear("su-licencia.lic");
if (!resp.result) {
  throw new Exception(resp.errorMsg);
}
fearLicencia data = (fearLicencia)resp.data;
Console.WriteLine("Licencia #: " + data.numero);
Console.WriteLine("Cliente   : " + data.cliente);
Console.WriteLine("Tipo      : " + data.tipo);

Una vez desbloqueada la libreria, se puede invocar a este metodo de nuevo cada vez que se quiera obtener la informacion de la licencia.

Inicializar

(fearRespuesta) Inicializar(archivoCRT, archivoKEY, CUIT)

parametro tipo descripción
archivoCRT string Archivo de certificado a utilizar (opcional)
archivoKEY string Archivo de clave del certificado (opcional)
CUIT string CUIT asociado al certificado (opcional)

Permite inicializar la librería con un archivo de certificado y su clave. Sí no se indican los parámetros archivoCRT y archivoKEY, el método intentará utilizar el primer archivo .crt y .key qué encuentre en la ruta actual. Sí no se indican los parámetros y no se logra encontrar un archivo .crt / .key, se generará un error en la respuesta.

Ejemplos:

1
2
3
4
5
LOCAL oResp
oResp = FEAr.Inicializar("certificado.crt", "clave.key")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
1
2
3
4
fearRespuesta resp = FEAr.Inicializar("certificado.crt", "clave.key");
if (!resp.result) {
  throw new Exception(resp.errorMsg);
}

Al inicializar la clase con un certificado se define tanto el ambiente de operación cómo el CUIT del emisor.

NOTA IMPORTANTE

Sí se indica el tercer parámetro opcional CUIT, el método verificará qué el CUIT asociado al certificado indicado coincida con el CUIT indicado en el parámetro. Sí no coinciden, se generará un error. Esto permite validar qué el certificado indicado pertenece al CUIT esperado.

Vea también

Autenticar

(fearRespuesta) Autenticar(servicio)

parametro tipo descripción
servicio string ID del webservice qué se desea acceder (opcional). Sí no se indica, se asume wsfe.

Permite obtener un token de acceso a un webservice de ARCA particular. El parámetro opcional servicio permite indicar el webservice para el cual se desea obtener acceso:

  • wsfe: webservice de autorización de comprobantes
  • ws_sr_constancia_inscripcion: webservice para consulta de padrón A5

El método devuelve el token y el sign en forma de un string usando el carácter | (pipe) cómo separador.

Ejemplos:

1
2
3
4
5
6
7
LOCAL oResp
oResp = FEAr.Autenticar("wsfe")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"TOKEN:", oResp.data.Token
?"SIGN:", oResp.data.Sign
1
2
3
4
5
fearRespuesta resp = FEAr.Autenticar("wsfe");
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaAutenticar data = (fearRespuestaAutenticar)resp.data;
Console.WriteLine("TOKEN: " + data.Token);
Console.WriteLine("SIGN: " + data.Sign);

NOTA IMPORTANTE #1

Una vez qué se obtiene el token de acceso para un webservice, los datos del mismo son almacenados automáticamente en un archivo dentro de la ruta indicada en la propiedad rutaTokens, con el nombre fear_<cuit>_<servicio>.dat. Estos archivos NO DEBEN BORRARSE bajo ninguna circunstancia por qué el webservice de autenticación no permitirá obtener un nuevo token de acceso mientras el anterior aún siga vigente y tampoco existe forma actualmente de obtener el token activo para un CUIT dado. Sí se borra el archivo .dat por accidente, se perdería el acceso a ese webservice para ese CUIT hasta tanto el token de acceso asignado no expire, después de lo cual se puede solicitar un nuevo token de acceso.

NOTA IMPORTANTE #2

Todos los demás métodos de la clase invocan a Autenticar automáticamente, por lo qué no es necesario hacerlo manualmente.

Vea también

Autorizar

(fearFECAEDetRequest) Autorizar()
(fearRespuesta) Autorizar(solicitud)

nombre tipo descripción
solicitud fearFECAEDetRequest Datos de la solicitud de autorización a enviar.

Permite generar una solicitud de autorización y enviarla a ARCA para su procesamiento. El proceso implica invocar el método Autorizar una vez sin parámetros para crear una instancia de clase fearFECAEDetRequest qué se usará para preparar los datos del comprobante a autorizar, y luego invocar una segunda vez al método para enviar la solicitud de autorización y esperar la respuesta.

Ejemplos:

* CREAMOS UNA NUEVA SOLICITUD DE AUTORIZACION
LOCAL oSolicitud
oSolicitud = FEAr.Autorizar()

* LLENAMOS LOS DATOS DE LA SOLICITUD
WITH oSolicitud
  .cantReg = 1
  .PtoVta = 1
  .CbteTipo = 6
  .Concepto = 1
  .DocTipo = 99
  .DocNro = 0
  .CbteDesde = 255
  .CbteHasta = 255
  .CbteFch = DATE()
  .ImpTotal = 121.00
  .ImpNeto = 100
  .ImpIVA = 21
  .MonId = "PES"
  .MonCotiz = 1.000
  .CondicionIVAReceptorID = 5
  .addIva(5, 100, 21)
ENDWITH

* ENVIAMOS LA SOLICITUD A ARCA
LOCAL oResp
oResp = FEAr.Autorizar(oSolicitud)
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
fearFeCAEReq solicitud = FEAr.Autorizar();
solicitud.cantReg = 1;
solicitud.PtoVta = 1;
solicitud.CbteTipo = 6;
solicitud.Concepto = 1;
solicitud.DocTipo = 99;
solicitud.DocNro = 0;
solicitud.CbteDesde = 255;
solicitud.CbteHasta = 255;
solicitud.CbteFch = DATE();
solicitud.ImpTotal = 121.00m;
solicitud.ImpNeto = 100m;
solicitud.ImpIVA = 21;
solicitud.MonId = "PES";
solicitud.MonCotiz = 1.000m;
solicitud.CondicionIVAReceptorID = 5;
solicitud.addIva(5, 100m, 21m);

fearRespuesta resp = FEAr.Autorizar(solicitud);
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaAutorizar data = (fearRespuestaAutorizar)resp.data;
Console.WriteLine("CAE: " + data.CAE);
Vea también

consultarCAE

(fearRespuesta) consultarCAE(ptoVta, cbteTipo, cbteNro)

parametro tipo descripción
ptoVta int ID del punto de venta
cbteTipo int Tipo de comprobante
cbteNro int Número del comprobante a consultar

Permite obtener el CAE emitido para un comprobante dado.

Ejemplos:

1
2
3
4
5
6
LOCAL oResp
oResp = FEAr.consultarCAE(1, 80, 23323)
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"CAE:", oResp.data.CAE
1
2
3
4
fearRespuesta resp = FEAr.consultarCAE(1, 80, 23323);
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaConsultarCAE data = (fearRespuestaConsultarCAE)resp.data;
Console.WriteLine("CAE: " + oResp.data.CAE)
Vea también

consultarCUIT

(fearRespuesta) consultarCUIT(cuit)

parametro tipo descripción
cuit string CUIT qué se desea consultar.

Permite consultar el padrón A5 para obtener información del CUIT indicado.

Ejemplos:

1
2
3
4
5
6
7
8
LOCAL oResp
oResp = FEAr.consultarCUIT("1234567890")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"¿Encontrado?:", oResp.data.encontrado
?"Tipo de persona:", oResp.data.tipoPersona
?"Descripción    :", oResp.data.descripcionPersona
1
2
3
4
5
6
fearRespuesta resp = FEAr.consultarCUIT("1234567890");
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaConsultarCUIT data = (fearRespuestaConsultarCUIT)resp.data;
Console.WriteLine("Encontrado?: " + data.Encontrado.toString());
Console.WriteLine("Tipo de persona: " + data.tipoPersona);
Console.WriteLine("Descripcion: " + data.descripcionPersona);
Vea también

consultarUltimoCbteAutorizado

(fearRespuesta) consultarUltimoCbteAutorizado(ptoVta, cbteTipo)

parametro tipo descripción
ptoVta int ID del punto de venta
cbteTipo int [Tipos de comprobante[(anexos.md#tipos_de_comprobante)

Permite obtener el número del último comprobante autorizado para el punto de venta y tipo de documento indicados.

Ejemplos:

1
2
3
4
5
6
LOCAL oResp
oResp = FEAr.consultarUltimoCbteAutorizado(1, 80)
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Comprobante #:", oResp.data.cbteNro
1
2
3
4
fearRespuesta resp = FEAr.consultarUltimoCbteAutorizado(1, 80);
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaConsultarUltimoCbteAutorizado data = (fearRespuestaConsultarUltimoCbteAutorizado)data;
Console.WriteLine("Comprobante #:  " + data.cbteNro.toString());
Vea también

validarCUIT

(fearRespuesta) validarCUIT(cuit)

parametro tipo descripción
cuit string CUIT a validar

Permite validar el CUIT indicado para determinar sí es correcto según su estructura y dígito verificador.

Ejemplos:

1
2
3
4
5
6
LOCAL oResp
oResp = FEAr.validarCUIT("12345678901")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"El CUIT indicado es válido"
1
2
3
fearRespuesta resp = FEAr.validarCUIT("12345678901")
if (!resp.result) throw new Exception(resp.errorMsg);
Console.WriteLine("El CUIT indicado es válido");

A tener en cuenta

El método consultarCUIT utiliza internamente este método para validar el CUIT a consultar ANTES de enviar la consulta al padrón.

Vea también

obtenerFechaExpiracionCertificado

(fearRespuesta) obtenerFechaExpiracionCertificado([archivoCRT])

parametro tipo descripción
archivoCRT string Archivo de cerfificado a leer. Sí no se indica se asume el valor de la propiedad archivoCRT

Permite obtener la fecha de expiracion de un certificado.

Ejemplos:

1
2
3
4
5
6
LOCAL oResp
oResp = FEAr.obtenerFechaExpiracionCertificado("certificado.crt")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Expira:", oResp.data.expira --> {31-12-2025}
1
2
3
4
5
fearRespuesta resp =  FEAr.obtenerFechaExpiracionCertificado("certificado.crt");
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaObtenerFechaExpiracionCertificado data = (fearRespuestaObtenerFechaExpiracionCertificado)resp.data;
Console.WriteLine("Ambiente: " + data.ambiente);
Console.WriteLine("Expira  : " + data.expira.toString());
Vea también

leerInfoCertificado

(fearRespuesta) leerInfoCertificado([archivoCRT])

parametro tipo descripción
archivoCRT string Archivo de cerfificado a leer. Sí no se indica se asume el valor de la propiedad archivoCRT

Permite obtener informacion sobre un certificado. La propiedad data de la respuesta contendra una instancia de fearRespuestaLeerInfoCertificado.

Ejemplos:

1
2
3
4
5
6
7
LOCAL oResp
oResp = FEAr.leerInfoCertificado("certificado.crt")
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Ambiente:", oResp.data.ambiente  --> "H"
?"Expira:", oResp.data.expira --> {31-12-2025}
1
2
3
4
5
fearRespuesta resp =  FEAr.leerInfoCertificado("certificado.crt");
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaLeerInfoCertificado data = (fearRespuestaLeerInfoCertificado)resp.data;
Console.WriteLine("Ambiente: " + data.ambiente);
Console.WriteLine("Expira  : " + data.expira.toString());
Vea también

leerConfiguracion

(fearRespuesta) leerConfiguracion()

Devuelve el contenido del archivo FEAR.JSON. La propiedad Data contendra una instancia de fearConfiguracion.

Ejemplos:

1
2
3
4
5
6
LOCAL oResp
oResp = FEAr.leerConfiguracion()
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Ruta de temporales:", oResp.data.rutaTemporales
1
2
3
4
fearRespuesta resp = FEAr.leerConfiguracion()
if (!resp.result) throw new Exception(resp.errorMsg);
fearConfiguracion data = (fearConfiguracion)data;
Console.WriteLine("Ruta de temporales: " + data.rutaTemporales);
Vea también

guardarConfiguracion

(fearRespuesta) guardarConfiguracion()

Guarda la configuracion actual en el archivo FEAR.JSON.

Ejemplos:

LOCAL oResp
WITH FEAr
  .rutaTokens = ".\tokens"
  .rutaTemporales = ".\temp"
  .minutosValidezToken = 120
ENDWITH
oResp = FEAr.guardarConfiguracion()
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Se ha creado el archivo FEAR.JSON"
1
2
3
4
5
6
FEAr.rutaTokens = ".\tokens";
FEAr.rutaTemporales = ".\temp";
FEAr.minutosValidezToken = 120;
fearRespuesta resp = FEAr.guardarConfiguracion();
if (!resp.result) throw new Exception(resp.errorMsg);
Console.WriteLine("Se ha creado el archivo FEAR.JSON");
Vea también

autoConfigurar

(fearRespuesta) autoConfigurar()

Configura la libreria a partir del archivo FEAR.JSON.

Ejemplos:

LOCAL oResp
FEAr.openSSL = "ruta1\openssl.exe"
oResp = FEAr.guardarConfiguracion()
IF oResp.result
   FEAr.openSSL = "ruta2\openssl.exe"
   oResp = FEAr.autoConfigurar()
ENDIF
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"OpenSSL:", FEAr.openSSL   && ruta1\openssl.exe
1
2
3
4
5
6
7
8
FEAr.openSSL = "ruta1\openssl.exe";
fearRespuesta resp = FEAr.guardarConfiguracion();
if (reesp.result) {
   FEAr.openSSL = "ruta2\openssl.exe";
   resp = FEAr.autoConfigurar();
}
if (!resp.result) throw new Exception(resp.errorMsg);
Console.WriteLine("OpenSSL: " + FEAr.openSSL);  // ruta1/openssl.exe
Vea también

limpiarTemporales

(fearRespuesta) limpiarTemporales()

Permite eliminar los archivos creados en la carpeta de temporales, especialmente cuándo la propiedad *trace estuvo activa. El método devuele un objeto en la propiedad data con las siguientes propiedades:

nombre tipo descripción
encontrados number Cantidad total de archivos encontrados en la carpeta de temporales
eliminados number Cantidad total de archivos eliminados

Ejemplos:

1
2
3
4
5
6
7
LOCAL oResp
oResp = FEAr.limpiarTemporales()
IF NOT oResp.result
  THROW oResp.errorMsg
ENDIF
?"Encontrados:",oResp.data.Encontrados
?"Eliminados:",oRest.data.Eliminados
1
2
3
4
5
fearRespuesta resp = FEAr.limpiarTemporales();
if (!resp.result) throw new Exception(resp.errorMsg);
fearRespuestaLimpiarTemporales data = (fearRespuestaLimpiarTemporales)resp.data;
Console.WriteLine("Encontrados: " + data.Encontrados.toString());
Console.WriteLine("Eliminados: " + data.Eliminados.toString());
Vea también

generarReporteError

(fearRespuesta) generarReporteError([destino])

parametro tipo descripción
destino variant Indica cual sera el destino del reporte de error (string, archivo)

Permite generar un reporte del ultimo error ocurrido en la libreria. El parametro opcional destino determina el resultado devuelto por el método en la propiedad data:

Valor de destino Contenido de data
(no indicado) String con el texto del reporte de error
true (boolean) Genera un archivo en la ruta de temporales con el reporte
"archivo.ext" (string) Genera un archivo con el nombre indicado en la ruta de temporaes y almacena ahi el reporte de error
"ruta\archivo.ext" (string) Genera un archivo con el nombre y ruta indicados y almacena ahi el reporte de error

Ejemplos:

LOCAL oResp
oResp = FEAr.limpiarTemporales()
IF NOT oResp.result
   LOCAL cErrorMsg
   cErrorMsg = oResp.errorMsg
   oResp = FEAR.generarReporteError(.T.)
   IF NOT oResp.result
      THROW oResp.errorMsg
   ENDIF
   THROW "Ha ocurrido el siguiente error: " + cErrorMsg + ;
         REPL(CHR(13)+CHR(10),3) + ;
         "Se ha grabado un reporte detallado del mismo en la ruta " + oResp.data
ENDIF
?"Encontrados:",oResp.data.Encontrados
?"Eliminados:",oRest.data.Eliminados
fearRespuesta resp = FEAr.limpiarTemporales();
if (!resp.result) {
  string errorMsg = resp.errorMsg;
  resp = FEAr.generarReporteError(true);
  if (!resp.result) throw new Exception(resp.errorMsg);
  throw new Exception("Ha ocurrido el siguiente error: " + errorMsg + "\n\n" + "Se ha grabado un reporte detallado del mismo en la ruta " + (string)resp.data));
}
fearRespuestaLimpiarTemporales data = (fearRespuestaLimpiarTemporales)resp.data;
Console.WriteLine("Encontrados: " + data.Encontrados.toString());
Console.WriteLine("Eliminados: " + data.Eliminados.toString());
Vea también