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