Не удалось оформить заказ в Magento OnePage Checkout - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть магазин Magento, который был преобразован в магазин типа «одна сделка за раз», и процесс оформления заказа прерван. Я пытался отладить это, но врезался в стену, в основном из-за моего ограниченного понимания Magento.

На шаге saveOrder, когда вы нажимаете «Разместить заказ», на странице отображается «отправка информации о заказе», затем сообщение очищается, и покупатель все еще находится на странице «Просмотр заказа».

Я проанализировал с помощью Firebug и HttpFox и вижу, что информация о заказе отправляется

(Request-Line)  POST /checkout/onepage/saveOrder/ HTTP/1.1
Host    www.domainname.com
User-Agent  Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0
Accept  text/javascript, text/html, application/xml, text/xml, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
X-Requested-With    XMLHttpRequest
X-Prototype-Version 1.6.0.3
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Referer https://www.domainname.com/checkout/onepage/
Content-Length  178
Cookie  frontend=cd60252d28cd115d4096cb2bb5b6a043
Pragma  no-cache
Cache-Control   no-cache

Почтовые данные показывают всю необходимую информацию:

payment[method] authorizenet
payment[cc_type]    VI
payment[cc_number]  4111111111111111
payment[cc_exp_month]   5
payment[cc_exp_year]    2012
payment[cc_cid] 987

Моя проблема была похожа на этот пост: http://fishpig.co.uk/magento-tutorials/magento-checkout-error-undefined-javascript-alert

но я не получаю предупреждение "Undefined", поэтому я добавил оператор "else" ниже:

nextStep: function(transport){
    if (transport && transport.responseText) {
            alert(transport.responseText);
        try{
            response = eval('(' + transport.responseText + ')');
        }
        catch (e) {
            response = {};
        }
        if (response.redirect) {
            location.href = response.redirect;
            return;
        }
        if (response.success) {
            this.isSuccess = true;
            window.location=this.successUrl;
        }
        else{
            var msg = response.error_messages;
            if (typeof(msg)=='object') {
                msg = msg.join("\n");
            }
            alert(msg);
        }

        if (response.update_section) {
            $('checkout-'+response.update_section.name+'-load').update(response.update_section.html);
            response.update_section.html.evalScripts();
        }

        if (response.goto_section) {
            checkout.gotoSection(response.goto_section);
            checkout.reloadProgressBlock();
        }
    } else {
        alert('transport.responseText');
        }
},

Я получаю предупреждение JS без текста, поэтому похоже, что transport.reponseText пуст. Основные ссылки на пустой текст ответа, которые я обнаружил, по-видимому, связаны с политикой того же происхождения, что, я думаю, неприменимо, поскольку мой пост AJAX относится к сайту www.domainname.com и обратно.

Когда я вызываю функцию saveOrder прямо в браузере, я получаю действительный ответ:

https://www.domainname.com/checkout/onepage/saveOrder {"success": false, "error": true, "error_messages": "Несоответствие номера кредитной карты типу кредитной карты"}

и HTTPFox показывает, что я получаю 200 ответ от вызова Ajax, но текст ответа просто пуст. Я не нахожу никаких ошибок PHP или ошибок в журнале исключений Magento. Единственное, что я нахожу связанным, это «Заголовки уже отправлены» в системном журнале Magento:

<code>
2011-09-03T12: 14: 21 + 00: 00 ОТЛАДКА (7): ЖАТКИ УЖЕ ОТПРАВЛЕНЫ:
[0] wwwroot/app/code/core/Mage/Core/Controller/Response/Http.php:50
[1] wwwroot/lib/Zend/Controller/Response/Abstract.php:726
[2] wwwroot/app/code/core/Mage/Core/Controller/Response/Http.php:82
[3] wwwroot/app/code/core/Mage/Core/Controller/Varien/Front.php:169
[4] wwwroot/app/Mage.php:459
[5] wwwroot/index.php:67

У кого-нибудь есть предложения, почему же ответный текст возвращается пустым?

1 Ответ

1 голос
/ 27 декабря 2012

Пользовательские модули были неисправны. Отключение всех пользовательских модулей в админке Magento фактически не отключает их, а только «отключает их вывод».

Установка False в конфигурации модуля устранила ошибку неверных заголовков, после чего я смог отладить проблему пользовательского модуля, которая вызывала ошибки проверки AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...