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, забезпечуючи користувачам актуальну інформацію про обмінні курси національної валюти.

