Magento: un modo semplice per rimuovere il passaggio "paypal / express / review"

Quando ordini usando paypal in magento, ti port su paypal, PayPal già visualizza una conferma, confermi, ti ritrovi su un'altra pagina di conferma (/ paypal / express / recensione), è un passaggio extra che non è necessario per l'esperienza utente, Vorrei rimuoverlo e rendere l'ordine automaticamente inserito quando l'utente conferma sulla pagina paypal, una volta lasciato paypal se l'ordine di successo del cliente dovrebbe vedere la pagina di successo.

C'è una soluzione facile a questo che avrei potuto trascurare o alless se puoi indicarmi la giusta direzione per rimuovere quel passo.

non usare paypal express e utilizzare lo standard paypal se non hai bisogno di questa funzionalità. paypal express è un metodo di pagamento e non un metodo di pagamento

modifica: ora è configurabile in 1.9, ancora ritardato ma fattibile.

In realtà, Express Checkout può gestire questo problema, e personalmente raccomanderei di attenervisi.

Dopo la richiesta SetExpressCheckout reindirizza l'utente a PayPal. È ansible aggiungere useraction = commit a questo URL per triggersre la conferma dalle pagine di PayPal.

Questo fa sì che il button "Continua" su PayPal per passare a un button "Paga" e informa l'utente che questa è la loro conferma finale … Cliccando Pay invierà il pagamento.

Devi ancora call DoExpressCheckoutPayment sul tuo server per completare la procedura, ma GetExpressCheckoutDetails è facoltativo a questo punto. Quando si utilizza useraction = commit, il ReturnerL restituirà il PayerID come parametro URL in modo da non wherer call GECD se non si desidera / è necessario.

È ansible prendere tutto questo più lontano e utilizzare l'API di callback (nota anche come API di aggiornamento istantaneo) per alimentare le informazioni sulla spedizione e sulle imposte sulle vendite nella pagina di revisione di PayPal. Ciò ti consente di popolare i valori a discesa nella pagina di revisione di PayPal con i tuoi dati di spedizione in base all'indirizzo di spedizione dell'utente selezionato nella pagina di revisione di PayPal.

L'introduzione di queste funzionalità era di fare esattamente quello che hai specificato … eliminare la procedura di revisione aggiuntiva.

Detto questo, se il module Magento per Express Checkout non fornisce opzioni per tutto questo, dovrai estenderlo e crearlo in te stesso. Sono carina lo fa, però.

In realtà tutte le soluzioni menzionate qui sono necessarie per modificare il nucleo di Magento. Questo è noto come ctriggers pratica e non mantiene il tuo negozio aggiornabile.

Cosa devi fare per una soluzione pulita :

  1. Crea un module (nel mio esempio: Avoe_Paypal) per includere le modifiche
  2. Riscrivi la configuration di Paypal
  3. Reindirizzamento sul passaggio di verifica espressa paypal che è http://yourdomain.com/paypal/express/review/

1) Crea il tuo module

Avoe / Paypal / etc / config.xml

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Avoe_Paypal> <version>0.1.0</version> </Avoe_Paypal> </modules> <global> <models> <Avoe_Paypal> <class>Avoe_Paypal_Model</class> </Avoe_Paypal> <paypal> <rewrite> <config>Avoe_Paypal_Model_Config</config> </rewrite> </paypal> </models> <events> <controller_action_predispatch_paypal_express_review> <observers> <avoe_paypal_predispatch> <type>singleton</type> <class>Avoe_Paypal_Model_Observer</class> <method>paypalExpressReturnPredispatch</method> </avoe_paypal_predispatch> </observers> </controller_action_predispatch_paypal_express_review> </events> </global> </config> 

app / etc / Avoe_Paypal.xml

 <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Avoe_Paypal> <active>true</active> <codePool>local</codePool> <depends> <Mage_Paypal /> </depends> </Avoe_Paypal> </modules> </config> 

