WSFEv1 en Produccion

1,997 views
Skip to first unread message

martin...@gmail.com

unread,
May 27, 2014, 11:03:09 AM5/27/14
to pyaf...@googlegroups.com
Hola!
La consulta puntual es la siguiente:
Trabajo en un entorno en Wxp con Delphi 7.
Descargue el aplicativo instalador-PyAfipWs-1.25c-homo.exe
Y probé el ej_delphi.zip utilizando mi CUIT, mi clave privada y mi certificado digital para testeo sin problemas.

La duda puntual es si para poder pasar a producción en el cliente alcanzaría con instalar en cada PC que facture el instalador-PyAfipWs-1.25c-homo.exe, y cambiar las líneas de código que hacen referencia al webservice de producción dentro del ejemplo en Delphi.

Mariano Reingart

unread,
May 27, 2014, 11:32:29 AM5/27/14
to pyaf...@googlegroups.com
Martín:

El instalador publicado (instalador-PyAfipWs-1.25c-homo.exe) es solo para evaluación (por lo que solo funciona en homologación):


De hecho no tiene muchas de las últimas características y mejoras que vamos agregando al paquete (proximamente voy a hacer una nueva publicación con las actualizaciones acumuladas).

Para producción, podes usar directamente el código fuente e incluso podes generarte el instalador completo siguiendo las instrucciones publicadas:


El instructivo está actualizado e incluso enlace las versiones archivadas que tengo de algunos paquetes.

No deberías tener inconvenientes para instalarlo, y también ofrecemos soporte comercial pago por si lo necesitan.

Cualquier duda quedamos en contacto, nuestros teléfonos son (011) 15-3048-9211 y (011) 4450-0716

Sds

--
Has recibido este mensaje porque estás suscrito al grupo "PyAfipWs - Factura Electrónica Libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a pyaf...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/pyafipws.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

martin...@gmail.com

unread,
May 30, 2014, 10:35:22 PM5/30/14
to pyaf...@googlegroups.com
Hola Mariano! Gracias por los datos.

Descargue e instalé todo siguiendo los pasos para compilar un instalador.
Edito el archivo de setup de esta forma:
import pyafipws
#import pyrece
import wsaa
import wsfev1, rece1
#import wsfexv1, recex1
#import wsbfev1, receb1
#import wsmtx, recem
#import pyfepdf
#import pyemail
#import pyi25
#import wsctgv2
#import wslpg
#import wscoc
#import wscdc
#import cot
#import trazamed
#import trazarenpre
#import trazafito
#import padron

corrijo los archivo py
pyafipws
wsaa
wsfev1
poniendo Homo = False

y ejecuto el creador de instalación. Lo instalo en esa misma MV en la que instalé todo.

Por otro lado, en otra máquina virtual, tenía mi entorno de desarrollo, donde con mi Key/CRT en homologación todo funciona bien.
Si la aplicación la muevo a esta nueva MV accedo sin problemas con la nueva instalación a los servidores de homologación (más allá de haberlo compilado con False).
Obviamente, al ser mi CRT un certificado de test, no funciona contra los servicios de producción.

Con la combinación Key/CRT (de producción, obtenida a través de la página de AFIP), de un cliente, no puedo conectarme en homologación (tiene lógica), pero tampoco puedo lograr el ticket de autorización por wsaa en producción. El error que me tira es: "Certificado no emitido por AC de confianza"

Por favor, te pido me indiques como seguir? debe solicitarse un nuevo certificado? La antigüedad del mismo es de unos 20 días.

Desde ya, mil gracias!

Mariano Reingart

unread,
May 30, 2014, 10:56:01 PM5/30/14
to pyaf...@googlegroups.com
2014-05-30 23:35 GMT-03:00 <martin...@gmail.com>:
Hola Mariano! Gracias por los datos.

Descargue e instalé todo siguiendo los pasos para compilar un instalador.
Edito el archivo de setup de esta forma:
import pyafipws

Este lo podes comentar también (solo se usa para servicios web "obsoletos", esta incluido para mantener compatibilidad hacia atrás)
 
#import pyrece
import wsaa
import wsfev1, rece1

OK
 
#import wsfexv1, recex1
#import wsbfev1, receb1
#import wsmtx, recem
#import pyfepdf
#import pyemail
#import pyi25
#import wsctgv2
#import wslpg
#import wscoc
#import wscdc
#import cot
#import trazamed
#import trazarenpre
#import trazafito
#import padron

