![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Pués ni idea, están devolviendo error.
He hecho un trace: Cita:
|
|
#2
|
|||
|
|||
|
Edito:
Parece que eso que he puesto no es un error, es un aviso, pero es cierto que no devuelven nada. Esperemos que sea algo puntual. |
|
#3
|
|||
|
|||
|
Cita:
"http://ec.europa.eu/taxation_customs/vies/services/checkVatService" 'web para comprobacion de VATs "https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl" 'web para comprobacion de VATs pero solo consigo errores 400 o 405 si lo intento con GET en lugar de POST ![]() también lo estoy probando con el TIN, pero tampoco consigo avanzar.... "https://ec.europa.eu/taxation_customs/tin/services/checkTinService.wsdl" 'web para comprobacion de TINs lo he probado con y sin certificado, sin diferencia alguna ¿que estoy haciendo mal? |
|
#4
|
|||
|
|||
|
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. |
|
#5
|
|||
|
|||
|
Cita:
, yo tambien trabajo en visual foxpro ![]() |
|
#6
|
|||
|
|||
|
Los ejemplos son perfectos, era yo que la estaba liando al motar el xml!!!!
, ya he conseguido que me responda Muchas gracias por vuestra ayuda!!! |
|
#7
|
|||
|
|||
|
Le he pedido a la IA que me pase el código y me saca ésto.. Ni idea de si es correcto.
uses System.Net.HttpClient, System.Net.HttpClientComponent, System.JSON, System.SysUtils, System.Classes, Vcl.Dialogs; procedure CheckVAT; var CountryCode, VatNumber, Url: string; HttpClient: THTTPClient; Response: IHTTPResponse; JsonValue: TJSONValue; JSONObject: TJSONObject; IsValid: Boolean; Name, Address, ErrorMsg: string; begin CountryCode := 'LU'; // Ej. 'ES', 'DE', etc. VatNumber := '20260743'; Url := Format('https://ec.europa.eu/taxation_customs/vies/rest-api/ms/%s/vat/%s', [CountryCode, VatNumber]); HttpClient := THTTPClient.Create; try Response := HttpClient.Get(Url); if Response.StatusCode = 200 then begin JsonValue := TJSONObject.ParseJSONValue(Response.ContentAsString); if Assigned(JsonValue) then begin JSONObject := JsonValue as TJSONObject; IsValid := JSONObject.GetValue<Boolean>('isValid'); if IsValid then begin Name := JSONObject.GetValue<string>('name'); Address := JSONObject.GetValue<string>('address').Replace('\n', sLineBreak); ShowMessage('VAT válido.' + sLineBreak + 'Nombre: ' + Name + sLineBreak + 'Dirección: ' + Address); end else begin ErrorMsg := JSONObject.GetValue<string>('userError'); ShowMessage('VAT no válido. Mensaje: ' + ErrorMsg); end; end; end else ShowMessage('Error HTTP: ' + Response.StatusCode.ToString); except on E: Exception do ShowMessage('Excepción: ' + E.Message); end; HttpClient.Free; end; |
|
#8
|
||||
|
||||
|
Cita:
Estupendo |
|
#9
|
|||
|
|||
|
Puedes poner wl xml que pasas ahora, por que a mi me funcionaba antes y ya no
|
|
#10
|
|||
|
|||
|
Cita:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:Datos="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<soapenv:Body>
<Datos:checkVat>
<Datos:countryCode>DE</Datos:countryCode>
<Datos:vatNumber>813518999</Datos:vatNumber>
</Datos:checkVat>
</soapenv:Body>
</soapenv:Envelope>
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|