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