13 use Psr\Log\LoggerInterface as PsrLogger;
89 return (
string)$this->scopeConfig->getValue(
90 StoreInformation::XML_PATH_STORE_INFO_COUNTRY_CODE,
91 ScopeInterface::SCOPE_STORE,
104 return (
string)$this->scopeConfig->getValue(
105 StoreInformation::XML_PATH_STORE_INFO_VAT_NUMBER,
106 ScopeInterface::SCOPE_STORE,
123 $isAutoGroupAssign = $this->scopeConfig->isSetFlag(
124 self::XML_PATH_CUSTOMER_GROUP_AUTO_ASSIGN,
125 ScopeInterface::SCOPE_STORE,
128 if (!$isAutoGroupAssign) {
134 $vatClassToGroupXmlPathMap = [
141 if (isset($vatClassToGroupXmlPathMap[$vatClass])) {
142 $groupId = (int)$this->scopeConfig->getValue(
143 $vatClassToGroupXmlPathMap[$vatClass],
144 ScopeInterface::SCOPE_STORE,
162 public function checkVatNumber($countryCode, $vatNumber, $requesterCountryCode =
'', $requesterVatNumber =
'')
167 'request_date' =>
'',
168 'request_identifier' =>
'',
169 'request_success' =>
false,
170 'request_message' =>
__(
'Error during VAT Number verification.'),
173 if (!extension_loaded(
'soap')) {
175 return $gatewayResponse;
178 if (!$this->
canCheckVatNumber($countryCode, $vatNumber, $requesterCountryCode, $requesterVatNumber)) {
179 return $gatewayResponse;
186 $requestParams[
'countryCode'] = $countryCode;
188 ? str_replace([
' ',
'-', $countryCode], [
'',
'',
''], $vatNumber)
189 : str_replace([
' ',
'-'], [
'',
''], $vatNumber);
190 $requestParams[
'vatNumber'] = $vatNumberSanitized;
191 $requestParams[
'requesterCountryCode'] = $requesterCountryCode;
192 $reqVatNumSanitized = $this->
isCountryInEU($requesterCountryCode)
193 ? str_replace([
' ',
'-', $requesterCountryCode], [
'',
'',
''], $requesterVatNumber)
194 : str_replace([
' ',
'-'], [
'',
''], $requesterVatNumber);
195 $requestParams[
'requesterVatNumber'] = $reqVatNumSanitized;
197 $result = $soapClient->checkVatApprox($requestParams);
199 $gatewayResponse->setIsValid((
bool)
$result->valid);
200 $gatewayResponse->setRequestDate((
string)
$result->requestDate);
201 $gatewayResponse->setRequestIdentifier((
string)
$result->requestIdentifier);
202 $gatewayResponse->setRequestSuccess(
true);
204 if ($gatewayResponse->getIsValid()) {
205 $gatewayResponse->setRequestMessage(
__(
'VAT Number is valid.'));
207 $gatewayResponse->setRequestMessage(
__(
'Please enter a valid VAT number.'));
209 }
catch (\Exception $exception) {
210 $gatewayResponse->setIsValid(
false);
211 $gatewayResponse->setRequestDate(
'');
212 $gatewayResponse->setRequestIdentifier(
'');
215 return $gatewayResponse;
226 return new \SoapClient(self::VAT_VALIDATION_WSDL_URL, [
'trace' => $trace]);
241 public function canCheckVatNumber($countryCode, $vatNumber, $requesterCountryCode, $requesterVatNumber)
243 return !(!is_string($countryCode)
244 || !is_string($vatNumber)
245 || !is_string($requesterCountryCode)
246 || !is_string($requesterVatNumber)
247 || empty($countryCode)
250 || empty($requesterCountryCode) && !empty($requesterVatNumber)
251 || !empty($requesterCountryCode) && empty($requesterVatNumber)
252 || !empty($requesterCountryCode) && !$this->
isCountryInEU($requesterCountryCode)
268 $isVatNumberValid = $vatValidationResult->getIsValid();
270 if (is_string($customerCountryCode)
271 && !empty($customerCountryCode)
276 }
elseif ($isVatNumberValid) {
282 if (!$vatValidationResult->getRequestSuccess()) {
298 $euCountries = explode(
300 $this->scopeConfig->getValue(self::XML_PATH_EU_COUNTRIES_LIST, ScopeInterface::SCOPE_STORE,
$storeId)
302 return in_array($countryCode, $euCountries);
getCustomerVatClass($customerCountryCode, $vatValidationResult, $store=null)
createVatNumberValidationSoapClient($trace=false)
elseif(isset( $params[ 'redirect_parent']))
__construct(ScopeConfigInterface $scopeConfig, PsrLogger $logger)
canCheckVatNumber($countryCode, $vatNumber, $requesterCountryCode, $requesterVatNumber)
const XML_PATH_CUSTOMER_VIV_DOMESTIC_GROUP
const VAT_VALIDATION_WSDL_URL
const VAT_CLASS_INTRA_UNION
const XML_PATH_CUSTOMER_VIV_INTRA_UNION_GROUP
const XML_PATH_CUSTOMER_VIV_ERROR_GROUP
const XML_PATH_CUSTOMER_VIV_INVALID_GROUP
const XML_PATH_CUSTOMER_GROUP_AUTO_ASSIGN
checkVatNumber($countryCode, $vatNumber, $requesterCountryCode='', $requesterVatNumber='')
getMerchantCountryCode($store=null)
getCustomerGroupIdBasedOnVatNumber($customerCountryCode, $vatValidationResult, $store=null)
isCountryInEU($countryCode, $storeId=null)
const XML_PATH_EU_COUNTRIES_LIST
getMerchantVatNumber($store=null)