![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#27
|
|||
|
|||
|
Buenos días, ya os he comentado en alguna ocasión que no trabajo en Delphi sino con Visual Foxpro, pero estoy en estos foros por su calidad y buena orientación. Me habéis sacado de apuros en muchas ocasiones.
Para la consulta de VATs yo tengo este proceso en Visual Foxpro que funciona, pero no se pasarlo a Delphi. Lo adjunto por si alguno sabe. Los datos de prueba que adjunto son válidos y devuelve los datos correctos. LOCAL lcCountryCode, lcUatNumber, lcUrl, loHTTP, lcResponseText, loXML, lcValid, lcName, lcAddress * lcCountryCode = "LU" && Código de país (ej. ES para España, DE para Alemania) lcVatNumber = "20260743" && Número de IVA sin el prefijo del país *!* Construir la URL para la API REST de VIES lcUrl = "https://ec.europa.eu/taxation_customs/vies/rest-api/ms/" + lcCountryCode + "/vat/" + lcVatNumber *!* Crear el objeto MSXML2.ServerXMLHTTP para la petición HTTP loHTTP = CREATEOBJECT("MSXML2.ServerXMLHTTP") IF TYPE("loHTTP") = "O" AND NOT ISNULL(loHTTP) TRY loHTTP.OPEN("GET", lcUrl, .F.) && .F. para síncrono, .T. para asíncrono loHTTP.SEND() lcResponseText = loHTTP.RESPONSETEXT *!* Procesar la respuesta JSON (la API REST devuelve JSON) *!* En VFP, el parseo de JSON no es nativo, necesitarás una función o librería de terceros *!* para parsear JSON, o un procesamiento de cadenas si la respuesta es simple. *!* Ejemplo simplificado de cómo buscar "valid" en el texto: * Si la respuesta es JSON, podrías tener algo como: {"countryCode":"ES","vatNumber":"A28014878","requestDate":"2025-07-04+02:00","valid":true,"name":"MARCADONA","address":"CALLE DE LA CERA, 123\nBARCELONA"} IF ATC(["isValid" : true], lcResponseText) > 0 lcValid = .T. MESSAGEBOX("VAT válido.", 64, "Resultado VIES") * Extraer nombre y dirección (requiere parseo JSON más sofisticado o manejo de cadenas) * Por ejemplo, para un parsing básico de "name": lnPosName = ATC(["name" : "], lcResponseText) IF lnPosName > 0 lcTemp = SUBSTR(lcResponseText, lnPosName + LEN(["name" : "])) lnEndName = AT('"', lcTemp) lcName = IIF(lnEndName > 0, SUBSTR(lcTemp, 1, lnEndName - 1), "") MESSAGEBOX("Nombre: " + lcName, 64, "Datos VIES") ENDIF * Y similar para "address" lnPosAddress = ATC(["address" : "], lcResponseText) IF lnPosAddress > 0 lcTemp = SUBSTR(lcResponseText, lnPosAddress + LEN(["address" : "])) lnEndAddress = AT('"', lcTemp) lcAddress = IIF(lnEndAddress > 0, SUBSTR(lcTemp, 1, lnEndAddress - 1), "") lcAddress = STRTRAN(lcAddress, "\n", CHR(13)+CHR(10)) && Reemplazar saltos de línea JSON por CR/LF MESSAGEBOX("Dirección: " + lcAddress, 64, "Datos VIES") ENDIF ELSE lcValid = .F. IF ATC(["isValid" : false], lcResponseText) > 0 lnPosName = ATC(["userError" : "], lcResponseText) IF lnPosName > 0 lcTemp = SUBSTR(lcResponseText, lnPosName + LEN(["userError" : "])) lnEndName = AT('"', lcTemp) lcName = IIF(lnEndName > 0, SUBSTR(lcTemp, 1, lnEndName - 1), "") MESSAGEBOX("VAT: " + lcName, 64, "Datos VIES") ENDIF else MESSAGEBOX("VAT no válido o error en la consulta.", 48, "Resultado VIES") Endif IF !EMPTY(lcResponseText) _cliptext = lcResponseText Endif ENDIF CATCH TO loException MESSAGEBOX("Error al conectar o procesar: " + loException.MESSAGE, 16, "Error VIES") ENDTRY ELSE MESSAGEBOX("No se pudo crear el objeto MSXML2.ServerXMLHTTP. Asegúrate de que esté registrado.", 16, "Error") ENDIF RELEASE loHTTP Espero que os sirva. Un saludo. |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Verificación de RUC Peru. | F3niX | Varios | 7 | 26-05-2017 04:36:50 |
| Rutina de verificacion de campos | JosepMiquel | Varios | 3 | 08-12-2007 19:43:19 |
| Búsqueda sin imagen de verificación | kuan-yiu | La Taberna | 8 | 13-11-2007 18:22:10 |
| Verificación de los datos grabados en CD o DVD | rretamar | API de Windows | 24 | 16-01-2007 06:32:47 |
| Verificación de dni | luna | Varios | 4 | 29-05-2004 21:33:46 |
|