public function validateVat($countryCode, $vatNumber, $requesterCountryCode = null, $requesterVatNumber = null)
{
if (!array_key_exists($countryCode, self::listEuropeanCountries())) {
throw new ViesException(sprintf('Invalid country code "%s" provided', $countryCode));
}
$vatNumber = self::filterVat($vatNumber);
if (!$this->validateVatSum($countryCode, $vatNumber)) {
$params = new \StdClass();
$params->countryCode = $countryCode;
$params->vatNumber = $vatNumber;
$params->requestDate = new \DateTime();
$params->valid = false;
return new CheckVatResponse($params);
}
$requestParams = array('countryCode' => $countryCode, 'vatNumber' => $vatNumber);
if ($requesterCountryCode && $requesterVatNumber) {
if (!array_key_exists($requesterCountryCode, self::listEuropeanCountries())) {
throw new ViesException(sprintf('Invalid requestor country code "%s" provided', $requesterCountryCode));
}
$requesterVatNumber = self::filterVat($requesterVatNumber);
$requestParams['requesterCountryCode'] = $requesterCountryCode;
$requestParams['requesterVatNumber'] = $requesterVatNumber;
}
try {
$response = $this->getSoapClient()->__soapCall('checkVatApprox', array($requestParams));
} catch (SoapFault $e) {
$message = sprintf('Back-end VIES service cannot validate the VAT number "%s%s" at this moment. ' . 'The service responded with the critical error "%s". This is probably a temporary problem. ' . 'Please try again later.', $countryCode, $vatNumber, $e->getMessage());
throw new ViesServiceException($message);
}
return new CheckVatResponse($response);
}