All posts tagged email

logo_paypal

Il y a un bug dans Paypal Standard pour Magento, après qu’un client a effectué le processus d’achat et validé son paiement sur Paypal. Le client ne reçoit pas l’email incluant sa facture. Il ne reçoit seulement qu’une confirmation de paiement et un message, après le processus de paiement, lui indiquant que sa commande va être traitée.

Pour résoudre ce problème, deux possibilités:

  • Soit ajouter dans la classe (en faisant une surcharge de cette classe dans un module à vous) Mage_Paypal_Model_Standard (app/code/core/Mage/Paypal/Model/) à la ligne 418 après $invoice->register()->pay();, la ligne suivante: $invoice->sendEmail();
  • Soit créer un évènement (event) à l’aide d’une classe Observer.php qui se déclenchera après l’évènement sales_order_invoice_pay, qui dans Paypal standard démarre à la ligne 418, après le traitement $invoice->register()->pay(). Pour cela, vous dever créer un module (il y a plein de tutoriaux sur Google pour savoir comment on fait) avec les fichiers suivants (remplacer Name par le nom de votre Module):
    • /app/code/local/Name/Sales/etc/config.xml
    • /app/code/local/Name/Sales/Model/Observer.php
    • /app/etc/modules/Name_All.xm
En voici le contenu:
/app/code/local/Name/Sales/etc/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Name_Sales>
            <version>0.1.0</version>
        </Name_Sales>
    </modules>
    <global>
        <models>
            <sales>
                <rewrite>
                    <observer>Name_Sales_Model_Observer</observer>
                </rewrite>
            </sales>
        </models>
        <events>
            <sales_order_invoice_pay>
                <observers>
                    <sales_notification_observer>
                        <type>singleton</type>
                        <class>sales/observer</class>
                        <method>sendInvoiceEmail</method>
                    </sales_notification_observer>
                </observers>
            </sales_order_invoice_pay>
        </events>
    </global>
</config>

/app/code/local/Name/Sales/Model/Observer.php

<?php
/**
 * Event sales_order_invoice_pay
 *
 */
require_once 'Mage/Sales/Model/Observer.php';
class Name_Sales_Model_Observer extends Mage_Sales_Model_Observer {
 
    public function sendInvoiceEmail($observer) {
            $invoice = $observer->getEvent ()->getInvoice ();
 
            switch ($invoice->getState ()) {
                case Mage_Sales_Model_Order_Invoice::STATE_PAID :
 
		try {
			// Save first time the invoice to get an id and send the invoice to the customer with the correct id
			$invoice->save ();
			Mage::log ('Email sent to the customer by the Name/sales/observer - Invoice number ' . $invoice->getIncrementId(), Zend_Log::DEBUG );
			$invoice->sendEmail ();
			$invoice->setEmailSent ( true );
			// Save a second time to save the EmailSent value
			$invoice->save ();
		} catch ( Exception $e ) {
			$session = Mage::getSingleton ( 'core/session' );
			$exception = new Exception ( Mage::helper('Sales')->__('Error during the email sending.'), 0 );
			$session->addException ( $exception, Mage::helper('Sales')->__('Error to send invoice email. Please, contact the website administrator.') );
		}
            }
        return $this;
    }
}

/app/etc/modules/Name_All.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Name_Sales>
            <active>true</active>
            <codePool>local</codePool>
        </Name_Sales>
    </modules>
</config>

Dans Paypal Express, la ligne qui nous intéresse se situe dans le controller /app/code/core/Mage/Paypal/controllers/expressController.php, dans la méthode updateorderAction(){} ligne où ce code se situe: $invoice->register()->capture(); ajouté $invoice->sendEmail(); ou utiliser cet observer (non testé).

Pour plus d’informations concernant l’utilisation des évènements, je vous invite à visiter le site de Magento qui en fait une bonne explication: Customizing Magento using Event-Observer Method