增值税号验证功能不起作用

时间:2015-06-06 21:16:17

标签: php oscommerce

我正在尝试编写增值税验证功能,该功能会检查增值税号码是否有效。

目前我已经有了这个

function tep_check_vatnum($countries_id, $vatnum) {
$country = tep_get_countries_with_iso_codes($countries_id);

$iso = $country['countries_iso_code_2'];

if($iso == "GB"){
    return false;
} else {

    $url = "http://isvat.appspot.com/$iso/$vatnum";

      $session = curl_init();

      curl_setopt($session, CURLOPT_URL, $url);
      // curl_setopt($session, CURLOPT_HTTPGET, 1); 
      // curl_setopt($session, CURLOPT_HEADER, false);
      // curl_setopt($session, CURLOPT_HTTPHEADER, array('Accept: application/xml', 'Content-Type: application/xml'));
      curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

      $response = curl_exec($session);
      //echo "<!-- NOTE:" . $response . "-->";
      curl_close($session);
      if($response == "true"){
        return true;
      } else {
        return false;
      }
   }
}

我正在使用http://isvat.appspot.com的服务正在运行,但它无效。

修改

嗯没有运气。如果不工作,它会一直给我一个错误,说瓮号无效。在创建帐户表单上,我已获得此代码。

<?php echo tep_draw_input_field('vatnum', '', 'class="input"') . '&nbsp;' . (tep_not_null(ENTRY_COMPANY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COMPANY_TEXT . '</span>': ''); ?>


if (is_numeric($country) == false) {
  $error = true;

  $messageStack->add('create_account', ENTRY_COUNTRY_ERROR);
} else {
    if(strlen($vatnum) != 0){
        if(is_numeric($vatnum) == false || tep_check_vatnum($country, $vatnum) == false){
            $error = true;

            $messageStack->add('create_account', "VAT Number is not a valid EU, non-UK VAT no.");
        }
    }

1 个答案:

答案 0 :(得分:0)

我猜调用cURL可能有问题。好消息是,你可能不需要。 ;)尝试一下:

function tep_check_vatnum($countries_id, $vatnum) {
    $country = tep_get_countries_with_iso_codes($countries_id);
    $iso = $country['countries_iso_code_2'];

    if($iso == "GB"){
        return false;
    } else {
        $url = "http://isvat.appspot.com/$iso/$vatnum";

        $context = stream_context_create(array(
            'http' => array(
                'proxy' => 'http://PROXY_IP:PROXY_PORT'
            ),
        ));

        $fp = fopen($url,'r',$context);
        $response = fgets($fp);
        fclose($fp);

        //echo "<!-- NOTE:" . $response . "-->";

        if($response == "true"){
            return true;
        } else {
            return false;
        }
    }
}

即使您没有启用cURL扩展程序,它也应该有效。

编辑:正如Michas所说,很难在不知道你的意思的情况下找到你的原始代码的问题&#34;没有工作&#34;。您可以通过声明error_reporting(E_ALL)curl_error($session)来尝试获取有关该问题的更多信息。 可能的原因:未正确安装或配置cURL,或者代理或防火墙阻止了您的请求。虽然我建议的代码会消除第一个代码,但第二个可能也可以使用它,具体取决于您的设置。

编辑2:添加了简单的代理配置