此元件使用歐盟委員會 (EC) 增值稅資訊交換系統 (VIES),使用 PHP 和 Composer 來驗證和驗證歐盟的增值稅註冊號碼。
Vies
類別提供對 VIES 進行 SOAP 呼叫的功能,並傳回包含以下資訊的CheckVatResponse
物件:
歐盟委員會網站上指出:
要在不收取增值稅的情況下進行共同體內供應,您應該確保您向其提供貨物的人是另一個成員國的納稅人,並且相關貨物已經離開或將離開您的成員國到另一個成員國多發性硬化症。增值稅號碼也應包含在發票中。
更多資訊請上http://ec.europa.eu/taxation_customs/vies/faqvies.do#item16
2018 年 5 月 25 日,《一般資料保護規範》(GDPR)成為所有 28 個歐洲成員國的法律。此 VIES 服務包是否符合 GDPR?
簡而言之:是的。
更長的答案是,此 VIES 包僅與歐盟委員會提供的增值稅 ID 驗證服務交互。增值稅驗證在歐洲國家是強制性的,因此該服務被允許作為合法性和法律依據。請閱讀歐洲 DPO-3816.1 中的更多相關資訊。本服務本身不儲存任何數據,也不收集超出法律嚴格要求和 EC VIES 服務提供的資訊的資訊。
當您在自己的專案中實施此服務包時,請確保僅儲存增值稅 ID、驗證時間戳記、驗證結果以及可選的 EC VIES 服務提供的給定驗證 ID 。
請閱讀發行說明以了解詳細資訊。
這個項目在 Packagist 上!
若要安裝最新的穩定版本,請使用composer require dragonbe/vies
。
要安裝特定版本(例如2.2.0),只需將其添加到上面的命令中,例如composer require dragonbe/vies:2.2.0
這是一個使用範例,您可以立即在命令列(或 cron、worker 或其他)中執行,因為這很可能是您最常見的用例。
use DragonBe Vies Vies ;
use DragonBe Vies ViesException ;
use DragonBe Vies ViesServiceException ;
require_once dirname ( __DIR__ ) . ' /vendor/autoload.php ' ;
$ vies = new Vies ();
if ( false === $ vies -> getHeartBeat ()-> isAlive ()) {
echo ' Service is not available at the moment, please try again later. ' . PHP_EOL ;
exit ( 1 );
}
$ vies = new Vies ();
$ options = [
' proxy_host ' => ' 127.0.0.1 ' ,
' proxy_port ' => ' 8888 ' ,
];
$ vies -> setOptions ( $ options );
$ heartBeat = new DragonBe Vies HeartBeat ( ' tcp:// ' . $ options [ ' proxy_host ' ], $ options [ ' proxy_port ' ]);
$ vies -> setHeartBeat ( $ heartBeat );
$ isAlive = $ vies -> getHeartBeat ()-> isAlive ();
現在我們知道服務處於活動狀態,我們可以開始驗證增值稅 ID
$ vatResult = $ vies -> validateVat (
' BE ' , // Trader country code
' 0203430576 ' , // Trader VAT ID
' BE ' , // Requester country code
' 0811231190 ' // Requester VAT ID
);
$ vatResult = $ vies -> validateVat (
' BE ' , // Trader country code
' 0203430576 ' , // Trader VAT ID
' BE ' , // Requester country code
' 0811231190 ' // Requester VAT ID
' B-Rail ' , // Trader name
' NV ' , // Trader company type
' Frankrijkstraat 65 ' , // Trader street address
' 1060 ' , // Trader postcode
' Sint-Gillis ' // Trader city
);
最重要的功能是查看增值稅 ID 是否有效
echo ( $ vatResult -> isValid () ? ' Valid ' : ' Not valid ' ) . PHP_EOL ;
// Result: Valid
echo ' Identifier: ' . $ vatResult -> getIdentifier () . PHP_EOL ;
// Result: Identifier: WAPIAAAAWaXGj4Ra
注意:VIES 服務返回日期和時區,但不返回時間
echo ' Date and time: ' . $ vatResult -> getRequestDate ()-> format ( ' r ' ) . PHP_EOL ;
// Result: Date and time: Sat, 31 Aug 2019 00:00:00 +0200
echo ' Company name: ' . $ vatResult -> getName () . PHP_EOL ;
// Result: Company name: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
echo ' Company address: ' . $ vatResult -> getAddress () . PHP_EOL ;
// Result: Company address: FRANKRIJKSTRAAT 56
1060 SINT - GILLIS ( BIJ - BRUSSEL )
echo ' Trader name match: ' . $ vatResult -> getNameMatch () . PHP_EOL ;
// Result: Trader name match:
echo ' Trader company type match: ' . $ vatResult -> getCompanyTypeMatch () . PHP_EOL ;
// Result: Trader company type match:
echo ' Trader street match: ' . $ vatResult -> getStreetMatch () . PHP_EOL ;
// Result: Trader street match:
echo ' Trader postcode match: ' . $ vatResult -> getPostcodeMatch () . PHP_EOL ;
// Result: Trader postcode match:
echo ' Trader city match: ' . $ vatResult -> getCityMatch () . PHP_EOL ;
// Result: Trader city match:
use DragonBe Vies Vies ;
use DragonBe Vies ViesException ;
use DragonBe Vies ViesServiceException ;
require_once dirname ( __DIR__ ) . ' /vendor/autoload.php ' ;
$ vies = new Vies ();
$ company = [
' country_code ' => ' BE ' ,
' vat_id ' => ' 0203430576 ' ,
' trader_name ' => ' B-Rail ' ,
' trader_company_type ' => ' NV ' ,
' trader_street ' => ' Frankrijkstraat 65 ' ,
' trader_postcode ' => ' 1060 ' ,
' trader_city ' => ' Sint-Gillis ' ,
];
try {
$ vatResult = $ vies -> validateVat (
$ company [ ' country_code ' ], // Trader country code
$ company [ ' vat_id ' ], // Trader VAT ID
' BE ' , // Requester country code (your country code)
' 0811231190 ' , // Requester VAT ID (your VAT ID)
$ company [ ' trader_name ' ], // Trader name
$ company [ ' trader_company_type ' ], // Trader company type
$ company [ ' trader_street ' ], // Trader street address
$ company [ ' trader_postcode ' ], // Trader postcode
$ company [ ' trader_city ' ] // Trader city
);
} catch ( ViesException $ viesException ) {
echo ' Cannot process VAT validation: ' . $ viesException -> getMessage ();
exit ( 2 );
} catch ( ViesServiceException $ viesServiceException ) {
echo ' Cannot process VAT validation: ' . $ viesServiceException -> getMessage ();
exit ( 2 );
}
echo ( $ vatResult -> isValid () ? ' Valid ' : ' Not valid ' ) . PHP_EOL ;
echo ' Identifier: ' . $ vatResult -> getIdentifier () . PHP_EOL ;
echo ' Date and time: ' . $ vatResult -> getRequestDate ()-> format ( ' d/m/Y H:i ' ) . PHP_EOL ;
echo ' Company name: ' . $ vatResult -> getName () . PHP_EOL ;
echo ' Company address: ' . $ vatResult -> getAddress () . PHP_EOL ;
echo ' Trader name match: ' . $ vatResult -> getNameMatch () . PHP_EOL ;
echo ' Trader company type match: ' . $ vatResult -> getCompanyTypeMatch () . PHP_EOL ;
echo ' Trader street match: ' . $ vatResult -> getStreetMatch () . PHP_EOL ;
echo ' Trader postcode match: ' . $ vatResult -> getPostcodeMatch () . PHP_EOL ;
echo ' Trader city match: ' . $ vatResult -> getCityMatch () . PHP_EOL ;
echo PHP_EOL ;
當您執行此命令時,您將得到以下結果:
Valid
Identifier: WAPIAAAAWaYR0O8D
Date and time: 21/10/2018 02:00
Company name: NV OR NATIONALE MAATSCHAPPIJ DER BELGISCHE SPOORWEGEN
Company address: FRANKRIJKSTRAAT 56
1060 SINT-GILLIS (BIJ-BRUSSEL)
Trader name match:
Trader company type match:
Trader street match:
Trader postcode match:
Trader city match:
以下是包含此 VIES 包的產品或項目的列表
如果您有一個產品或專案正在使用此軟體包,並且您希望對您的工作進行一些歸因,請給我發送電子郵件或在 Twitter 或 Facebook 上聯繫我。
如果您喜歡 Docker 容器,現在可以使用為此目的設計的容器。
docker run --rm -d -p 8000:18080 dragonbe/vies-web
將瀏覽器指向 localhost:8000 以使用 Web 介面驗證增值稅。
對於希臘,國際國家 ISO 代碼是GR ,但對於增值稅 IDN,他們使用前綴EL 。感謝 Johan Wilfer 的報告。
自 2021 年 1 月 1 日起,英國不再是歐盟成員,因此,歐盟委員會提供的 VIES 服務不再驗證英國的增值稅 ID。但有一個例外,即北愛爾蘭 (XI) 的增值稅 ID 可以使用此程式庫和 EC VIES 服務進行驗證。
DragonBeVies 是根據 MIT 許可證發布的。有關詳細信息,請參閱捆綁的許可證文件。