Nahrát soubory do „/“

This commit is contained in:
2025-06-30 09:10:16 +00:00
commit bb2fe7f2a5
2 changed files with 133 additions and 0 deletions

65
README.md Normal file
View File

@ -0,0 +1,65 @@
# VAT Number Validation API
This Node.js application provides an API interface to validate European VAT numbers using the official VIES SOAP service.
## Features
- Validate VAT numbers for any EU member state
- GET and POST HTTP support
- JSON responses with company name, address, and validity
## Installation
```bash
npm install express cors body-parser soap
```
## Usage
### Start the server
```bash
node server.js
```
### Endpoints
#### GET `/api/validate-vat`
**Query parameters:**
- `countryCode`: ISO 2-letter country code (e.g., SK, DE, FR)
- `vatNumber`: VAT number without country code
**Example:**
```
http://localhost:3000/api/validate-vat?countryCode=SK&vatNumber=1234567890
```
#### POST `/api/validate-vat`
**Request body (JSON):**
```json
{
"countryCode": "SK",
"vatNumber": "1234567890"
}
```
**Response:**
```json
{
"country": "SK",
"VAT": "1234567890",
"name": "Example Company",
"address": "Main Street 123, City, Country",
"valid": true
}
```
## License
MIT

68
server.js Normal file
View File

@ -0,0 +1,68 @@
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const soap = require('soap');
const app = express();
const PORT = 3000;
app.use(cors());
app.use(bodyParser.json());
const VIES_WSDL = 'https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
// GET endpoint for validating VAT via URL
app.get('/api/validate-vat', async (req, res) => {
const countryCode = req.query.countryCode;
const vatNumber = req.query.vatNumber;
if (!countryCode || !vatNumber) {
return res.status(400).json({ error: 'Missing countryCode or vatNumber in query parameters.' });
}
try {
const client = await soap.createClientAsync(VIES_WSDL);
const [result] = await client.checkVatAsync({ countryCode, vatNumber });
res.json({
country: countryCode.toUpperCase(),
VAT: vatNumber,
name: result.name || null,
address: result.address || null,
valid: result.valid
});
} catch (error) {
console.error('SOAP error:', error);
res.status(500).json({ error: 'Failed to validate VAT number.' });
}
});
// POST endpoint (original)
app.post('/api/validate-vat', async (req, res) => {
const { countryCode, vatNumber } = req.body;
if (!countryCode || !vatNumber) {
return res.status(400).json({ error: 'Missing required fields.' });
}
try {
const client = await soap.createClientAsync(VIES_WSDL);
const [result] = await client.checkVatAsync({ countryCode, vatNumber });
res.json({
country: countryCode.toUpperCase(),
VAT: vatNumber,
name: result.name || null,
address: result.address || null,
valid: result.valid
});
} catch (error) {
console.error('SOAP error:', error);
res.status(500).json({ error: 'Failed to validate VAT number.' });
}
});
// Start server
app.listen(PORT, () => {
console.log(`✅ Server is running at http://localhost:${PORT}`);
});