Перенаправление после размещения заказа возникла проблема в CE 2.1.0


Я разработал платежный модуль Magento CE 2.0.Это следующие процедуры:

  1. Выберите способ оплаты и выберите банк.
  2. Разместить заказ.
  3. После успешного оформления заказа клиент перенаправится на страницу платежного шлюза.
  4. Страница шлюза вернется на страницу magento после оплаты клиентом.
  5. Если процесс оплаты завершен успешно, клиент будет перенаправлен на страницу успешного заказа.

Я написал это в первый раз в 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 экран: enter image description here

Я также проверяю/view/frontend/web/js/view/default.js из ядра модуля проверки Magento. Это сильно отличается между двумя версиями CE 2.0.7 и CE 2.1.0.

Теперь я застрял на этой проблеме и не нашел для нее решения. Пожалуйста, дайте мне совет, если я сделал что-то не так!

Author: Tuan Vu, 2016-07-25

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'));

            }

        });
    }
); 
 2
Author: Karthick N, 2016-11-16 10:36:10

Вы должны запустить afterPlaceOrder вручную в своем js-файле

placeOrder = placeOrderAction(this.getData(), false, this.messageContainer);

                    $.when(placeOrder).fail(function () {
                        self.isPlaceOrderActionAllowed(true);
                    }).done(this.afterPlaceOrder.bind(this));
 0
Author: Sina Miandashti, 2016-10-22 18:26:11