OpenCart 3 – потужна система управління контентом для онлайн-магазинів, інтеграція з якою дозволяє забезпечити автоматичне оновлення курсів валют. У цій статті ми розглянемо, як використовувати PHP та бібліотеку cURL для отримання актуальних курсів гривні від Національного Банку України та їх оновлення в OpenCart.

Код для оновлення курсів

Валюта за замовчуванням повинна бути Гривня з установленим курсом 1.0000.

Код, який потрібно відредагувати міститься файлі:
admin/model/localisation/currency.php, шукаємо функцію public function refresh та переписуємо її вміст:

public function refresh($force = false) {
		$currency_data = array();
		$curs = 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) {
			$currency_data[] = $result['code'];
		}
 
		$ch = curl_init();
		$feed_url = 'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange';
 
		curl_setopt($ch, CURLOPT_URL,$feed_url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		$response = curl_exec($ch);
 
		$xml = simplexml_load_string($response);
		$json = json_encode($xml);
		$arr = json_decode($json,true);
 
		curl_close($ch);
		 foreach ($arr['currency'] as $currency) {
            if (in_array($currency['cc'],$currency_data)) {
				$c = $currency['cc'];
				$r = $currency['rate'];
                $curs[$c] = $r;
            };
        }
 
		foreach ($curs as $key=>$value) {		
			if ((float)$value) {
				$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($key) . "'");
			}
		}
 
		$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($this->config->get('config_currency')) . "'");
 
		$this->cache->delete('currency');
	}

Як це працює

Отримання списку валют для оновлення: Код виконує запит до бази даних OpenCart для отримання списку валют, які слід оновити. Якщо параметр $force встановлено в true, будуть оновлені всі валюти, в іншому випадку – лише ті, які не оновлювалися протягом останнього дня.

Отримання актуальних курсів від Національного Банку України: Здійснюється запит до API НБУ за допомогою бібліотеки cURL. Отримані дані конвертуються в масив для подальшої обробки.

Оновлення курсів в базі даних OpenCart: Код порівнює коди валют та їх курси з отриманими від НБУ та виконує оновлення в базі даних OpenCart.

Оновлення курсу основної валюти: Забезпечує оновлення курсу основної валюти, установленої в конфігурації OpenCart.

Очищення кешу: Завершується очищення кешу валют для відображення актуальних даних в інтерфейсі OpenCart.

Цей код можна використовувати для автоматичного оновлення курсів валют в OpenCart, забезпечуючи користувачам актуальну інформацію про обмінні курси національної валюти.