Magento: forma sencilla de eliminar el paso “paypal / express / review”

Al hacer un pedido usando PayPal en magento, te lleva a PayPal, PayPal ya muestra una confirmación, confirmas, te redirigen a otra página de confirmación (/ paypal / express / revisión), es un paso adicional que no es necesario para la experiencia del usuario. Quisiera quitarlo y hacer el pedido colocado automáticamente cuando el usuario confirme en la página de PayPal, una vez que salga de PayPal, si el pedido fue exitoso, el cliente debería ver la página de éxito.

¿Hay alguna solución fácil a esto que podría haber pasado por alto o al menos si puedes dirigirme en la dirección correcta para eliminar ese paso?

no use paypal express y use el estándar paypal si no necesita esta característica. paypal express es un método de pago y no un método de pago

editar: ahora es configurable en 1.9, aún retardado pero factible.

En realidad, Express Checkout puede manejar esto sin problemas, y yo personalmente recomendaría seguir con eso.

Después de la solicitud SetExpressCheckout, redirige al usuario a PayPal. Puede agregar useraction = commit a esta URL para activar la confirmación de las páginas de PayPal.

Esto hace que el botón “Continuar” en PayPal cambie a un botón “Pagar” e informa al usuario que esta es su confirmación final … haciendo clic en Pagar enviará el pago.

Aún debe llamar a DoExpressCheckoutPayment en su servidor para completar el proceso, pero GetExpressCheckoutDetails es opcional en este momento. Al usar useraction = commit obtendrá el PayerID como un parámetro de URL en su ReturnURL para que no tenga que llamar a GECD si no lo desea / necesita.

Puede llevar esto a una configuración más avanzada y usar la API de callback (también conocida como API de actualización instantánea) para enviar información sobre impuestos de envío y ventas a la página de revisión de PayPal. Esto le permite completar los valores desplegables en la página de revisión de PayPal con sus propios datos de envío según la dirección de envío del usuario seleccionada en la página de revisión de PayPal.

La introducción de esas características consistió en hacer exactamente lo que usted especificó … eliminar el proceso de revisión adicional.

Dicho todo esto, si el módulo de Magento para Express Checkout no ofrece opciones para todo esto, deberá ampliarlo y comstackrlo usted mismo. Aunque soy bonita, sí.

En realidad, todas las soluciones mencionadas aquí requieren editar el núcleo de Magento. Esto se conoce como mala práctica y no mantiene su tienda actualizable.

Lo que necesita hacer para una solución limpia :

  1. Crea un módulo (en mi ejemplo: Avoe_Paypal) para incluir los cambios
  2. Reescribir la configuración de Paypal
  3. Redirigir en paso de revisión expresa de PayPal que es http://yourdomain.com/paypal/express/review/

1) Crea tu módulo

Avoe / Paypal / etc / config.xml

     0.1.0      Avoe_Paypal_Model    Avoe_Paypal_Model_Config        singleton Avoe_Paypal_Model_Observer paypalExpressReturnPredispatch       

app / etc / Avoe_Paypal.xml

     true local       

2) Reescribir config, agregar useraction ‘commit’:

 getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } } 

3) Crear un observador para redirigir:

 getResponse()->setRedirect(Mage::getUrl('*/*/placeOrder')); } } 

También hay una pequeña extensión de Magento que acaba de ser lanzada ayer, para eliminar el paso de revisión:

https://github.com/tim-bezhashvyly/Sandfox_RemovePaypalExpressReviewStep

Entonces, el trato correcto allí, que funciona perfectamente (para mí) es un resumen de lo anterior:

1. Vaya a: \ app \ code \ core \ Mage \ Paypal \ Controller \ Express \ Abstract.php

y busque en returnAction () por:

 $this->_redirect('*/*/review'); 

Ahí tienes que cambiar:

 $this->_redirect('*/*/review'); 

a:

 $this->_redirect('*/*/placeOrder'); 

2. Vaya a: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php y cambie el:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

a:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

