Pregunta

Si vuelvo a cargar la página checkout/onepage/success, yo estoy ordenado de la compra.

Por lo tanto, al depurar o labrar la página éxito de la orden, siempre tiene que hacer un nuevo pedido.

¿Cómo puedo hacer esto de manera más eficiente?

¿Fue útil?

Solución

Puede temporalmente hackear el núcleo, mientras que usted está desarrollando:

En /app/code/core/Mage/Checkout/controllers/OnepageController.php edición successAction().

comentario la línea de $session->clear();. Ahora usted puede hacer una orden y actualizar la página tan a menudo como te gusta.

Si usted ni siquiera quiere hacer un pedido en cada navegador, por ejemplo, cuando se hace la prueba de cross-browser, también simplemente puede inicializar la sesión cada vez.

Escoja un número de pedido y una identificación con cita de la sales_flat_order tabla (campos: entity_id y quote_id). Por ejemplo a través de:

SELECT entity_id as order_id, quote_id 
  FROM sales_flat_order ORDER BY entity_id DESC LIMIT 1;

A continuación, cambiar el principio de la función como sigue:

$session = $this->getOnepage()->getCheckout();

$session->setLastSuccessQuoteId(INSERT_QUOTE_ID);
$session->setLastQuoteId(INSERT_QUOTE_ID);
$session->setLastOrderId(INSERT_ORDER_ID);

y replaceINSERT_.... con los ID.

Ahora usted siempre puede llamar checkout/onepage/success

Mientras que usted está en él, es posible que desee probar la failureAction() así, en

/app/code/core/Mage/Checkout/controllers/OnepageController.php

La acción modificado sería el siguiente

public function failureAction()
    {
        $session = $this->getOnepage()->getCheckout();

        $session->setLastSuccessQuoteId(INSERT_QUOTE_ID);
        $session->setLastQuoteId(INSERT_QUOTE_ID);
        $session->setLastOrderId(INSERT_ORDER_ID);

        $lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
        $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();

        if (!$lastQuoteId || !$lastOrderId) {
            $this->_redirect('checkout/cart');
            return;
        }

        $this->loadLayout();
        $this->renderLayout();
    }

Ahora usted siempre puede llamar checkout/onepage/failure

Otros consejos

Es necesario modificar el successAction () en

/app/code/core/Mage/Checkout/controllers/OnepageController.php

acción Modificado le gustaría este

public function successAction()
    {
        /*
        $session = $this->getOnepage()->getCheckout();
        if (!$session->getLastSuccessQuoteId()) {
            $this->_redirect('checkout/cart');
            return;
        }

        $lastQuoteId = $session->getLastQuoteId();
        $lastOrderId = $session->getLastOrderId();
        $lastRecurringProfiles = $session->getLastRecurringProfileIds();
        if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
            $this->_redirect('checkout/cart');
            return;
        }

        $session->clear();
        */
        $this->loadLayout();
        $this->_initLayoutMessages('checkout/session');
        Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
        $this->renderLayout();
    }

Hope No estoy muy autobombo, pero he creado una extensión libre que se puede instalar rápidamente en Magento, y le permite previsualizar el éxito-página de pedido de cualquier orden - simplemente accediendo a una URL: http://www.yireo.com/software/magento-extensions/checkout- probador

Creo que es mejor simplemente comentar $ session-> clear (); y añadir los productos de forma manual, que trabajaron para mí, pero comentando toda la acción dio errores me sintaxis.

Para Magento 2:

Si quieres estilo o Personalizar en la página tras página de éxito éxito de la orden vuelve a dirigir a la cesta página.

Ahora solución está aquí:

A vendor/magento/module-checkout/Controller/Onepage Success.php abierta del archivo.

En este archivo, que aparece a continuación Código

 if (!$this->_objectManager->get('Magento\Checkout\Model\Session\SuccessValidator')->isValid()) {
     return $this->resultRedirectFactory->create()->setPath('checkout/cart');
 }

Sólo comentario en este código y el problema está resuelto. Después de este comentario no redirigir a la cesta página.

En lugar de enviar mensajes de correo electrónico desde el desarrollo local / copia se puede volcar el contenido del correo electrónico en un archivo y luego simplemente ver en la zona, que en mi opinión va a ser muy útil. Así es como que se puede lograr. En primer lugar todos los mensajes de correo electrónico se envían desde

Mage_Core_Model_Email_Template::send($email, $name = null, array $variables = array())

Para eso, y añadir las siguientes líneas.

    $this->setUseAbsoluteLinks(true);
    $text = $this->getProcessedTemplate($variables, true);

    if($this->isPlain()) {
        $mail->setBodyText($text);
    } else {
        $mail->setBodyHTML($text);
    }
    // Added Code //
    $filePath = Mage::getBaseDir() .  DS . 'email.html';
    Mage::log($filePath);
    file_put_contents($filePath, $text);
    // Added Code Ends //

    $mail->setSubject('=?utf-8?B?' . base64_encode($this->getProcessedTemplateSubject($variables)) . '?=');
    $mail->setFrom($this->getSenderEmail(), $this->getSenderName());

Después de esto después de crear cualquier orden un email.html se creará en la raíz del documento Magento y que puede abrir en el navegador para ver la salida.

A continuación, para enviar / re-enviar ningún correo electrónico de orden que sólo puede iniciar una sesión de administrador y para cada orden no es enviar por correo electrónico el botón que activará esta secuencia de comandos y se puede ver la plantilla recién cambiado escrito en el mismo archivo. Creo que esta es una de la mejor manera de ver el fin o cualquier otro mensaje.

Tenga en cuenta para eliminar el código añadido cuando haya terminado.

Hay que actualizar el código:

/app/code/core/Mage/Checkout/controllers/OnepageController.php

