Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Автоматическое обновление курса валют


RedBaron

Recommended Posts

В 12.11.2017 в 14:19, chukcha сказал:

Какая такая же?

Вы установили фикс? Или теперь весь народ ломанется получать курсы с одного аккаунта?

не, проблема была с почтой, уже решил

Надіслати
Поділитися на інших сайтах


Ребята,

У меня теперь все как бы работает, но валюту RUB надо пинать вручную, иначе не обновляется даже в течение 2 дней. Хотя в настройках OC стоит галка "автоматическое обновление". Внимание, этот код вам as is не подойдет, так так у меня специфически настройки валют:

 

	public function refresh($force = false) {
		$currency_data = array();

		if ($force) {
//			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE 1 ");
		} else {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
		}
		foreach ($query->rows as $result) {
if ($result['code'] == 'RUB') {
			$response = file_get_contents('https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=USD&to_currency=RUB&apikey=YOURKEYHERE');
			
			$json = json_decode($response);
			
			if (@is_null($json->{"Error Message"})) {
				$value = (float) $json->{"Realtime Currency Exchange Rate"}->{"5. Exchange Rate"};
				$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . $value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($result['code']) . "'");
			}
}
		}

		$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = NOW() WHERE code = 'USD'");

		$this->cache->delete('currency');
	}

API работает верно и все отдает как лапочка (с верным кодом клиента). Дело не в нем, а в механизме (логике) запуска автооапдейта курса. Не подскажете в чем может быть дело?

Змінено користувачем Mysha
Надіслати
Поділитися на інших сайтах


  • 5 months later...
В 14.11.2017 в 12:09, Mysha сказал:

Ребята,

У меня теперь все как бы работает, но валюту RUB надо пинать вручную, иначе не обновляется даже в течение 2 дней. Хотя в настройках OC стоит галка "автоматическое обновление". Внимание, этот код вам as is не подойдет, так так у меня специфически настройки валют:

 


	public function refresh($force = false) {
		$currency_data = array();

		if ($force) {
//			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE 1 ");
		} else {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
		}
		foreach ($query->rows as $result) {
if ($result['code'] == 'RUB') {
			$response = file_get_contents('https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=USD&to_currency=RUB&apikey=YOURKEYHERE');
			
			$json = json_decode($response);
			
			if (@is_null($json->{"Error Message"})) {
				$value = (float) $json->{"Realtime Currency Exchange Rate"}->{"5. Exchange Rate"};
				$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . $value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($result['code']) . "'");
			}
}
		}

		$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = NOW() WHERE code = 'USD'");

		$this->cache->delete('currency');
	}

API работает верно и все отдает как лапочка (с верным кодом клиента). Дело не в нем, а в механизме (логике) запуска автооапдейта курса. Не подскажете в чем может быть дело?

правильный код

 

 

    public function refresh($force = false) {
    
            $currencies = array();
            
            if ($force) {
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
            } else {
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
            }
            
            foreach ($query->rows as $result) {
                $currencies[$result['code']] = $result['value'];
            }    

            if ($currencies) {

                $xml_data = $this->cache->get('currencies');

                if (empty($xml_data)) {
                
                    $curl = curl_init();
                    
                    curl_setopt($curl, CURLOPT_URL, 'http://www.cbr.ru/scripts/XML_daily.asp');
                    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                    
                    $content = curl_exec($curl);
                    
                    curl_close($curl);

                    if ($content) {

                        $xml_data = json_decode(
                            json_encode(    
                                (array)simplexml_load_string($content)
                            ),    true
                        );

                        file_put_contents(
                            DIR_CACHE . 'cache.currencies.' . strtotime('tomorrow'), 
                            serialize($xml_data)
                        );

                    } else {
                        $this->log->write('Automatic currency update failed: Link is broken or empty data feed!');
                        return false;
                    }

                }
                
                $date_modified = date('Y-m-d H:i:s');
                    
                if ( isset($xml_data['@attributes']) && isset($xml_data['@attributes']['Date']) ) {
                    $date_modified = date('Y-m-d H:i:s', strtotime($xml_data['@attributes']['Date']) );
                } 
                    
                if ( isset($xml_data['Valute']) ) {
                    foreach ($xml_data['Valute'] as $Valute) {

                        if ( isset($currencies[$Valute['CharCode']]) && isset($Valute['Value'])) {

                            $value = floatval(
                                str_replace(',', '.', $Valute['Value'])
                            );

                            if ($value) {
                                $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . 1/($value/$Valute['Nominal']) . "', date_modified = '" .  $this->db->escape($date_modified) . "' WHERE code = '" . $this->db->escape($Valute['CharCode']) . "'");
                            }

                            unset($currencies[$Valute['CharCode']]);
                    
                        } 
                            
                        if (empty($currencies)) {
                            break;
                        }

                    }

                    $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = '" .  $this->db->escape($date_modified) . "' WHERE code = '" . $this->db->escape($this->config->get('config_currency')) . "'");

                    $this->cache->delete('currency');                                            

                } else {
                    $this->log->write('Automatic currency update failed: Unable to parse data feed!');
                    $this->cache->delete('currencies');    
                }                
                
            }
                
        }

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Всем привет, прошу помощи с авто обновой валют, пробежался по теме, но вроде как все настройки стоят (дефолтная Гривна, бакс второй валютой и включена ф-ция обновление валют), но автоматом не обновляет,в чем еще может быть причина?

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
  • 9 months later...
  • 1 year later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.