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
