wsaa.conectar() me devuelve ok pero token y sign vacios

919 views
Skip to first unread message

esteban...@gmail.com

unread,
Jun 30, 2014, 8:03:16 PM6/30/14
to pyaf...@googlegroups.com
buenas noches, le paso a comentar mi caso
estoy trabajando con los siguientes elementos:
- Una base en acces 97 
- interfaz WSFEV1-1.12g
- interfaz WSAA-2.04c

Estuve trabajando en modo homologacion sin problema alguno, pero a la hora de pasar de a producción el sign y el token vuelven vacíos.
El problema salió a la luz cuando quise obtener el ultimo nro de comprobante ya que una validación me indicaba que faltaban el token y sign.

Temas a tener en cuenta:
      Cuando utilizo el certificado de producción en la aplicacion PyRece, pude autenticarme y obtener el ultimo numero de comprobante sin problema alguno.
      También quería comentarles que tengo muchas dudas en cuanto si debo aplicar el cacert y cual debo utilizar, tampoco estoy seguro del wrapper.
      AL ejecutar el método Conectar de WSAA, este responde con valor "TRUE"


Les paso la porción de código que utilizo en el evento load del formulario y luego en el autenticar:

Private Sub Form_Load()
    Dim ok, wsdl, proxy, cache, cacert, wrapper, path
    
    On Error Resume Next
    
    ' Crear objeto interface Web Service Autenticación y Autorización
    Set WSAA = CreateObject("WSAA")
    If WSAA Is Nothing Then
        MsgBox "La interfaz PyAfipWs para WSAA no esta instalada!", vbCritical
        End
    ElseIf WSAA.Version < "2.02" Then
        MsgBox "Version de WSAA no soportada:" & WSAA.Version, vbCritical
        End
    Else
        ' Conectar a WSAA
        path = CurrentDb.Name
        path = Left$(path, Len(path) - Len(Dir(path)))
        cacert = path + "ac_root.crt"
        wrapper = "httplib2"
        proxy = "" '"usuario:clave@localhost:8000"
        cache = "" 'Path
        ok = WSAA.Conectar(cache, wsdl, proxy, wrapper, cacert)
    End If
    
    ' Crear objeto interface Web Service de Factura Electrónica de Mercado Interno
    Set WSFEv1 = CreateObject("WSFEv1")
    If WSFEv1 Is Nothing Then
        MsgBox "La interfaz PyAfipWs para WSFEv1 no esta instalada!" & vbCrLf & "El programa puede no funcionar correctamente.", vbCritical
        End
    Else
         Debug.Print WSFEv1.Version
        'Debug.Print WSFEv1.InstallDir
    
        ' Conectar al Servicio Web de Facturación
        proxy = "" ' "usuario:clave@localhost:8000"
            
        ok = WSFEv1.Conectar(cache, wsdl, proxy, "")
        Debug.Print WSFEv1.Version
    
        ' mostrar bitácora de depuración:
        Debug.Print WSFEv1.DebugLog
    End If
End Sub

----------------------------------------------------------------------

Private Function Autenticar() As Boolean
    Dim path, Certificado, ClavePrivada
    Dim servicio, CMS, TRA, TA
    Dim proxy, url
    
    On Error GoTo ManejoError
        
    ' Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1/WSFEX
    TRA = WSAA.CreateTRA(servicio)
    Debug.Print TRA
    
    ' Especificar la ubicacion de los archivos certificado y clave privada
    path = CurrentDb.Name
    path = Left$(path, Len(path) - Len(Dir(path)))

    ' Certificado: certificado es el firmado por la AFIP
    ' ClavePrivada: la clave privada usada para crear el certificado
    Certificado = "produccion.crt" ' certificado de prueba
    ClavePrivada = "produccion.key" ' clave privada de prueba
    
    ' Generar el mensaje firmado (CMS)
    CMS = WSAA.SignTRA(TRA, path + Certificado, path + ClavePrivada)
    
    ' Llamar al web service para autenticar:
    TA = WSAA.LoginCMS(CMS)

    ' Imprimir el ticket de acceso, ToKen y Sign de autorización
    Debug.Print TA
    Debug.Print "Token:", WSAA.token
    Debug.Print "Sign:", WSAA.Sign

    MsgBox "Autenticado OK!", vbInformation, "PyAfipWs"
    
    Autenticar = True

    Exit Function
ManejoError:
    ' Si hubo error:
    Debug.Print Err.Description            ' descripción error afip
    Debug.Print Err.Number - vbObjectError ' codigo error afip
    Select Case MsgBox(Err.Description, vbCritical + vbRetryCancel, "Error:" & Err.Number - vbObjectError & " en " & Err.Source)
        Case vbRetry
            Debug.Print WSFEv1.XmlRequest
            Debug.Print WSFEv1.XmlResponse
            Debug.Print WSFEv1.Traceback
            Resume
        Case vbCancel
            Debug.Print Err.Description
    End Select

    Autenticar = False
End Function

-----------------------------------------------------

Muchas gracias por su tiempo

Esteban







Mariano Reingart

unread,
Jul 7, 2014, 3:53:25 PM7/7/14
to pyaf...@googlegroups.com
2014-06-30 21:03 GMT-03:00 <esteban...@gmail.com>:
buenas noches, le paso a comentar mi caso
estoy trabajando con los siguientes elementos:
- Una base en acces 97 
- interfaz WSFEV1-1.12g
- interfaz WSAA-2.04c

¿Esos instaladores son para producción u homologación?
  
Estuve trabajando en modo homologacion sin problema alguno, pero a la hora de pasar de a producción el sign y el token vuelven vacíos.

Tendrías que analizar el problema viendo en WSAA.Excepcion, WSAA.Traceback, WSAA.XmlRequest y WSAA.XmlResponse 
Posiblemente tengas un tema de certificados, URL, o similar.
Podes utilizar nuestroejemplo interactivo para descartar este tipo de problemas de autenticación con AFIP:

 
El problema salió a la luz cuando quise obtener el ultimo nro de comprobante ya que una validación me indicaba que faltaban el token y sign.

Temas a tener en cuenta:
      Cuando utilizo el certificado de producción en la aplicacion PyRece, pude autenticarme y obtener el ultimo numero de comprobante sin problema alguno.

Para PyRece, el instalador funciona en producción (ya que es para usuarios finales), pero el resto de los instaladores de las herramientas es para evaluación (solo homologación).

Deberías ver el instructivo de instalación para descargar el código fuente del repositorio y utilizar una versión actualizada:


Para más información, ver:

 
      También quería comentarles que tengo muchas dudas en cuanto si debo aplicar el cacert y cual debo utilizar, tampoco estoy seguro del wrapper.

El wrapper se usa para casos avanzados (ej. biblioteca de comunicación PyCURL que soportan proxy con autenticación propietaria MS ISA server)
El cacert se utiliza para verificar el canal seguro:


Esto último es una recomendación de AFIP, pero en pruebas como es algo que lo hace el cliente web, funciona igual si no lo utilizaras.
 
      AL ejecutar el método Conectar de WSAA, este responde con valor "TRUE"



Si, en general al inicializar el componente del webservice solo descarga la descripción del servicio, por lo que en general devuelve verdadero.

Sds
Reply all
Reply to author
Forward
0 new messages