Перенаправление после размещения заказа возникла проблема в CE 2.1.0
Я разработал платежный модуль Magento CE 2.0.Это следующие процедуры:
- Выберите способ оплаты и выберите банк.
- Разместить заказ.
- После успешного оформления заказа клиент перенаправится на страницу платежного шлюза.
- Страница шлюза вернется на страницу magento после оплаты клиентом.
- Если процесс оплаты завершен успешно, клиент будет перенаправлен на страницу успешного заказа.
Я написал это в первый раз в Magento CE 2.0.7 и все работало отлично. Однако, когда я использовал его для magento CE 2.1.0, модуль не смог выполнить действие перенаправления после успешного размещения заказа.
Я поместил свой URL-адрес перенаправления в файл method.js
, переопределив afterPlaceOrder
из default.js
из модуля проверки Magento, как показано ниже:
/**
* After place order callback
*/
afterPlaceOrder: function () {
$.mage.redirect(window.checkoutConfig.payment.ideal.redirectUrl);
},
После того, как я изучил некоторые вещи, я повторно рассматриваю некоторые проблемы, такие как:
В Magento CE 2.0.7 сначала выполняется запрос на заказ страницы успеха, затем выполняется запрос на перенаправление платежей шлюза. Все работало нормально.
В Magento CE 2.1.0 все произошло наоборот. Сначала выполняется запрос на перенаправление платежей шлюза. Затем выполняется запрос на выполнение заказа страницы успеха, и он заменяет первый. В результате запрос на перенаправление платежей шлюза был прерван, он сразу переходит на страницу успешного заказа без перенаправления на страницу платежного шлюза.
Запрос журнала Apache:
(Magento CE 2.0.7)
127.0.0.1 - - [22/Jul/2016:11:59:09 +0700] "POST /rest/default/V1/carts/mine/payment-information HTTP/1.1" 200 349 "http://192.168.200.62/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:59:17 +0700] "GET /checkout/onepage/success/ HTTP/1.1" 200 7443 "http://192.168.200.62/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:59:17 +0700] "GET /customer/section/load/?sections=cart%2Cmessages&update_section_id=true&_=1469163514364 HTTP/1.1" 200 788 "http://192.168.200.62/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:59:17 +0700] "GET /ideal/ideal/redirect?_secure=true&bank_id=1234 HTTP/1.1" 302 732 "http://192.168.200.62/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
(Magento CE 2.1.0)
127.0.0.1 - - [22/Jul/2016:11:54:58 +0700] "POST /magento210/rest/default/V1/carts/mine/payment-information HTTP/1.1" 200 379 "http://localhost/magento210/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:55:07 +0700] "GET /magento210/ideal/ideal/redirect/?_secure=true&bank_id=0771 HTTP/1.1" 302 802 "http://localhost/magento210/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:55:07 +0700] "GET /magento210/checkout/onepage/success/ HTTP/1.1" 200 7648 "http://localhost/magento210/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
127.0.0.1 - - [22/Jul/2016:11:55:07 +0700] "GET /magento210/customer/section/load/?sections=cart%2Clast-ordered-items%2Cmessages&update_section_id=true&_=1469163137422 HTTP/1.1" 200 1161 "http://localhost/magento210/checkout/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
Запрос на перенаправление прерван в инструменте разработчика firefox экран:
Я также проверяю/view/frontend/web/js/view/default.js из ядра модуля проверки Magento. Это сильно отличается между двумя версиями CE 2.0.7 и CE 2.1.0.
Теперь я застрял на этой проблеме и не нашел для нее решения. Пожалуйста, дайте мне совет, если я сделал что-то не так!
2 answers
Вы должны использовать redirectafterplaceorder: false по умолчанию, тогда функция перенаправления afterplaceorder начнет работать. Обратитесь к этому образцу кода
define(
[
'jquery',
'Magento_Checkout/js/view/payment/default',
'mage/url',
'Magento_Checkout/js/action/place-order'
],
function ($,Component,url,placeOrderAction) {
'use strict';
return Component.extend({
defaults: {
redirectAfterPlaceOrder: false
},
afterPlaceOrder: function (data, event) {
window.location.replace(url.build('yourmodule/namespace/controller'));
}
});
}
);
Вы должны запустить afterPlaceOrder вручную в своем js-файле
placeOrder = placeOrderAction(this.getData(), false, this.messageContainer);
$.when(placeOrder).fail(function () {
self.isPlaceOrderActionAllowed(true);
}).done(this.afterPlaceOrder.bind(this));