Hola Oscar,

Abajo, transcribo la rutina completa que utilizo, tanto para consultar CUITs, 
como DNI y también ‘generar’ las consultas de Inscripción en formato PDF.

Aclaración: En la actualidad no utilizo VisualFox para programar, utilizo otro 
lenguaje muy similar (viene desde Clipper) llamado ooHG, que es gratuito y de 
código fuente abierto. No utilizo ninguna librería extra. Seguramente para 
utilizarlo en VF, deberán adaptar algo de código.
Estoy en esta lista, por que mis comienzos fueron con VisualFox (gracias Rafael 
Copquin), y además siempre aprendo algo, hay gente con muchísimo conocimiento.

Saludos,
Sergio Castellari
www.sdcinformatica.com.ar
www.facebook.com/sdcsolucionesinformaticas

Hola Gente,



Aqui va como lo hago:



*------------------------------------------------------------------------------*

* ConsultaPadronAFIP()                                                         *

*     Recibe: cCuit --------> String con el CUIT/DNI a consultar               *

*             lVer == .t. --> Visulualiza datos en pantalla                    *

*                     .f. --> Solo obtener la data (por Default)               *

*      cConstancia == .t. --> Solicita Constancia (PDF) del CUIT indicado      *

*                     .f. --> NO solicita Constancia (por Default)             *

* Nota: Si cCUIT es un CUIT y lVer == .f. , la función carga un array privado  *

*       llamado: aPadronAFIP[]                                                 
* 

*---------------------------------------------------------------- 23-09-2015 
--*                                                                            

Function ConsultaPadronAFIP(cCuit,lVer,cConstancia)

Local    cCUIT_URL       :='https://soa.afip.gob.ar/sr-padron/v2/persona/'

Local cDNI_URL        :='https://soa.afip.gob.ar/sr-padron/v2/personas/'

Local cConstancia_URL :='https://soa.afip.gob.ar/sr-padron/v1/constancia/'

Local oPadron, cTip:='', cResp:='', nLen:=0, hRes, cMsg:='', hData, hDir, 
aDNIs:={}

Local nCuit:='99999999999', cDoc:='Sin identificar', cEstado:='', cNombre:='', 
cTipDoc:='', nDoc:=''

Local cDirec:='', cLocal:='', cCP:='', nProv:='00', cTipo:=''



Default lVer        to .f.

Default cConstancia to .f.



#include "HBCompat.ch"

#INCLUDE 'hbxml.ch'                                                             
                                                                                
                                                                                
                                  

#include "Fileio.ch"



*** Filtro el String de CUIT/DNI ***

cCuit:=AllTrim(StrTran(cCuit,'-',''))

If Len(cCuit)<6 .or. Len(cCuit)>11

  MsgStop('CUIT/CUIL/DNI: '+cCuit+chr(13)+'erroneo !!!','Verifique...') ; 
Return .f.

EndIf

If Len(cCuit)<11

  cTip:='D'

Else

  cTip:='C'

EndIf



*** Si solicita Constancia de Inscripción ***

If cTip == 'C' .and. cConstancia == .t.

  URLInternet(cConstancia_URL + cCuit) ; Return .t.

EndIf



*** Creo y Válido el objeto de conexión ***

oPadron:=Win_OleCreateObject('MSXML2.XMLHTTP')

