Hola gente!, Primero y antes que nada...DISCULPAS!! (estoy en varias listas de programación)
En la intención de ayudar al colega, ofrecí mi colaboración sin darme cuenta que mi ayuda fue en un lenguaje similar a Fox pero no igual. Me di cuenta al leer éste correo... Soy programador independiente y si bien utilicé FOX (Gracias y saludos Rafael Copquin), termine eligiendo otro lenguaje xBase visual open free compatible con Clipper y muy parecido a Fox. Obviamente que si lo quieren copiar y pegar directamente en Fox, no va a funcionar. Lo importante son las direcciones URLs de la AFIP y saber que devuelve un Hash en formato json con el formato descripto en el PRG. Deberán saber cuales son las instrucciones que tiene Fox, para ‘levantar’ el Hash. Nuevamente disculpas, solo quería colaborar!!! De todas formas quedo a disposición de quien lo necesite. Sergio Castellari www.sdcinformatica.com.ar www.facebook.com/sdcsolucionesinformaticas From: Sergio . Sent: Thursday, April 28, 2016 5:27 PM To: GUFA List Member Subject: [GUFA] Responder: Consultar CUIT Idem.... no logro arrancar El 28 de abril de 2016, 17:08, PabloC <pablo.canon...@mug.org.ar> escribió: Y también faltan los include #include "HBCompat.ch" #INCLUDE 'hbxml.ch' #include "Fileio.ch" From: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] On Behalf Of Walter Comito Sent: jueves, 28 de abril de 2016 16:48 To: GUFA List Member <GUFA@mug.org.ar> Subject: [GUFA] Responder: Consultar CUIT NO SE QUE ESTOY HACIENDO MAL ME DA ERROR EN TODAS ESTAS LINEAS cCuit = "20160134322" lVer = .T. cConstancia = .T. 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:='' Gracias. Walter Cómito Analista de Sistemas MP 0397 C.P.C.I.P.C. › walter.com...@gmail.com wcom...@hotmail.com ' +54 9 351 494.4667 +54 9 3513.292.707 þ www.softram.com.ar Q Si no es necesario, no imprima este correo. Todos somos responsables por el cuidado del medio ambiente. NOTA DE CONFIDENCIALIDAD Este mensaje (y sus anexos) es confidencial y puede contener información de propiedad exclusiva de Walter Cómito (SRS Sistemas). Si usted ha recibido este mensaje por error, por favor comuníquelo inmediatamente a walter.com...@gmail.com y tenga la amabilidad de eliminarlo; no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. Muchas Gracias. De: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] En nombre de Ramon Giubi Enviado el: jueves, 28 de abril de 2016 12:41 Para: GUFA List Member Asunto: [GUFA] Responder: Consultar CUIT Buenisimo…esa info no la tenia y es mejor que la otra opción que estaba usando. Gracias. Saludos. Ramon Giubi De: GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] En nombre de Sergio D.Castellari Enviado el: miércoles, 27 de abril de 2016 12:53 Para: GUFA List Member Asunto: [GUFA] Responder: Consultar CUIT 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. Saludos, Sergio Castellari From: Ing César Luque Sent: Tuesday, April 26, 2016 11:27 PM To: GUFA List Member Subject: [GUFA] Responder: Consultar CUIT 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 Libre de virus. www.avast.com