Я пытаюсь написать функцию проверки номера чана, которая проверяет номер чана, чтобы убедиться, что он действителен.
В настоящее время у меня есть это
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"') . ' ' . (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.");
}
}
Я думаю, может быть проблема с вызовом 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.
Изменить: Как сказал Михас, трудно найти проблему с вашим исходным кодом, не зная, что вы подразумеваете под «не работает». Вы можете попытаться получить больше информации о проблеме, указав error_reporting(E_ALL)
или же curl_error($session)
,
Возможные причины: cURL не установлен или настроен неправильно, или прокси-сервер или брандмауэр блокирует ваш запрос. В то время как код, который я предложил, устранит первый, второй может быть также примените его, в зависимости от ваших настроек.
Редактировать 2: Добавлена простая конфигурация прокси
Других решений пока нет …