If Empty(oPadron)

  oPadron:=Nil ; MsgExclamation('NO se pudo acceder al Servidor de la 
AFIP','Verificaciones de conexión...') ; Return .f.

EndIf



*** Consulto al Servidor de la AFIP ***

TRY                                                                             
                                                                                
                                                                                
                                      

  If cTip == 'C'   //CUIT...

    If cConstancia == .f.

          oPadron:Open('GET', cCUIT_URL + cCuit, .F.)       ; oPadron:Send()

        Else

      *MsgStop(cConstancia_URL + cCuit)

          *oPadron:Open('GET', cConstancia_URL + cCuit, .F.)

      *oPadron:setRequestHeader( 'Accept', 
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' )

      *oPadron:setRequestHeader( 'Accept-Language', 
'es-AR,es;q=0.8,en-US;q=0.5,en;q=0.3' )

      *oPadron:setRequestHeader( 'Accept-Encoding', 'gzip, deflate' )

      *oPadron:setRequestHeader( 'Content-Type', 'application/octet-stream' )

      *oPadron:setRequestHeader( 'Connection', 'Keep-Alive' )

      *oPadron:Send()

        EndIf

    ElseIf cTip == 'D'   //DNI...

      oPadron:Open('GET', cDNI_URL + cCuit, .F. ) ; oPadron:Send()

    Else

      oPadron:=Nil ; MsgStop('¡¡ CUIT/DNI no válido !! ','Verifique...') ; Break

    EndIf

CATCH

  oPadron:=Nil ; MsgStop('¡¡ ERROR !! '+Chr(13)+'Controle conexión a Internet y 
Reintente...','Verifique conexión...') ; Return .f.

END

cResp:=oPadron:ResponseText



*** Si el status es diferente a 200, ocurrió algún error de conectividad con el 
WS ***

If oPadron:Status <> 200

  MsgStop('¡¡ ERROR !! '+Chr(13)+'Status:'+AllTrim(Str(oPadron:Status))+' 
'+oPadron:StatusText,'Error Enlace AFIP...')

  oPadron:=Nil ; Return .f.

EndIf

*** Solicito una Constancia de AFIP ***

*If cTip == 'C' .and. cConstancia == .t.

*  fh:=fcreate('ok-constancia-20227327406-2015-09-23.pdf')

*  if fh<0

*    Ferase(GetCurrentFolder()+'\ok-constancia-20227327406-2015-09-23.pdf')

*    msgexclamation("Handle create?",'1')

*    return .f.

*  endif

*  fwrite(fh, cResp)

*  fclose(fh)

*  MsgStop('ok-constancia-20227327406-2015-09-23.pdf fue creado')

*  oPadron:=Nil ; Return .t.

*EndIf



*** Grabo la Respuesta ***

MemoWrit('ConsultaPadron.txt',cResp)



*** Visualizo en pantalla la Respuesta ***

*MsgStop(cResp,'Respuesta AFIP...')   //ACTIVAR para hacer DEBUGGER!!!!



*** Decodifico jSon (java) ***

nLen:=HB_JsonDecode(cResp , @hRes)                          //AFIP devuelve un 
archivo en formato Java jSON

If !HB_HGET(hRes,'success')

  oPadron:=Nil ; MsgStop('¡¡ ERROR !!. NO existe persona Fisica/Juridica con 
ese N°...','Verifique CUIT/CUIL/DNI...') ; Return .f.

EndIf  



If cTip == 'C'  //Ingreso CUIT...

  *** Leo el Hash DATA ***

  hData:=HB_HGETDEF(hRes,'data',.f.)

  If Valtype(hData) == 'H'

    nCuit  :=AllTrim(Str(HB_HGETDEF(hData,'idPersona',99999999999)))            
//N° de CUIT

    cDoc   :=HB_HGETDEF(hData,'tipoClave','Sin identificar')                    
//CUIT/DNI/CUIL

    cTipo  :=HB_HGETDEF(hData,'tipoPersona','')                                 
//ACTIVO o INACTIVO

    cEstado:=HB_HGETDEF(hData,'estadoClave','')                                 
//FISICA o JURIDICA

    cNombre:=HB_HGETDEF(hData,'nombre','')                                      
//Apellido y Razon Social

    cTipDoc:=HB_HGETDEF(hData,'tipoDocumento','')                               
//DNI, LC, etc

    nDoc   :=HB_HGETDEF(hData,'numeroDocumento','')                             
//N° de documento

    *** Leo el Hash DOMICILIOFISCAL ***

    hDir:=HB_HGETDEF(hData,'domicilioFiscal',.f.)

    If Valtype(hDir) == 'H'

      cDirec:=HB_HGETDEF(hDir,'direccion','')                                   
//Calle, Nro. Piso, etc

      cLocal:=HB_HGETDEF(hDir,'localidad','')                                   
//Localidad (no se nombra cuando es Capital)

      cCP   :=HB_HGETDEF(hDir,'codPostal','')                                   
//Codigo postal (8 caracteres)

      nProv :=AllTRim(Strzero(HB_HGETDEF(hDir,'idProvincia',0),2))              
//N2 Obtener descripciones a través del recurso /parametros/v1/provincias

    Endif

  EndIf

  If lVer

    *** Elijo SOLO ver los datos de consulta ***

    cMsg:='Razon Social: '+cNombre+' ['+cEstado+']'+chr(13)

    cMsg+=cDoc+' '+nCuit+' ['+cTipo+']'+chr(13)

    cMsg+='Doc: '+cTipDoc+' '+nDoc+chr(13)

    cMsg+='Domicilio: '+cDirec+chr(13)

    cMsg+=cLocal+' CP:'+cCP

    MsgStop(cMsg,'Respuesta servidor AFIP...')

  Else

    *** Cargo array privado aPadronAFIP ***

    aPadronAFIP[1] :=nCuit 

    aPadronAFIP[2] :=cDoc

    aPadronAFIP[3] :=cTipo

    aPadronAFIP[4] :=cEstado

    aPadronAFIP[5] :=cNombre

    aPadronAFIP[6] :=cTipDoc

    aPadronAFIP[7] :=nDoc

    aPadronAFIP[8] :=cDirec

    aPadronAFIP[9] :=cLocal

    aPadronAFIP[10]:=cCP

    aPadronAFIP[11]:=nProv

  EndIf

Else   //Ingreso DNI

  *** Leo el Hash DATA ***

  hData:=HB_HGETDEF(hRes,'data',.f.)

  If Valtype(hData) == 'A'

    cMsg:='CUIT/CUIL:'+chr(13)

    For n=1 to Len(hData)

      cMsg+=AllTrim(Str(hData[n]))+chr(13)

    Next

    MsgStop('El DNI ingresado generó:'+chr(13)+chr(13)+cMsg+chr(13)+;

            'Puede utilizar este CUIT/CUIL para consultar datos 
fiscales','Respuesta servidor AFIP...')

  ELse

    MsgStop('El DNI ingresado generó un ERROR !!!','Respuesta servidor AFIP...')

  EndIf

EndIf

*HB_HGET( <hsTable>, <Key> ) -> <Value> 

*hb_hGetDef( aHash, Key, DefaultVal )

Return .t.













From: Oscar Stasiulevicius 
Sent: Saturday, June 11, 2016 2:20 PM
To: GUFA List Member 
Subject: [GUFA] Responder: Consultar CUIT

Sergio


aun no lo probe, pero vi en el mismo hilo de mails que no les funciono, y 
esperaban las librerias que se referenciaban en el codigo


Gracias!


El 11 de junio de 2016, 11:02, Sergio D.Castellari <[email protected]> 
escribió:

  Hola Oscar,

  No requiere de ninguna libreria especial. Fijate en la lista, que postee todo 
el codigo que utilizo.

  Saludos,
  Sergio



  From: Oscar Stasiulevicius 
  Sent: Saturday, June 11, 2016 10:46 AM
  To: GUFA List Member 
  Subject: [GUFA] Responder: Consultar CUIT

  Sergio, estas consultas serian para los "mismos" cuits, clientes/proveedores 
habituales?


  Atte.

  Oscar


  El 26 de abril de 2016, 23:27, Ing César Luque <[email protected]> escribió:

    Sergio

    Aguardamos tu colaboraciòn.

    Saludos.- 

    Cèsar Luque 

    From: Sergio Castellari -mvl- 
    Sent: Tuesday, April 26, 2016 6:38 PM
    To: GUFA List Member 
    Subject: [GUFA] Responder: Consultar CUIT

    Siiii se puede.  AFIP tiene un ws para consultar el estado. Incluso podes 
obtener el pdf de constancia de inscripción. 
    Ahora no estoy con la compu,  pero si me acuerdo cuando llegue,  te paso 
como lo hago.
    Además,  también podes enviar un dni y obtener el cuit desde la afip 

    Saludos, Sergio Castellari 

    Enviado desde mi teléfono inteligente Sony Xperia™



    ---- Sergio . escribió ----


    Amigos, hay forma de consultar ONLINE si un CUIT de un cliente está en 
regla con AFIP ?



    Saludos




Responder a