Impostare lo stato dell'ordine personalizzato per il pagamento standard completo dei Pagamenti su sito web PayPal?


9

Stiamo utilizzando Magento EE 1.13.0.2 con il metodo di pagamento PayPal Pagamenti su sito web . Purtroppo nel back-end non è possibile impostare lo stato di un ordine PayPal pagato.

Dobbiamo impostare uno stato dell'ordine personalizzato quando l'ordine è stato pagato correttamente (e non parziale). I tutorial per modificare lo stato dell'ordine di PayPal sembrano essere hack obsoleti, sbagliati o brutti.

Da quello che ho raccolto:

  • gli aggiornamenti di pagamento sarebbero gestiti da PayPal IPN.
  • Esiste un metodo Mage_Paypal_Model_Ipn::_registerPaymentCapture()responsabile per "Elaborazione del pagamento completato (completo o parziale)".
  • Nella Mage_Paypal_Model_Ipn::_registerTransaction()richiesta da PayPal viene analizzato e lo stato del pagamento viene confrontato con Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED.

Ad essere sincero, non sono sicuro di cosa fare con queste informazioni. Potrei riscrivere Mage_Paypal_Model_Ipn::_registerTransaction()e aggiungere semplicemente il mio codice:

// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
    $this->_registerPaymentCapture(true);
    // my code here
    break;

Ovviamente un osservatore di eventi (ad esempio per uno degli eventi dell'ordine o dello stato dell'ordine) sarebbe molto più bello, ma non sono sicuro che esista un modo affidabile al 100% per catturare quell'evento singolo quando l'ordine viene pagato completamente tramite PayPal .

Qualche idea?

Aggiornare

Abbiamo scelto di modificare il flusso dello stato degli ordini e non è più necessario modificare lo stato. Lascerò la domanda aperta per qualche tempo nel caso in cui qualcuno voglia rispondere.

Risposte:


2

Il grosso problema è che non c'è nemmeno un singolo evento nell'intero flusso di lavoro di paypal.

Quindi ci sono due opzioni:

Riscrivi uno di questi modelli Paypal

Come hai detto, basta riscrivere il modello, cambiare il comportamento e tutto funziona come previsto - si spera o ...

Agganciare sales_order_save_before

Quindi controlla il tipo di pagamento, che dovrebbe essere \Mage_Paypal_Model_Standard::$_codecon:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

E quindi, quando lo stato viene modificato in quello che non si desidera, modificarlo in quello desiderato.


Grazie Fabian, immagino che non avremo una soluzione migliore in Magento 1.x. :-)
Matthias Zeis,

0

Ho finito con un'altra soluzione. Dopo aver lottato con questo problema per alcune ore, mi sono reso conto che nel mio caso particolare non importava se solo gli ordini PayPal avevano uno stato particolare (è per una connessione ERP, che cerca ordini in uno stato particolare).

PayPal non imposta lo stato dell'ordine. Cattura solo il pagamento. Magento imposta lo stato dell'ordine su Elaborazione (vedi Mage_Sales_Model_Order_Payment::registerCaptureNotification()) e imposta lo stato sullo stato predefinito all'interno di quello stato.

Tutto quello che dovevo fare era cambiare lo stato predefinito all'interno dello stato Elaborazione allo stato necessario tramite l'interfaccia di amministrazione ( Sistema » Stati degli ordini ).

Spero che questo aiuti qualcuno!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.