corrijo los archivo py
pyafipws
wsaa
wsfev1
poniendo Homo = False


OK
 
y ejecuto el creador de instalación. Lo instalo en esa misma MV en la que instalé todo.


Asumo que no te da ningún error, ¿no?
 
Por otro lado, en otra máquina virtual, tenía mi entorno de desarrollo, donde con mi Key/CRT en homologación todo funciona bien.

¿Desinstalaste todos los paquetes previos antes de instalar el nuevo?

Es recomendable que desinstales, reinicies el equipo y elimines los archivos previos (generalmente en C:\Archivos de Programa\PyAfipWs o similar)
A veces si al instalar/desinstalar está en ejecución el programa o el entorno de desarrollo (por ej. Visual Basic), los archivos quedan abiertos (bloqueados) y pueden no actualizarse correctamente. 
 
Si la aplicación la muevo a esta nueva MV accedo sin problemas con la nueva instalación a los servidores de homologación (más allá de haberlo compilado con False).

Esto es normal, por defecto entra en homologación si no se especifica URL (y también funciona si la URL es de homologación).
 
Obviamente, al ser mi CRT un certificado de test, no funciona contra los servicios de producción.

Con la combinación Key/CRT (de producción, obtenida a través de la página de AFIP), de un cliente, no puedo conectarme en homologación (tiene lógica), pero tampoco puedo lograr el ticket de autorización por wsaa en producción. El error que me tira es: "Certificado no emitido por AC de confianza"


¿Estas usando la URL de producción correcta?

Sería https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl (segundo parámetro del método WSAA.Conectar)

¿Que contiene el atributo WSAA.Version?

No debe decir "Homologación" porque entonces estarías usando el instalador viejo (y debería contener "2.08a" o similar, indicando que es una versión actualizada).

Podes revisar también el atributo WSAA.InstallDir, debería apuntar a la carpeta de instalación del nuevo paquete para producción.

Por favor, te pido me indiques como seguir? debe solicitarse un nuevo certificado? La antigüedad del mismo es de unos 20 días.


No, no hace falta renovar el certificado pero podes revisar con el ejemplo interactivo para ver que este todo ok:


martin...@gmail.com

unread,
May 31, 2014, 12:29:55 AM5/31/14
to pyaf...@googlegroups.com
Gracias por la pronta respuesta (pareciera que supieras que me urge solucionarlo!!! :))
En el setup solo quedaron entonces:

import wsaa
import wsfev1, rece1
El instalador se armo sin errores (adjunto log.txt).

Descargué el ejemplo interactivo, lo instalé en una MV clonada limpia, primero el wsaa2.02 y luego el ejemplo.
Te adjunto el error que me tira, teniendo en cuenta que lo hice con el certificado del cliente (para producción), y no me dejó cambiar a producción.

En la PC donde hago el test de producción (que es donde está instalado python y donde genero el instalador), desinstalé la instalación anterior, y borré la carpeta c:\archivos de programa\PyAfipWS, reinicié e instalé el nuevo instalador de nombre instalador-PyAfipWs-2.33a-32bit+wsaa_2.08a+wsfev1_1.14b-full.exe

Hago las pruebas y el error que me tira el wsaa.exe.log ahora es otro, edité el log porque hice 3 llamadas distintas. El error ahora es que el "computador no está autorizado".

La version es 2.08, la carpeta de instalación pareciera estar bien.

Recordá que es un nuevo instalador, sin el pyafipws.

La verdad, no se que puedo probar...
version-installdir.JPG
log.txt
wsaa.exe.log
error_ejemplo_interactivo.JPG

Mariano Reingart

unread,
May 31, 2014, 12:58:34 AM5/31/14
to pyaf...@googlegroups.com
2014-05-31 1:29 GMT-03:00 <martin...@gmail.com>:
Gracias por la pronta respuesta (pareciera que supieras que me urge solucionarlo!!! :))
En el setup solo quedaron entonces:

import wsaa
import wsfev1, rece1
El instalador se armo sin errores (adjunto log.txt).

Descargué el ejemplo interactivo, lo instalé en una MV clonada limpia, primero el wsaa2.02 y luego el ejemplo.
Te adjunto el error que me tira, teniendo en cuenta que lo hice con el certificado del cliente (para producción), y no me dejó cambiar a producción.


