Опенкарт 2.0.0. - SyntaxError: JSON.parse: неожиданный конец данных в строке 1 столбца 1 данных JSON OK

В OpenCart v. 2.0.0 в /admin, когда я получаю заказ, я должен иметь возможность изменить статус заказа, чтобы покупатель знал, что происходит с его покупкой. Эта функция находится во вкладке «История». К сожалению, я не могу изменить или модифицировать какие-либо заказы. Когда я меняю статус и пытаюсь его сохранить, Openart выдает ошибку:

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data OK

Это происходит даже при чистой установке. Все настроено правильно - доменное имя в порядке, магазин не в режиме обслуживания, в файле .htaccess нет пароля (кстати, даже его удаление не помогает).

Это выглядит так, как показано на приложенном скриншоте.введите здесь описание изображения

Единственное решение — установить новейшую версию OpenCart, которая на момент написания этого поста была 2.0.1.1. Это, наверное, лучшая идея.

Моя проблема в том, что я сделал довольно много модификаций, и это было бы очень сложно для меня. Делая свои изменения, я не использовал vqmod, который, вероятно, мне следует использовать (но никто не идеален - не так ли?). Или, может быть, вы не хотите идти на обновление по другой причине?

Теперь, как решить эту проблему, фактически не изменяя само программное обеспечение?


person Kornel    schedule 01.01.2015    source источник


Ответы (7)


Я получил ту же ошибку, и я исправил ее:

  1. Перейдите в Администратор -> Система -> Пользователи -> API.
  2. Добавьте новый пароль для генерации API и включите его.
  3. Затем перейдите в «Администратор» -> «Система» -> «Настройки» -> «Редактировать» -> «Параметры» (вкладка).
  4. Выберите пользователя API в разделе «Оформить заказ» в качестве пользователя API.
  5. Затем сохраните изменения
  6. Затем перейдите в «Продажи» -> «Заказы» -> «Редактировать».
person Abin John    schedule 11.02.2015
comment
100% точный и правильный ответ. Кто-то должен принять этот ответ как правильный. Спасибо - person Giorgos Fandomas; 18.02.2015

Я предполагаю, что ошибка возникает, когда метод cURL в вашей ОС пытается получить данные из API ОС и блокируется.

-- Быстрое тестирование

Перейдите к функции info() в /admin/controller/sale/order.php, найдите инициализацию curl внутри info() и нацельтесь на $json = curl_exec($curl); добавить после этого:

if($json === false){ var_dump(curl_error($curl)); exit; }

если есть ошибка, вы должны увидеть ее при переходе к информации о заказе из панели администратора. У вас может быть сообщение об отказе в соединении на порту 80 или 443.

Если да, возможные ошибки и решения могут быть:

  1. Вы работаете в защищенном каталоге. Это сообщение веб-сайта (например, оповещение js с полями), которое запрашивает пользователя/пароль. Вы можете отключить его и попытаться снова добавить запись в историю. В Plesk вы можете найти его как «Каталог, защищенный паролем» в настройках домена.

  2. Если вы недавно изменили свой .htaccess, вам следует проверить его на наличие утверждений авторизации, вызывающих вышеуказанные симптомы.

  3. PHP; Проверьте, не добавили ли вы $_SERVER['REMOTE_ADDR'] в блок if, чтобы намеренно отклонить ips.

  4. При использовании Plesk у вас должен быть root-доступ (ssh), и у вас тот же домен веб-сайта, что и имя хоста панели администратора Plesk (предполагается, что ваш домен — www.yourdomain.com), вы можете проверить это с помощью ssh, выполнив curl -vv "http://www.yourdomain.com" (или https) внутри вашего собственного сервера (localhost), на котором размещен ваш домен. Если вы получаете отказ в соединении на порту 80 или 443 для https и успешно возвращаете сообщение на curl -vv "http://www.yourdomain.com:7080" ИЛИ curl -vv "http://www.yourdomain.com:7081" (порты виртуального хоста), вы можете исправить это, как показано ниже. Также странно получать сообщения об успешном соединении на 80 и 443, когда пытаетесь это сделать с другого сервера! Итак, вам нужно изменить хосты вашего сервера (/etc/hosts) и добавить право на ваш общедоступный IP-адрес вашего полного домена веб-сайта (обычно последняя строка). Итак, добавляем в public-ip строчку xxx.xxx.xxx.xxx www.yourdomain.com. У вас могут быть другие хосты, определенные прямо на вашем общедоступном IP-адресе. Пожалуйста, не удаляйте никакие. Добавьте www.yourdomain.com в конце строки piblic-ip. Вы можете проверить еще раз с помощью curl или добавления истории заказов.

