40 protected $_sWsdl =
'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
58 $oCheckVat =
new stdClass();
79 protected function _parseError($sErrorMsg)
81 if (!$sErrorMsg || $sErrorMsg ==
'INVALID_INPUT') {
83 $oEx =
oxNew(
'oxInputException');
84 $oEx->setMessage(
'VAT_MESSAGE_' . ($sErrorMsg ? $sErrorMsg :
'ID_NOT_VALID'));
89 $oEx =
oxNew(
'oxConnectionException');
91 $oEx->setMessage(
'VAT_MESSAGE_' . $sErrorMsg);
109 if (isset(self::$_aVatCheckCache[$sCompVatId])) {
110 if (
true === self::$_aVatCheckCache[$sCompVatId]) {
113 if (is_string(self::$_aVatCheckCache[$sCompVatId])) {
114 $this->_parseError(self::$_aVatCheckCache[$sCompVatId]);
120 $oCheckVat =
new stdClass();
121 $oCheckVat->countryCode = substr($sCompVatId, 0, 2);
122 $oCheckVat->vatNumber = substr($sCompVatId, 2);
126 self::$_aVatCheckCache[$sCompVatId] = $sErrorMsg;
127 $this->_parseError($sErrorMsg);
130 return self::$_aVatCheckCache[$sCompVatId] =
true;
147 $sLogMessage =
"Warning: $sErrStr in $sErrFile on line $iErrLine";
150 $oEx =
oxNew(
"oxException");
151 $sLogFileName = $oEx->getLogFileName();
167 if ($this->_blServiceIsOn === null) {
168 $this->_blServiceIsOn = class_exists(
'SoapClient') ?
true :
false;
169 if ($this->_blServiceIsOn) {
171 $this->_blServiceIsOn = $rFp !==
false;
172 if ($this->_blServiceIsOn) {
174 while (!feof($rFp)) {
175 $sWsdl .= fread($rFp, 8192);
181 $oDomDocument =
new DOMDocument();
182 $oDomDocument->loadXML($sWsdl);
185 $this->_blServiceIsOn =
false;
209 ini_set(
'default_socket_timeout', 5);
212 set_error_handler(array($this,
'catchWarning'), E_WARNING);
217 $oSoapClient =
new SoapClient($this->
getWsdlUrl(), array(
"connection_timeout" => 5));
219 $oRes = $oSoapClient->checkVat($oCheckVat);
221 }
catch (SoapFault $e) {
223 if ($this->
getError() ==
"SERVER_BUSY") {
224 usleep(self::BUSY_RETRY_WAITUSEC);
229 }
while (0 < $iTryMoreCnt--);
232 restore_error_handler();
234 return (
bool) $oRes->valid;
236 $this->
setError(
"SERVICE_UNREACHABLE");
252 if ($this->_sError) {
253 $sRegex =
'/\{ \'([A-Z_]*)\' \}/';
254 $n = preg_match($sRegex, $this->_sError, $aMatches);
255 $sError = ($aMatches[1]) ? $aMatches[1] :
'SERVICE_UNAVAILABLE';
270 $this->_sWsdl = $sWsdl;