Si dice "Homologación" y no te deja cambiar la URL, es porque no te esta tomando el instalador: No tenes que instalar wsaa2.02 (porque seguro es antiguo y para evaluación en homologación, al lado del link en el manual hay una aclaración importante, voy a ver como la hago más prominente porque no es la primera vez que pasa).
Instala el nuevo paquete actualizado que generaste para producción (ver abajo que si te funciona), y debería funcionar correctamente.

 
En la PC donde hago el test de producción (que es donde está instalado python y donde genero el instalador), desinstalé la instalación anterior, y borré la carpeta c:\archivos de programa\PyAfipWS, reinicié e instalé el nuevo instalador de nombre instalador-PyAfipWs-2.33a-32bit+wsaa_2.08a+wsfev1_1.14b-full.exe


Ok, este archivo es el que tenes que instalar en la maquina de arriba, por el nombre estaría bien (no dice -homo que es para evaluación)
 
Hago las pruebas y el error que me tira el wsaa.exe.log ahora es otro, edité el log porque hice 3 llamadas distintas. El error ahora es que el "computador no está autorizado".


Perfecto, ¡te está funcionando en producción!

El error "computador no está autorizado" es porque tienen algún trámite mal en AFIP:


(ahí hay más errores frecuentes de AFIP documentados)
 
En resumen: ya te estaría funcionando correctamente, ahora tenes que ver con AFIP de registrar bien el certificado para producción, adherite al régimen de factura electrónica, dar de alta los puntos de venta, etc. (por clave fiscal), 

Sds

martin...@gmail.com

unread,
Jun 2, 2014, 7:59:23 AM6/2/14
to pyaf...@googlegroups.com
Hola! Puede haber algun problema en el csr emitido?
Yo lo hice de esta forma (tanto el mio como el del cliente):
Openssl req -new -key empresa.key -subj "/C=AR/O=[empresa]/CN=PyAfipWS/serialNumber=CUIT [nro_cuit]" -out empresa.csr

Como en homologacion funciona, estimo que esta bien.
Quiza en CN=deba ir otra cosa? Wsaa? WsFev1?

Gracias

Mariano Reingart

unread,
Jun 2, 2014, 10:42:33 AM6/2/14
to pyaf...@googlegroups.com
No creo, "computador no autorizado" no es un tema técnico, simplemente les está faltando la asociación del certificado al webservice, por Clave Fiscal, Administrador de Relaciones:


Por lo visto, CN del CSR esta OK, si estaría mal armado te diría que el CUIT no esta en la lista de relaciones o cosas así.

Sds


--
Has recibido este mensaje porque estás suscrito al grupo "PyAfipWs - Factura Electrónica Libre" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a pyaf...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

martin...@gmail.com

unread,
Jun 2, 2014, 3:44:43 PM6/2/14
to pyaf...@googlegroups.com

Hola! pude solucionar el problema de la conexión. Era un tema de registración en AFIP, o en realidad de puesta en funcionamiento del CRT.
Como sea, salimos adelante con el tema y en el ejemplo interactivo anda al pelo el acceso al servicio wsfe.

Si pruebo mi aplicación no funciona al querer conectarme al wsfe.

Te adjunto el código (Delphi) y el error.

En primera instancia, creaba el objeto OLE de nombre "WSFE", y el mismo tiraba un error. A ciegas probé con WSFEv1, y funcionó.

El problema es que no me conecta al servidor, probé con
https://wsw.afip.gov.ar/wsfev1/service.asmx
https://wsw.afip.gov.ar/wsfe/service.asmx
https://wsw.afip.gov.ar/wsfev1/service.asmx?wsdl
https://wsw.afip.gov.ar/wsfe/service.asmx?wsdl
No veo donde puede estar el error.

function WSFE_comprobar_conexion(): Boolean;
begin
  WSFE := CreateOleObject('WSFEv1');
  WSFE.Token := WSAA.Token;
  WSFE.Sign := WSAA.Sign;
  WSFE.Conectar('https://wsw.afip.gov.ar/wsfev1/service.asmx'); //producción
  WSFE.Dummy;
  if (WSFE.AppServerStatus = 'OK') then
    result := true
  else
    result := false;
end;

Mil gracias!
error_conexion_wsfe.JPG

martin...@gmail.com

unread,
Jun 2, 2014, 4:52:33 PM6/2/14
to pyaf...@googlegroups.com, martin...@gmail.com
Perdón, ahí encontré la falla.
Tenía basado mi ejemplo en el ejemplo de Delphi para wsfe.

El servicio se está ahora conectando a wsfev1, por ende mi código quedó de esta forma:

