ARBA A122
certificado retención digital (preliminar)
certificado retención digital (preliminar)
Este servicio (API) de ARBA permite emitir el certificado de retención digital (previa declaración jurada abierta) y descargar el PDF correspondiente
Desde visual basic 6 (o cualquier otro lenguaje en ambiente windows) el servicio se puede usar con esté código básico (para el modo prueba). Este código obtiene la id de la retención (habiendo previamente obtenido el token y el id de la DD.JJ. ver más adelante)
Dim mio As Object
Dim bresultado As Boolean
bresultado = True
Dim curl As String
Rem es la url o dirección del servidor (prueba o real) con el método a ejecutar proporcionada por la documentación
curl = "https://app2.test.arba.gov.ar/a122rSrv/api/external/comprobante"
Dim crutaticket As String
Rem es donde se guardó el token obtenido en paso anterior.
crutaticket = "d:\ticket.txt"
Dim carchivoxmlenviado As String
Dim carchivoxmlrecibido As String
Rem son las rutas donde se guarda archivo con todo el tráfico de datos enviados y recibidos del servidor.
carchivoxmlenviado = "d:\arbapet.txt"
carchivoxmlrecibido = "d:\arbaret.txt"
Dim ctoken As String
Dim numeroArchivo
numeroArchivo = 1
Rem leemos el ticket de acceso obtenido previamente, ver en esta misma documentación
Open crutaticket For Input As #numeroArchivo
ctoken = Input(LOF(numeroArchivo), #numeroArchivo)
Close #numeroArchivo
Dim ccuit As String
Rem es el cuit/usuario que se tramitó en arba
ccuit = "20111111112"
Dim crutalicencia As String
Rem es el archivo de licencia para el cuit del cliente y que incluya el servicio ARBA A122.
Rem tramitar en la plataforma https://sites.google.com/site/facturaelectronicax/inicio/misdatos/misdatos-servicios/misdatoslicenciarapida
crutalicencia = "D:\20111111112.lic"
Dim cidDDJJ As String
Rem id declaracion jurada obtenido código anterior o desde el portal
cidDDJJ = "1234"
Set mio = CreateObject("WSAFIPFE.misdatos")
If mio.iniciar(ccuit, "") Then
mio.tls = -1
mio.archivolicencia = crutalicencia
mio.ArchivoXMLEnviado = carchivoxmlenviado
mio.ArchivoXMLRecibido = carchivoxmlrecibido
bresultado = mio.apiCargarPropiedad("LIMPIAR", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.ticket", ctoken, 0, 0)
Dim cticket As String
If bresultado Then
cticket = mio.apiLeerPropiedad("ARBA2025", "obtenerticket.ticketvigente", "", 0, 0)
If cticket = "SI" Then
If bresultado Then
bresultado = mio.apiCargarPropiedad("LIMPIAR", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.URLMETODO", "https://app2.test.arba.gov.ar/a122rSrv/api/external/comprobante", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.TIPOMETODO", "POST", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.idDj", cidDDJJ, 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.cuitContribuyente", "20111111112", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.cuitAgente", ccuit, 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.sucursal", "3", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.alicuota", "2", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.baseImponible", "100.10", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.importeRetencion", "2.01", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.razonSocialContribuyente", "prueba", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.fechaOperacion", "2025-11-20T20:00:20.595Z", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.calle", "san martin", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.numero", "260", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.piso", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.departamento", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.codigoPostal", "0000", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.localidad", "Capital Federal", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOSJSON.diccionario.direccion.provincia", "Capital Federa", 0, 0)
If bresultado Then
If mio.apiEjecutar("ARBA2025") Then
Dim ccadena As String
Dim cmessage As String
Dim cid As String
cmessage = mio.apiLeerPropiedad("ARBA2025", "diccionario.error", "", 0, 0)
If cmessage = "" Then
cid = mio.apiLeerPropiedad("ARBA2025", "diccionario.id", "", 0, 0)
MsgBox ("id certific ado " + cid)
Else
MsgBox ("error " + cmessage)
End If
Else
MsgBox ("error metodo " + mio.UltimoMensajeError)
bresultado = False
End If
Else
bresultado = False
MsgBox ("error cargar propiedad " + mio.UltimoMensajeError)
End If
End If
Else
MsgBox ("ticket vencido")
End If
Else
MsgBox (mio.UltimoMensajeError)
End If
End If
Los métodos de la api necesitan un token o permiso de acceso para poder operarlos. Este codigo obtiene ese token y lo guarda en un archivo de texto para que pueda ser reusado por los otros métodos.
Dim mio As Object
Dim bresultado As Boolean
bresultado = True
Dim curl As String
Rem es la url o dirección del servidor (prueba o real) con el método a ejecutar proporcinada por la documentación
curl = "https://idp.test.arba.gov.ar/realms/ARBA/protocol/openid-connect/token"
Dim crutaticket As String
Rem es donde se guardó el token obtenido en paso anterior.
crutaticket = "d:\ticket.txt"
Dim carchivoxmlenviado As String
Dim carchivoxmlrecibido As String
Rem son las rutas donde se guardan arvhiso con todo el tráfico de datos enviados y recibidos del servidor.
carchivoxmlenviado = "d:\arbapet.txt"
carchivoxmlrecibido = "d:\arbaret.txt"
Dim ctoken As String
Dim ccadena As String
Dim numeroArchivo
numeroArchivo = 1
Dim ccuit As String
Rem es el cuit/usuario que se tramitó en arba
ccuit = "2011111112"
Dim cpassword As String
cpassword = "123456"
Dim crutalicencia As String
Rem es el archivo de licencia para el cuit del cliente y que incluya el servicio ARBA A122.
Rem tramitar en la plataforma https://sites.google.com/site/facturaelectronicax/inicio/misdatos/misdatos-servicios/misdatoslicenciarapida
crutalicencia = "D:\20111111112.lic"
Dim cidDDJJ As String
Rem id declaracion jurada obtenido código anterior o desde el portal
cidDDJJ = "12081"
Set mio = CreateObject("WSAFIPFE.misdatos")
If mio.iniciar(ccuit, "") Then
mio.tls = -1
mio.archivolicencia = crutalicencia
mio.ArchivoXMLEnviado = carchivoxmlenviado
mio.ArchivoXMLRecibido = carchivoxmlrecibido
bresultado = bresultado And mio.apiCargarPropiedad("LIMPIAR", "", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.URLMETODO", curl, 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.TIPOMETODO", "POST", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.client_id", "A122RServicios", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.client_secret", "44cqahkhERKtkkDGmcqrPApCMtez3XxT", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.username", ccuit, 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.password", cpassword, 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.grant_type", "password", 0, 0)
bresultado = bresultado And mio.apiCargarPropiedad("ARBA2025.DATOS.scope", "openid", 0, 0)
If bresultado Then
If mio.apiEjecutar("ARBA2025.OBTENERTICKET") Then
ccadena = mio.apiLeerPropiedad("ARBA2025", "obtenerticket", "", 0, 0)
MsgBox ("TICKET " + ccadena)
If mio.UltimoMensajeError = "" Then
Open crutaticket For Output As #numeroArchivo
Print #numeroArchivo, ccadena
Close #numeroArchivo
Else
MsgBox ("error " + mio.UltimoMensajeError)
End If
Else
MsgBox ("eror obtener ticket " + mio.UltimoMensajeError)
End If
Else
MsgBox ("error cargar propiedad " + mio.UltimoMensajeError)
End If
Else
MsgBox (mio.UltimoMensajeError + " fallo iniciar")
End If
Los datos de este servicio (tanto enviados como recibidos) son en formato json por lo que es recomendable tener claro como el método leerPropiedad ubica los datos de la respuesta (ver JSON mdpyv009) de igual forma el método cargarPropiedad.
La planilla de test mdenlacetest (al pie de página, debe descargarla para abrir la planilla localmente en excel) contiene hojas y macros que replica todos y cada uno de los métodos por lo que es imprescindible para ver como cada métodos, con sus campos de entrada y salida, es implementada desde la interfaz misdatos.gstorage2. La planilla puede ser ejecutada en un excel de 32 bits con las macros habilitadas (puede usar un motor de IA para que lo guie en lo pasos necesarios para habilitar las macro en su versión de excel) y en caso que no pudiera ejecutarlas aun puede usar el código de la macros para ver como todos los métodos son implementados en visual basic.