Ошибка Opencart при просмотре заказа с протоколом https смешанного активного содержимого index.php?route=api/login

При переводе магазина Opencart на протокол https при просмотре заказа вылезает ошибка "Заблокирована загрузка смешанного активного содержимого index.php?route=api/login"

При этом вы точно знаете, что в конфигурационных файлах заменили все HTTP на HTTPS.

Проблема в том, что при записи в таблицу oc_order в поле store_url всегда пишется адрес http://mymag.ru

А нам надо, чтобы писалось https://mymag.ru
тогда ошибки не будет.

Чтобы исправить это недоразумение, нам нужно добавить один символ S в коде контроллера

/catalog/controller/checkout/confirm.php

в строке 100 заменить

$order_data['store_url'] = HTTP_SERVER;

на

$order_data['store_url'] = HTTPS_SERVER;

 

Небольшое пояснение.
Записи в базу данных делает функция public function addOrder($data), описанная в модели /catalog/model/checkout/order.php
Эта функция вызывается в вышеуказанном контроллере в строке 314
$this->session->data['order_id'] = $this->model_checkout_order->addOrder($order_data);

 

Еще один баг.
Эта ошибка будет возникать после редактирования заказа.
Потому что скрипт снова запишет http://mymag.ru в таблицу oc_order в поле store_url

Причина в том, что http-урл в таблицу oc_order пишет функция public function editOrder($order_id, $data) , которая находится в той же модели.

Где она вызывается? А вызывается она в строке 667 в контроллере /catalog/controller/api/order.php

$this->model_checkout_order->editOrder($order_id, $order_data);

В этой функции передается параметр $order_data, который является массивом.

Нужные нам данные в этот массив попадают в строке 470

$order_data['store_url'] = $this->config->get('config_url');

И тут мы обнаруживаем неизвестный науке элемент $this->config->get('config_url')

Вместо него мы подставим корректную переменную HTTPS_SERVER
То есть, должно быть так:

$order_data['store_url'] = HTTPS_SERVER;

Теперь Ajax работает с правильным урлом https://mymag.ru/

 

Будут вопросы, пишите.

 

Постмысль насчет неизвестного элемента: функция $this->config->get() работает с таблицей oc_setting и тащит от туда параметры настроек сайта.
Заглянув в эту таблицу, мы не найдем там config_url
Поэтому скрипт пишет урл по умолчанию http и появляется ошибка.