function WSFEv1_comprobar_conexion(urlservidor, proxy: string): Boolean;
begin
  //Crear objeto interface Web Service de Factura Electrónica
  WSFEv1 := CreateOleObject('WSFEv1');
  //Setear token y sing de autorización (pasos previos)
  WSFEv1.Token := WSAA.Token;
  WSFEv1.Sign := WSAA.Sign;
  //Conectar al Servicio Web de Facturación
  WSFEv1.Conectar('', urlservidor, proxy); //producción
  WSFEv1.Dummy;
  if (WSFEv1.AppServerStatus = 'OK') then

    result := true
  else
    result := false;
end;

Donde urlservidor = https://servicios1.afip.gov.ar/wsfev1/service.asmx

Esta dirección es la correcta?

Mariano Reingart

unread,
Jun 2, 2014, 5:04:24 PM6/2/14
to pyaf...@googlegroups.com, Martin Barreda
2014-06-02 17:52 GMT-03:00 <martin...@gmail.com>:
Perdón, ahí encontré la falla.
Tenía basado mi ejemplo en el ejemplo de Delphi para wsfe.

El servicio se está ahora conectando a wsfev1, por ende mi código quedó de esta forma:

function WSFEv1_comprobar_conexion(urlservidor, proxy: string): Boolean;
begin
  //Crear objeto interface Web Service de Factura Electrónica
  WSFEv1 := CreateOleObject('WSFEv1');
  //Setear token y sing de autorización (pasos previos)
  WSFEv1.Token := WSAA.Token;
  WSFEv1.Sign := WSAA.Sign;
  //Conectar al Servicio Web de Facturación
  WSFEv1.Conectar('', urlservidor, proxy); //producción
  WSFEv1.Dummy;
  if (WSFEv1.AppServerStatus = 'OK') then

    result := true
  else
    result := false;
end;

Donde urlservidor = https://servicios1.afip.gov.ar/wsfev1/service.asmx

Esta dirección es la correcta?


Si, es la dirección correcta, para más información podes ver la documentación:


Sds

martin...@gmail.com

unread,
Jun 2, 2014, 5:09:08 PM6/2/14
to pyaf...@googlegroups.com, martin...@gmail.com
Fantastico, te agradezco... hay diferencia si agrego ?wsdl al final? No lo estoy haciendo y funciona. Es un parámetro necesario?

Mariano Reingart

unread,
Jun 2, 2014, 6:40:09 PM6/2/14
to pyaf...@googlegroups.com, Martin Barreda
2014-06-02 18:09 GMT-03:00 <martin...@gmail.com>:
Fantastico, te agradezco... hay diferencia si agrego ?wsdl al final? No lo estoy haciendo y funciona. Es un parámetro necesario?

Cuidado: algunos terminan en ?WSDL y otros en ?wsdl
Es recomendable que copies tal cual la URL que corresponda (y eso dejarlo configurable en tu programa ya que a veces AFIP cambia las URL).
Igualmente internamente le va a agregar el prefijo para poder descargar la descripción de servicio si no está especificado.

martin...@gmail.com

unread,
Jun 3, 2014, 1:06:29 AM6/3/14
to pyaf...@googlegroups.com, martin...@gmail.com
Hola Mariano!
Te comento que tengo un nuevo problema. Al querer crear la factura y luego solicitar el CAE me indica el siguiente error: "TypeError: CAESoliticar takes exactly 1 argument (2 given)"
1) Puede ser por la presencia de AgregarIVA?
2) AgregarIVA debe llamarse en todos los casos? tanto facturas A como B?
3) En el caso de Notas de crédito el comprobante asociado, será la factura A o B que se "cancelo" con la nota de crédito? o tiene otra función?
4) Quizá en mi caso sea suficiente con informar solamente el CrearFactura? Es una inmobiliaria cuyos honorarios se facturan A o B, y eventualmente deben "anular" una factura a través de una nota de crédito.

Te adjunto el código de la factura que quiero informar. Es más, si quiero recuperar el CAE de la factura "creada", indicando tipo=6, punto_venta=2, y nro=1 (es la primer factura), no pareciera haberse creado, cuando el error salta recién en el CAESolicitar. Asimismo, si deseo recuperar el nro del ultimo comprobante 6 del pv 2, es el 0.
Por otro lado, logro conectarme, y tanto la consulta a CompUltimoAutorizado y CompConsultar, más allá de devolver 0 y '' se ejecutan sin problema.
Esto se está haciendo con el CRT del cliente, directamente en producción.

