2010-07-08 3 views
1

Je travaille sur un module personnalisé qui doit savoir si/quand un utilisateur a interrompu le processus de paiement. "Abandonner" signifie simplement qu'ils ont atterri sur l'indexAction de la caisse, mais n'ont pas terminé le processus. Il est absolument essentiel que je sache si/quand cela arrive.Magento: Comment déterminer si le client a abandonné le processus de paiement

Je pensais peut-être définir une variable de session qu'ils ont entré en caisse. A chaque chargement de page, faites exécuter un bloc de code qui vérifie cette variable. Si true, il vérifiera quel contrôleur est utilisé. Si ce n'est pas le contrôleur de caisse, je saurai qu'ils sont partis.

Deux problèmes avec mon idée:

  1. Je n'ai pas la moindre idée où mettre ce code contrôleur vérification de sorte qu'il fonctionne sur chaque chargement de page.
  2. Je ne sais pas comment trouver quel contrôleur gère la requête.

Je serais reconnaissant si vous pouviez aider à répondre à ces questions, ou même suggérer une meilleure approche!

Répondre

0

Puisque j'ai besoin de savoir en temps réel l'instant où un visiteur a quitté la caisse, j'ai utilisé une variable de session nommée IsUserInCheckout. Ce paramètre est défini sur true lorsque le paramètre indexAction() de la caisse est exécuté. J'ai ensuite créé un observateur d'événements qui a fonctionné avant que la demande ne soit envoyée à un contrôleur. Il vérifie quel contrôleur est appelé. Si la demande n'est pas pour le contrôleur de caisse, je regarde la variable de session pour voir si l'utilisateur a commencé la vérification. Une fois que j'ai exécuté une logique personnalisée, je change la variable de session IsUserInCheckout en false. Je me sens assez léger. Il fonctionne avec chaque chargement de page, mais 98% du temps il lit les variables de session, voit false, et ne fait rien.

2

Je prendrais une approche légèrement différente du problème du chariot abandonné.

Chaque fois que vous "créez un panier" en ajoutant un produit, vous créez un Mage_Sales_Model_Quote que magento stocke dans la base de données. Chaque fois que vous terminez une commande, vous créez un objet Mage_Sales_Model_Order. Les objets Mage_Sales_Model_Order conservent une référence à leurs ID de devis d'origine. Par conséquent, vous pouvez effectuer une requête pour toutes les commandes afin d'obtenir une liste d'ID de devis, puis créer une collection de devis et filtrer les devis pour lesquels il existe des commandes. Cela vous donnera une liste de chaque fois qu'un panier a été abandonné.

//may start to degrade as orders pile up. Add date filters to 
//prevent or look into properly joining things in. 
$orders = Mage::getModel('sales/order') 
->getCollection() 
->addAttributeToSelect('*'); 

var_dump('Order Count', count($orders)); 

$quote_ids = $orders->getColumnValues('quote_id'); 
$quote_ids = array_filter($quote_ids, 'is_numeric'); 

$carts  = Mage::getModel('sales/quote') 
->getCollection(); 

var_dump('All Cart Count:'); 
var_dump(count($carts)); 

$carts  = Mage::getModel('sales/quote') 
->getCollection() 
->addFieldToFilter('entity_id',array('nin'=>$quote_ids)); 

var_dump('Filtered Cart Count:'); 
var_dump(count($carts)); 

foreach($carts as $cart) 
{ 
    var_dump('abandoned cart', $cart); 
} 

En ce qui concerne vos autres questions, ils sont trop impliqués pour répondre à une seule question de débordement de pile. Je voudrais read up sur Magento pour avoir une idée de l'architecture de base, puis utiliser la démo en direct Commerce Bug pour savoir quel contrôleur vous recherchez. (Les deux projets liés à ci-dessus sont à moi, auto lien, acheteur méfiez-vous, etc.)

+0

Merci pour l'aide détaillée Alan! Malheureusement j'avais besoin de savoir en temps réel (pour l'utilisateur actuel seulement) donc votre solution n'était pas pratique dans ce cas. J'ai cependant beaucoup appris, et je digère vraiment votre module Commerce Bug! Merci encore :) –

+0

Merci pour cet Alan, et comme ci-dessus, j'ai aussi vraiment creuser votre Commerce Bug Extension! –

Questions connexes