countryCode = $cc; $this->vatNumber = $vat; } } class UI { /** * @var GladeXML */ var $glade ; function __construct() { $this->glade = new GladeXML('vies.glade'); $this->glade->signal_autoconnect_instance($this); } /** * Return a widget from the loaded Glade file * * @param GtkWidget $name */ function get_widget($name) { $ret = $this->glade->get_widget($name); return $ret; } function on_quit_action() { Gtk::main_quit(); } function on_pdc_about_activate() { $dl = $this->get_widget('dl_about'); $dl->show(); } function on_btn_clicked() { $sb = $this->get_widget('sb'); $cc = $this->get_widget('cb_country'); $cc = $cc->get_active_text(); $cc = substr($cc, 0, 2); $text_buffer = new GtkTextBuffer(); $text_buffer->set_text(''); $vat = $this->get_widget('en_vat'); $vat = $vat->get_text(); /* var_dump($cc); var_dump($vat); */ if (empty($cc) || empty($vat)) { $sb->push(0, 'You must choose a country and key in a VAT number.'); yield(); } else { $nb = $this->get_widget('nb'); $nb->set_current_page(0); $sb->push(0, 'Invoking VIES web service. Please wait.'); yield(); $ret = checkVat($cc, $vat); $sb->pop(0); yield(); if (!is_object($ret)) { // An error occurred $tv = $this->get_widget('tv'); $text_buffer->set_text($ret); $tv->set_buffer($text_buffer); } else { // We got a result print_r($ret); $val = $this->get_widget('lbCountryCodeVal'); $val->set_text($ret->countryCode); $val = $this->get_widget('lbVatNumberVal'); $val->set_text($ret->vatNumber); $val = $this->get_widget('lbRequestDateVal'); $val->set_text($ret->requestDate); $val = $this->get_widget('imgValid'); if ($ret->valid) { $val->set_from_stock(Gtk::STOCK_YES, Gtk::ICON_SIZE_LARGE_TOOLBAR); } else { $val->set_from_stock(Gtk::STOCK_NO, Gtk::ICON_SIZE_LARGE_TOOLBAR); } $val = $this->get_widget('lbNameVal'); $val->set_text(empty($ret->name) ? '(not returned)' : $ret->name); $val = $this->get_widget('lbAddressVal'); $val->set_text(empty($ret->address) ? '(not returned)' : $ret->address); $nb->set_current_page(1); } yield(); } } function run() { $w = $this->get_widget('w'); $w->show_all(); Gtk::main(); } } function yield() { while (Gtk::events_pending()) { Gtk::main_iteration(); } } /** * Make sure the code can proceed by checking requirements. * * - PHP version * - PHP-GTK extension * - SOAP extension * * @return void */ function checkRequirements() { $ext = get_loaded_extensions(); if (version_compare(PHP_VERSION, '5.0.0') < 0) { die('PHP >= 5.0 needed. Current version: '. PHP_VERSION); } if (!in_array('php-gtk', $ext)) { die('Missing PHP-GTK extension. Aborting.'); } if (!in_array('soap', $ext)) { die('Missing SOAP extension. Aborting.'); } } /** * Invoke the VIES service to check an EU VAT number * * @param string $cc Country Code * @param string $vat VAT number * * @return mixed */ function checkVat($cc, $vat) { // 2007 URL // $wsdl = 'http://ec.europa.eu/taxation_customs/vies/api/checkVatPort?wsdl'; // 2010 URL $wsdl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; $vies = new SoapClient($wsdl); /* var_dump($vies->__getFunctions()); var_dump($vies->__getTypes()); */ $nii = new checkVat($cc, $vat); try { $ret = $vies->checkVat($nii); } catch (SoapFault $e) { $ret = $e->faultstring; $regex = '/\{ \'([A-Z_]*)\' \}/'; $n = preg_match($regex, $ret, $matches); $ret = $matches[1]; $faults = array ( 'INVALID_INPUT' => 'The provided CountryCode is invalid or the VAT number is empty', 'SERVICE_UNAVAILABLE' => 'The SOAP service is unavailable, try again later', 'MS_UNAVAILABLE' => 'The Member State service is unavailable, try again later or with another Member State', 'TIMEOUT' => 'The Member State service could not be reached in time, try again later or with another Member State', 'SERVER_BUSY' => 'The service cannot process your request. Try again later.' ); $ret = $faults[$ret]; } return $ret; } checkRequirements(); $ui = new UI(); $ui->run();