Définir le statut de la commande personnalisée pour les paiements complets sur le site Web PayPal Paiement standard?

9

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.

Matthias Zeis
la source

Réponses:

2

Le gros problème est qu'il n'y a même pas un seul événement dans l'ensemble du flux de travail paypal.

Il y a donc deux options:

Réécrivez l'un de ces modèles Paypal

Comme vous l'avez dit, il suffit de réécrire le modèle, de changer le comportement et tout fonctionne comme prévu - avec un peu de chance ou ...

Accrochez-vous sales_order_save_before

Ensuite, vous vérifiez le type de paiement, qui devrait être \Mage_Paypal_Model_Standard::$_codeavec:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

Et puis, lorsque le statut est changé en celui que vous ne voulez pas, changez-le en celui que vous voulez.

Fabian Blechschmidt
la source
Merci Fabian, je suppose que nous n'aurons pas de meilleure solution dans Magento 1.x. :-)
Matthias Zeis
0

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!

Mark van der Sanden
la source