Realizar constatación de comprobantes de ARCA en Visual Basic 6
Con pocas líneas de código

La constatación de los datos de un comprobante puede realizarse a través de nuestro propio sistema, consumiendo los web services de ARCA.
Esto lo vamos a hacer utilizando Afip SDK, que nos permite conectarnos a los web services de ARCA sin complicarnos con el uso de SOAP y la autenticación.
Ademas, vamos a usar https://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas para trabajar con JSON.
Para esto debemos descargar descargar JsonConverter.bas, y agregarlo a nuestro proyecto.

Elegimos “JsonConverter.bas”

Y agregar la referencia “Microsoft Scripting Runtime”

Elegimos “Microsoft Scripting Runtime”

Obtener la autorización
Lo primero que tenemos hacer es obtener el “Token authorization”, que seria la autorización en ARCA.
Para usar los web services de ARCA, se requiere un certificado digital, con Afip SDK puedes integrarte en modo desarrollo usando el CUIT 20409378472
sin necesidad de obtener un certificado, para poder integrarte lo más rápido posible.
Te dejo este enlace por si luego quieres usar tu propio certificado para desarrollo.
Debemos ejecutar una solicitud POST al endpoint
https://app.afipsdk.com/api/v1/afip/auth
Private Sub GetAuthorization()
Dim objHttp As Object
Dim strResponse As String
Dim strAuthUrl As String
Dim strAuthData As String
Dim dictAuthData As Dictionary
Set objHttp = CreateObject("MSXML2.XMLHTTP")
strAuthUrl = "https://app.afipsdk.com/api/v1/afip/auth"
Set dictAuthData = New Dictionary
dictAuthData.Add "environment", "dev"
dictAuthData.Add "tax_id", "20409378472"
dictAuthData.Add "wsid", "wscdc"
strAuthData = JsonConverter.ConvertToJson(dictAuthData)
With objHttp
.Open "POST", strAuthUrl, False
.setRequestHeader "Content-Type", "application/json"
.Send strAuthData
If .Status <> 200 Then
MsgBox "Error en la autorización: " & .Status
MsgBox "Respuesta: " & .responseText
Exit Sub
End If
strResponse = .responseText
End With
Dim objJson As Object
Set objJson = JsonConverter.ParseJson(strResponse)
gstrToken = objJson("token")
gstrSign = objJson("sign")
Debug.Print "Token: " & gstrToken
Debug.Print "Sign: " & gstrSign
End Sub
Aquí tenemos el token y sign que nos dio ARCA para usar el web service. No es necesario que lo guardemos, Afip SDK se encarga de esto por nosotros, debemos solicitarlo antes de cada llamada a los métodos del web service.
Realizamos la constatación de un comprobante
Vamos a constatar el comprobante con el CAE 75082223003046. En este momento estamos ejecutando una solicitud en modo desarrollo, por lo que solo podemos constatar comprobantes emitidos en el entorno de desarrollo. Más adelante, al pasar a producción, podremos constatar comprobantes reales.
Debemos ejecutar una solicitud POST al endpoint
https://app.afipsdk.com/api/v1/afip/requests
Private Sub VerifyVoucher()
Dim objHttp As Object
Dim strResponse As String
Dim strUrl As String
Dim strData As String
Dim dictData As Dictionary
Set objHttp = CreateObject("MSXML2.XMLHTTP")
strUrl = "https://app.afipsdk.com/api/v1/afip/requests"
Set dictData = New Dictionary
dictData.Add "environment", "dev"
dictData.Add "method", "ComprobanteConstatar"
dictData.Add "wsid", "wscdc"
Dim dictParams As Dictionary
Set dictParams = New Dictionary
Dim dictAuth As Dictionary
Set dictAuth = New Dictionary
dictAuth.Add "Token", gstrToken
dictAuth.Add "Sign", gstrSign
dictAuth.Add "Cuit", "20409378472"
dictParams.Add "Auth", dictAuth
Dim dictCmpReq As Dictionary
Set dictCmpReq = New Dictionary
dictCmpReq.Add "CbteModo", "CAE"
dictCmpReq.Add "CuitEmisor", 20409378472
dictCmpReq.Add "PtoVta", 1
dictCmpReq.Add "CbteTipo", 11
dictCmpReq.Add "CbteNro", 3850
dictCmpReq.Add "CbteFch", 20250225
dictCmpReq.Add "ImpTotal", 100
dictCmpReq.Add "CodAutorizacion", "75082223003046"
dictCmpReq.Add "DocTipoReceptor", "80"
dictCmpReq.Add "DocNroReceptor", "33693450239"
dictParams.Add "CmpReq", dictCmpReq
dictData.Add "params", dictParams
strData = JsonConverter.ConvertToJson(dictData)
With objHttp
.Open "POST", strUrl, False
.setRequestHeader "Content-Type", "application/json"
.Send strData
If .Status <> 200 Then
MsgBox "Error al constatar el comprobante: " & .Status
Exit Sub
End If
strResponse = .responseText
End With
Debug.Print "Response: " & strResponse
Dim objJson As Object
Set objJson = JsonConverter.ParseJson(strResponse)
' Aquí puedes acceder al resultado de la constatación
End Sub
En la respuesta, nos devolverá el resultado de la constatación del comprobante.
{
"ComprobanteConstatarResult": {
"CmpResp": {
"CbteModo": "CAE",
"CuitEmisor": 20409378472,
"PtoVta": 1,
"CbteTipo": 11,
"CbteNro": 3850,
"CbteFch": "20250225",
"ImpTotal": 100,
"CodAutorizacion": "75082223003046",
"DocTipoReceptor": "80",
"DocNroReceptor": "33693450239"
},
"Resultado": "A",
"FchProceso": "20250225091448",
"Events": {
"Evt": [
{
"Code": 0
}
]
}
}
}
En el resultado podemos ver que el comprobante fue constatado correctamente "Resultado": "A"
(A = Aprobado, R = Rechazado).
Con esto ya tenemos la constatación de un comprobante de ARCA a través de la API listo.
Lo único que nos queda es pasar a modo producción para poder realizar constatación de comprobantes reales.
Ante cualquier duda o pregunta al respecto, pueden resolverla rápidamente dentro de la Comunidad Afip SDK. Además, puedes unirte para estar al tanto de las novedades y problemas técnicos al usar los servicios de ARCA.