Función de actualización:

public function successAction()
{
    $session = $this->getOnepage()->getCheckout();
    if (!$session->getLastSuccessQuoteId()) {
        $this->_redirect('checkout/cart');
        return;
    }

    $lastQuoteId = $session->getLastQuoteId();
    $lastOrderId = $session->getLastOrderId();
    $lastRecurringProfiles = $session->getLastRecurringProfileIds();
    if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
        $this->_redirect('checkout/cart');
        return;
    }

    //$session->clear();

    $this->loadLayout();
    $this->_initLayoutMessages('checkout/session');
    Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
    $this->renderLayout();
}

Sólo un comentario:

//$session->clear();

Magento 2

Como otro notas de respuesta, se puede comentar la redirección en Magento\Checkout\Controller\Onepage\Success::execute y forzar a la página de pago para el éxito de la carga. Pero cuando el bloque, Magento\Checkout\Block\Onepage\Success, cargas no hay datos de los pedidos estarán presentes debido Magento\Checkout\Model\Session::getLastRealOrder no va a devolver un pedido. A mejores opciones serían un interceptor después de la clase del controlador es ejecutar el método, donde se puede establecer un valor para lastRealOrderId en la sesión de pago y envío.

Este enfoque también ofrece la oportunidad de distribuir el evento checkout_onepage_controller_success_action con el orden que desee. El evento dará lugar a la Magento\GoogleAdwords\Observer\SetConversionValueObserver observadores y Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver con los datos de prueba.

El siguiente es un módulo bastante básico crear el interceptor descrito anteriormente y permite establecer el orden añadiendo un parámetro de consulta order con el id incremento deseado a la página de éxito url. En la actualidad, no funcionará el éxito multishipping la ruta. Se puede descargar en github: https://github.com/pmclain/magento2-successtest

app / código / Pmclain / SuccessTest / etc / frontend / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
  <type name="Magento\Checkout\Controller\Onepage\Success">
    <plugin name="pmclain_successtest_checkout_controller_onepage_success"
            type="Pmclain\SuccessTest\Plugin\Success"
            sortOrder="10" />
  </type>
</config>

app / código / Pmclain / SuccessTest / Programas / Success.php

<?php
namespace Pmclain\SuccessTest\Plugin;

use Magento\Framework\Event\ManagerInterface;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;
use Magento\Checkout\Model\Session;
use Magento\Sales\Model\OrderFactory;
use Magento\Sales\Model\Order;

class Success
{
  /** @var ManagerInterface */
  protected $_eventManager;

  /** @var PageFactory */
  protected $_resultPageFactory;

  /** @var ScopeConfigInterface */
  protected $_scopeConfig;

  /** @var OrderFactory */
  protected $_orderFactory;

  /** @var Order */
  protected $_order;

  /** @var Session */
  protected $_checkoutSession;

  /**
   * Success constructor.
   * @param ManagerInterface $eventManager
   * @param PageFactory $resultPageFactory
   * @param ScopeConfigInterface $scopeConfig
   * @param OrderFactory $orderFactory
   * @param Session $session
   */
  public function __construct(
    ManagerInterface $eventManager,
    PageFactory $resultPageFactory,
    ScopeConfigInterface $scopeConfig,
    OrderFactory $orderFactory,
    Session $session
  ) {
    $this->_eventManager = $eventManager;
    $this->_resultPageFactory = $resultPageFactory;
    $this->_scopeConfig = $scopeConfig;
    $this->_orderFactory = $orderFactory;
    $this->_checkoutSession = $session;
  }

  /**
   * @param \Magento\Checkout\Controller\Onepage\Success $subject
   * @param $result
   * @return \Magento\Framework\View\Result\Page
   */
  public function afterExecute(\Magento\Checkout\Controller\Onepage\Success $subject, $result)
  {
    if (!$this->_isEnabled()) {
      return $result;
    }

    $order = $this->_getTestOrder($subject->getRequest()->getParam('order'));

    if (!$order->getId()) {
      return $result;
    }

    $this->_checkoutSession->setLastRealOrderId($order->getIncrementId());

    $resultPage = $this->_resultPageFactory->create();

    $this->_eventManager->dispatch(
      'checkout_onepage_controller_success_action',
      ['order_ids' => [$order->getId()]]
    );

    return $resultPage;
  }

  /**
   * @return bool
   */
  protected function _isEnabled()
  {
    if ($this->_scopeConfig->getValue('dev/debug/success_test', ScopeInterface::SCOPE_STORE)) {
      return true;
    }

    return false;
  }

  /**
   * @param $incrementId string|bool
   * @return Order
   */
  protected function _getTestOrder($incrementId)
  {
    /** @var Order $order */
    $order = $this->_orderFactory->create();

    $order->loadByIncrementId($incrementId);

    return $order;
  }
}

app / código / Pmclain / SuccessTest / etc / adminhtml / system.xml A continuación añade opciones de panel de administración para activar / desactivar el interceptor.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
  <system>
    <section id="dev">
      <group id="debug">
        <field id="success_test" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="0">
          <label>Enable Checkout Success Page Testing</label>
          <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
        </field>
      </group>
    </section>
  </system>
</config>

app / código / Pmclain / SuccessTest / etc / config.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
  <default>
    <dev>
      <debug>
        <success_test>0</success_test>
      </debug>
    </dev>
  </default>
</config>

app / código / Pmclain / SuccessTest / etc / Module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="Pmclain_SuccessTest" setup_version="0.0.1">
    <sequence>
      <module name="Magento_Backend" />
      <module name="Magento_Checkout" />
    </sequence>
  </module>
</config>

app / código / Pmclain / SuccessTest / resgistration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Pmclain_SuccessTest',
  __DIR__
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top