Я могу помочь,

Яннисепп

person giannis.epp    schedule 13.04.2015
comment
что вы подразумеваете под защищенным паролем каталогом? - person Macumbaomuerte; 03.05.2016
comment
@Macumbaomuerte, я делаю решения более подробными. Я также добавил еще несколько решений. Это может помочь вам! - person giannis.epp; 04.05.2016

Спустя некоторое время мне удалось решить эту проблему, и я хочу поделиться этим решением с вами:

В админ панели вашего магазина перейдите по ссылке:

Admin > Settings > Users > API

Должен быть один пользователь с именем вроде

XrpeYEWrFHOcqB1phjBXdUCRO1A3sCvDpgmTGBcJ7G6WuYIMKXCrIJUpzvFPfimWT6LHQLisTYz0nuOy7ZK

если нет, создайте его и дайте ей достаточно сложное имя, как в примере.

Затем вам нужно проверить свою базу данных (использование phpMyAdmin очень помогает), где хранятся данные вашего магазина.

  1. найдите таблицу api, содержащую пользователя API, и проверьте api_id этого пользователя.
  2. найдите таблицу setting (по умолчанию при установке OpenCart она называется oc_setting) и найдите ключ config_api_id.
  3. Установите в поле значения тот же номер, что и api_id, который вы нашли в таблице api.
  4. Проблема должна быть решена.

В моей установке OpenCart 2.0.0 значение было установлено на 0, а api_id — на 2.

person Kornel    schedule 01.01.2015
comment
Я попробовал решение Абина Джона и это после. К сожалению, это не сработало для меня. - person Meddie; 22.04.2015

У меня была такая же проблема, и я перепробовал все возможные и мыслимые обходные пути.

В итоге сдался и позвонил своему хостинг-провайдеру. Они обнаружили, что OpenCart не будет работать должным образом на любой версии php выше 5.4.33. Следовательно: используйте php 5.4.33

Это может не решить все проблемы или может работать только в сочетании с другими исправлениями, описанными выше, но стоит попробовать проверить, какая версия php на вашем хостинге работает по умолчанию.

person StockMaster    schedule 29.03.2015

Если ваш сервер не поддерживает HTTPS, измените https на http.

Откройте файл admin/config.php, измените https на http.

define('HTTPS_SERVER', 'http://'.$_SERVER['HTTP_HOST'].'/admin/'); define('HTTPS_CATALOG', 'http://'.$_SERVER['HTTP_HOST'].'/');

person wing    schedule 01.04.2015
comment
Это сработало для меня. Я также вошел и изменил имя пользователя в API (Администратор > Настройки > Пользователи > API) на имя пользователя БД. - person Anwaarullah; 15.09.2015

Отключение режима обслуживания помогло мне.

person Meddie    schedule 22.04.2015

В строке файла admin/controller/sale/order.php ниже 2438 вы должны увидеть следующее:

    if ($store_info) {
        $url = $store_info['ssl'];
    } else {
        $url = HTTPS_CATALOG;
    }

Как вы можете видеть, CURL всегда использует определенную константу HTTPS_CATALOG, которая содержит URL-адрес SSL вашего магазина. Почему? Я не знаю. Решение: отредактируйте свой config.php в корневой папке магазина и измените определенное постоянное значение HTTPS_CATALOG на URL-адрес без SSL, просто удалите «s» после окончания https.

person Rookie    schedule 04.05.2015