Mil gracias nuevamente y ruego disculpes la molestia!


  WSFEv1 := CreateOleObject('WSFEv1');
  WSFEv1.Token := WSAA.Token;
  WSFEv1.Sign := WSAA.Sign;
  WSFEv1.Cuit := cuit_emisor;
  WSFEv1.Conectar('', 'https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL', '');
  WSFEv1.CrearFactura(2, tipo_doc, nro_doc, 6, 2, 1, 1, 121, 0, 100, 21, 0, 0, '20140501', '20140501', '20140501', '20140501', 'PES', '1');
  //Agrego tasas de IVA
  tasa_iva := 5; //21%
  WSFEv1.AgregarIva(5, 100, 21);
  //Agrego los comprobantes asociados
  if tipo_cbte in [3,8] then //agrego la factura que fue anulada por la NC A o B segun corresponda (¿?)
    WSFEv1.AgregarCmpAsoc(tipo_cbte_asoc, pvta_cbte_asoc, nro_cbte_asoc);
  //solitico el CAE
  cae_obtenido := WSFEv1.CAESolicitar();

Mariano Reingart

unread,
Jun 3, 2014, 1:25:03 PM6/3/14
to pyaf...@googlegroups.com, Martin Barreda
2014-06-03 2:06 GMT-03:00 <martin...@gmail.com>:
Hola Mariano!
Te comento que tengo un nuevo problema. Al querer crear la factura y luego solicitar el CAE me indica el siguiente error: "TypeError: CAESoliticar takes exactly 1 argument (2 given)"
1) Puede ser por la presencia de AgregarIVA?

No, AgregarIVA no influye
 
2) AgregarIVA debe llamarse en todos los casos? tanto facturas A como B?

Si, siempre que corresponda (haya IVA)
 
3) En el caso de Notas de crédito el comprobante asociado, será la factura A o B que se "cancelo" con la nota de crédito? o tiene otra función?

Si, es el comprobante asociado para cuando se referencia una factura desde una nota de crédito o débito..
 
4) Quizá en mi caso sea suficiente con informar solamente el CrearFactura? Es una inmobiliaria cuyos honorarios se facturan A o B, y eventualmente deben "anular" una factura a través de una nota de crédito.


El tema de comprobante asociado es opcional (y esta limitado a 1 comprobante)
AgregarIVA es obligatorio si tienen tasas de ese impuesto (10.5%, 21% o 27%)
 
Te adjunto el código de la factura que quiero informar. Es más, si quiero recuperar el CAE de la factura "creada", indicando tipo=6, punto_venta=2, y nro=1 (es la primer factura), no pareciera haberse creado, cuando el error salta recién en el CAESolicitar. Asimismo, si deseo recuperar el nro del ultimo comprobante 6 del pv 2, es el 0.

Si el método CompConsultar no te devuelve la factura, es porque no existe.
 
Por otro lado, logro conectarme, y tanto la consulta a CompUltimoAutorizado y CompConsultar, más allá de devolver 0 y '' se ejecutan sin problema.

CompUltimoAutorizado devuelve 0 cuando no hay comprobantes o hay algún error (incluso desde AFIP), debes revisar WSFEv1.ErrMsg y WSFEv1.Excepcion
 
Esto se está haciendo con el CRT del cliente, directamente en producción.

Mil gracias nuevamente y ruego disculpes la molestia!


  WSFEv1 := CreateOleObject('WSFEv1');
  WSFEv1.Token := WSAA.Token;
  WSFEv1.Sign := WSAA.Sign;
  WSFEv1.Cuit := cuit_emisor;
  WSFEv1.Conectar('', 'https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL', '');
  WSFEv1.CrearFactura(2, tipo_doc, nro_doc, 6, 2, 1, 1, 121, 0, 100, 21, 0, 0, '20140501', '20140501', '20140501', '20140501', 'PES', '1');
  //Agrego tasas de IVA
  tasa_iva := 5; //21%
  WSFEv1.AgregarIva(5, 100, 21);
  //Agrego los comprobantes asociados
  if tipo_cbte in [3,8] then //agrego la factura que fue anulada por la NC A o B segun corresponda (¿?)
    WSFEv1.AgregarCmpAsoc(tipo_cbte_asoc, pvta_cbte_asoc, nro_cbte_asoc);
  //solitico el CAE
  cae_obtenido := WSFEv1.CAESolicitar();



Si recuerdo bien, en delphi deberías llamarlo con la notación sin parámetros:

cae_obtenido := WSFEv1.CAESolicitar;
Reply all
Reply to author
Forward
0 new messages