Очень часто бывает, что при Заказе в OpenCart возникает ошибка типа: PHP Notice confirm.php at 11 in $payment_address = $this -> model_account_address-> getAddress($this-> session->data[‘payment_address_id’]);
Можно, конечно скачать обновление, но оно вряд ли поможет вам, ибо там косяков ещё больше, чем в существующем. Да и к тому же — это не поможет, т.к. не понимая сути ошибки — она будет всё время выскакивать — то там, то тут. Особенно, это касается папки: /home/вашдомен/www/catalog/controller/checkout/ и никогда не поймёте от чего это так. Пока сам не разберёшься — ни одно обновление не поможет!
Но мы люди упёртые и привыкли докапываться до истины. И вот в чём была причина ошибки: При формировании нового Заказа, не определена переменная: payment_address_id она собственно ключ массива, задающего адрес — передающийся в сессии. Но, так как, даже если вы заполнили поле с адресом — в сессии её не видно, так как надо было разработчикам зарезервировать её, или создать пустой массив для записи и хранения значений. Но, увы — этого не сделано, и массив этот формируется лишь на последнем Шаге (когда собственно и пишется в БД MySQL). Ошибка!
Отсюда мораль: JSON парся сессию и выводя из неё данные из ajax POST тупо натыкается на ошибку: Undefined! PHP Notice… и тут же — «затыкается» не давая пройти стадию Оплаты заказа! Пишет: JSON Error! И прально делает, я бы тоже так сказал: Ошибка!
Что мы придумали (см. скриншот): Раз уж, есть else и не определена — сделать ей isset! Открываем файл: confirm.php (/catalog/controller/checkout) и находим строки из Журнала ошибок, например: 11 строка.
Находим: $payment_address = $this->model_account_address-> getAddress($this->session->data[‘payment_address_id’]);
Меняем на: $payment_address = $this->model_account_address-> getAddress(isset($this->session->data[‘payment_address_id’]));
Обратите внимание, подобная ошибка типична для OpenCart — везде! Т.е. везде нужен isset (в случае ошибки) — если определена, если нет — работает else. Что и требовалось доказать! Абсолютно все ошибки: payment_address_id — лечатся именно так! Делов-то на 5 минут! Спасибо!
Кстати, теперь есть модуль для оплаты по безналичному расчёту для OpenCart!