Nahrát soubory do „/“
This commit is contained in:
65
README.md
Normal file
65
README.md
Normal 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
68
server.js
Normal 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}`);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user