Nous utilisons Magento EE 1.13.0.2 avec le mode de paiement PayPal Website Payments Standard . Malheureusement, il n'est pas possible de définir un statut de commande pour les commandes PayPal payées dans le back-end.
Nous devons définir un statut de commande personnalisé lorsque la commande a été payée avec succès (et non partielle). Les didacticiels pour modifier l'état d'une commande PayPal semblent être des hacks obsolètes, erronés ou laids.
D'après ce que j'ai rassemblé:
- les mises à jour de paiement seraient gérées par PayPal IPN.
- Il existe une méthode
Mage_Paypal_Model_Ipn::_registerPaymentCapture()
responsable du «Traitement du paiement terminé (intégral ou partiel)». - Dans
Mage_Paypal_Model_Ipn::_registerTransaction()
la demande de PayPal est analysée et l'état du paiement est comparé àMage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED
.
Pour être honnête, je ne sais pas quoi faire de ces informations. Je peux réécrire Mage_Paypal_Model_Ipn::_registerTransaction()
et simplement ajouter mon code:
// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
$this->_registerPaymentCapture(true);
// my code here
break;
Bien sûr, un observateur d'événement (par exemple pour l'un des événements de la commande ou de l'état de la commande) serait beaucoup plus agréable, mais je ne suis pas sûr qu'il existe un moyen fiable à 100% de capturer cet événement unique lorsque la commande est entièrement payée via PayPal. .
Des idées?
Mise à jour
Nous avons choisi de modifier notre flux de statut de commande et n'avons plus besoin de modifier le statut. Je vais laisser la question ouverte pendant un certain temps au cas où quelqu'un voudrait y répondre.
la source
Je me suis retrouvé avec une autre solution. Après avoir lutté avec ce problème pendant quelques heures, j'ai réalisé que dans mon cas particulier, peu importait que seules les commandes PayPal aient un statut particulier (c'est pour une connexion ERP, qui recherche les commandes dans un statut particulier).
PayPal ne définit pas le statut de la commande. Il capture simplement le paiement. Magento définit l'état de la commande sur Traitement (voir
Mage_Sales_Model_Order_Payment::registerCaptureNotification()
) et définit l'état sur l'état par défaut dans cet état.Tout ce que j'avais à faire était de changer l' état par défaut dans l'état Traitement en l'état dont j'avais besoin via l'interface d'administration ( Système » Statuts de commande ).
J'espère que cela aide quelqu'un!
la source