Y agregar las referencias "Microsoft Scripting Runtime" y "Microsoft WinHTTP Services, version 5.1"
2. Obtener el Ticket de Acceso (TA)
Antes de llamar a los Web Services de ARCA, necesitás un ticket de acceso (TA), también llamado Token Authorization.
Este TA expira tras un tiempo, pero no tenés que preocuparte por renovarlo: Afip SDK lo cachea y solicita uno nuevo automáticamente si es necesario. Solo llamá a la API y Afip SDK te devuelve el TA correspondiente.
Para obtener el TA se necesita un certificado digital, pero con Afip SDK podés empezar en modo desarrollo usando el CUIT 20-40937847-2 sin necesidad de uno.
gstrToken y gstrSign corresponden el TA que nos da ARCA. Debemos enviar estos datos en el body de cada solicitud a los Web Services. En el manual de cada Web Service verás dónde colocarlos.
3. Llamar al método del Web Service que necesites
Con el TA ya podés realizar las llamadas a los Web Services que necesites.
Es similar al código para obtener el TA, pero debés cambiar la URL y el body de la request.
Podés encontrar las URLs y los body correspondientes en las pestañas API de la documentación de cada Web Service.
Private Sub GetAuthorization()
Dim objHttp As Object
Dim strResponse As String
Dim strAuthUrl As String
Dim strAuthData As String
Dim dictAuthData As Dictionary
' Crear objeto XMLHTTP
Set objHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
strAuthUrl = "https://app.afipsdk.com/api/v1/afip/auth"
' Preparamos la data para pedir el TA
Set dictAuthData = New Dictionary
dictAuthData.Add "environment", "dev"
dictAuthData.Add "tax_id", "20409378472"
dictAuthData.Add "wsid", "wsfe"
strAuthData = JsonConverter.ConvertToJson(dictAuthData)
' Reemplazar con tu access_token obtenido de https://app.afipsdk.com
Dim accessToken As String
accessToken = "TU_TOKEN_AQUI"
With objHttp
.Open "POST", strAuthUrl, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " + accessToken
.Send strAuthData
If .Status <> 200 Then
MsgBox "Error en la autorización: " & .Status
MsgBox "Respuesta: " & .responseText
Exit Sub
End If
strResponse = .responseText
End With
' Parsear respuesta JSON (requiere función auxiliar ParseJson)
Dim objJson As Object
Set objJson = JsonConverter.ParseJson(strResponse)
' Guardar token y sign
gstrToken = objJson("token")
gstrSign = objJson("sign")
Debug.Print "Token: " & gstrToken
Debug.Print "Sign: " & gstrSign
End Sub