Con los 2 cambios anteriores, descubro cómo pasar página de revisión en Magento Paypal Express Checkout.

La respuesta de Andrew Angel realmente no evita la página de confirmación, solo cambia el valor del botón para “Pagar” en lugar de “Confirmar”, o algo así.

De todos modos, la forma correcta de hacerlo es ir a \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php , al getExpressCheckoutEditUrl($token) y cambiar

 'useraction' => 'continue', 

a

 'useraction' => 'commit'. 

Para ver la página de usuario de confirmación en Paypal Express, solo necesita cambiar una línea en la acción del controlador. Vaya a Mage / Paypal / Controller / Express / Abstract.php y busque $this->_redirect('*/*/review') ; en returnAction() . Ahí tienes que cambiar

 $this->_redirect('\*/\*/review'); 

a

 $this->_redirect('\*/\*/placeOrder'); 

De esta forma, cuando paypal regrese para devolver la acción, evitará mostrar toda la página de revisión y el pago se confirmará automáticamente. Por lo tanto, Paypal vuelve a dirigir a las páginas de éxito de la misma manera que el método estándar de PayPal.

@Toni La parte de redirección url funciona excelente, ¡gracias! Sin embargo, al cambiar ‘continuar’ por ‘confirmar’ no se modificaron los botones en el sitio web de PayPal. Sin embargo, pude solucionarlo haciendo lo siguiente: Justo encima de la función getExpressCheckoutEditUrl, donde Toni instruyó que cambie la opción de continuar confirmando, existe la función getExpressCheckoutStartUrl. Si agrega allí la variable de uso, funcionará. Función original:

 public function getExpressCheckoutStartUrl($token) { 'return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

Nueva función:

 public function getExpressCheckoutStartUrl($token) { 'return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

Observe que la ‘función de uso’ => ‘commit’ se agregó a la nueva función. ¡Esto debería funcionar!

Faltaba un paso, permítanme resumir todo el proceso nuevamente.

1. Vaya a: \ app \ code \ core \ Mage \ Paypal \ Controller \ Express \ Abstract.php

y busque en returnAction () por:

 $this->_redirect('*/*/review'); 

Ahí tienes que cambiar:

 $this->_redirect('*/*/review'); 

a:

 $this->_redirect('*/*/placeOrder'); 

2. Vaya a: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php y cambie el:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'token' => $token, )); } 

a:

 public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(array( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } 

3. Con los dos cambios anteriores, seguirá siendo llevado a la página de revisión y tendrá que aceptar los términos y condiciones, para evitar esto vaya a:

/app/code/core/Mage/Paypal/Controller/Express/Abstract.php Busque:

 public function placeOrderAction() { try { $requiredAgreements = Mage::helper('checkout')->getRequiredAgreementIds(); if ($requiredAgreements) { $postedAgreements = array_keys($this->getRequest()->getPost('agreement', array())); if (array_diff($requiredAgreements, $postedAgreements)) { Mage::throwException(Mage::helper('paypal')->__('Please agree to all the terms and conditions before placing the order.')); } } 

Comente las siguientes líneas con un simple // al principio:

 //if (array_diff($requiredAgreements, $postedAgreements)) { // Mage::throwException(Mage::helper('paypal')->__('Please agree to all the terms and conditions before placing the order.')); // } 

El único momento en que se llevará a la página de revisión es si los clientes paypal devuelven un error rechazado.

Magento 1.9 tiene soporte integrado para esto, la opción Saltar paso de revisión de pedidos , pero tiene una advertencia sutil. La característica no funciona con los botones de ‘Acceso directo’ que puede mostrar en las páginas de detalle del producto y del carrito.

Mi sugerencia es desactivar los botones de acceso directo y habilitar la opción Omitir paso de revisión de pedido . Para obtener un crédito adicional, puede reorganizar el flujo de Onepage Checkout para que los clientes no tengan que ingresar la información de facturación dos veces (una vez en Magento y nuevamente en PayPal).

Más detalles disponibles en esta publicación de blog .