2) Riscrivi la configuration, aggiungi useraction 'commit':

 <?php class Avoe_Paypal_Model_Config extends Mage_Paypal_Model_Config { /** * Get url for dispatching customer to express checkout start * Added useraction 'commit' to remove PayPal Express Checkout review page * * @param string $token * @return string */ public function getExpressCheckoutStartUrl($token) { return $this->getPaypalUrl(arrays( 'cmd' => '_express-checkout', 'useraction' => 'commit', 'token' => $token, )); } } 

3) Crea osservatore per redirect:

 <?php class Avoe_Paypal_Model_Observer { function paypalExpressReturnPredispatch($observer) { Mage::app()->getResponse()->setRedirect(Mage::getUrl('*/*/placeOrder')); } } 

C'è anche una piccola estensione Magento che è stata appena rilasciata ieri, per rimuovere la fase di revisione:

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

Quindi il giusto accordo lì, che funziona perfettamente (per me) è una sintesi di quanto sopra:

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

e cerca in returnAction () per:

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

Lì devi cambiare:

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

a:

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

2. Vai a: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php e cambia il:

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

a:

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

Con le 2 modifiche sopra, ho trovato il modo di saltare la pagina di revisione in Magento Paypal Express Checkout.

La risposta di Andrew Angel in realtà non evita la pagina di conferma, cambia semplicemente il valore del button in "Paga" piuttosto che in "Conferma", o qualcosa del genere.

Ad each modo, il modo corretto per farlo è andare a \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php , per getExpressCheckoutEditUrl($token) metodo getExpressCheckoutEditUrl($token) e cambiare

 'useraction' => 'continue', 

a

 'useraction' => 'commit'. 

Per la conferma della pagina utente di conferma in Paypal Express è sufficiente modificare una row sull'azione del controller. Vai su Mage / Paypal / Controller / Express / Abstract.php e cerca $this->_redirect('*/*/review') ; in returnAction() . Lì devi cambiare

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

a

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

In questo modo, quando paypal ritorna per restituire l'azione, si evita di mostrare l'intera pagina di revisione e il pagamento è stato automaticamente confermato. Quindi, Paypal reindirizza nuovamente alle pagine di successo allo stesso modo del metodo standard PayPal.

@Toni La parte di redirect url funziona in modo eccellente, grazie! Tuttavia, il passaggio da "continua" a "commit" non ha modificato i pulsanti sul sito web di PayPal. Tuttavia, sono stato in grado di risolverlo effettuando le seguenti operazioni: proprio sopra la function getExpressCheckoutEditUrl in cui Toni ha richiesto di modificare il continuare a eseguire il commit, esiste la function getExpressCheckoutStartUrl. Se si aggiunge la variabile useraction lì, functionrà. Funzione originale:

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

Nuova function:

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

Si noti che 'useraction' => 'commit', è stato aggiunto alla nuova function. Questo dovrebbe funzionare!

C'era un passo mancante fammi riassumere l'integer process di nuovo.

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

e cerca in returnAction () per:

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

Lì devi cambiare:

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

a:

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

2. Vai a: \ app \ code \ core \ Mage \ Paypal \ Model \ Config.php e cambia il:

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

a:

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

3. Con le suddette due modifiche verrai comunque indirizzato alla pagina di revisione e dovrai accettare i termini e le condizioni, per evitare che ciò accada:

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

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

Commenta le seguenti righe con un semplice // all'inizio:

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

L'unica volta in cui verrai indirizzato alla pagina di revisione è se i clienti di PayPal restituiscono un errore rifiutato.

Magento 1.9 ha il supporto integrato per questa opzione, l'opzione Passa ordine di revisione , ma ha un piccolo avvertimento. La function non funziona con i pulsanti "Scorciatoia" che è ansible visualizzare sui dettagli del prodotto e sulle pagine del carrello.

Il mio suggerimento, disabilitare i pulsanti di scelta rapida e abilitare l'opzione Salta Review Review Step . Per ulteriore credito puoi riorganizzare il stream di pagamento di Onepage in modo che i clienti non debbano inserire le informazioni di fatturazione due volte (una volta su Magento e nuovamente su PayPal).

Maggiori dettagli disponibili in questo post del blog .