Question

Un nouveau client qui fait un achat de produit virtuel via paypal a son adresse de facturation est passé à Magento. L'adresse est attaché à l'ordre mais n'est pas attaché au client. Quelle serait la meilleure façon de joindre ce au client et définir également comme l'adresse de facturation par défaut sur leur compte?

Était-ce utile?

La solution

Vous allez vouloir puiser dans l'événement predispatch de la classe Mage_Paypal_IpnController:

Créer le fichier XML dans votre module personnalisé pour gérer l'observateur de la preDispatch:

<global>
    <events>
        <controller_action_predispatch_paypal_ipn_index>
            <observers>
                <mymodule_paypal_ipn_index>
                    <type>singleton</type>
                    <class>yourmodel/observer</class>
                    <method>ipnPreDispatch</method>
                </mymodule_paypal_ipn_index>
            </observers>
        </controller_action_predispatch_paypal_ipn_index>
    </events>
</global>

Observer.php:

<?php

class YourCompany_YourModule_Model_Observer
{

    public function ipnPreDispatch($observer)
    {
        //get the request object and post data
        $data = $observer->getControllerAction()->getRequest()->getPost();

        //get the email address
        $email = $data['email_address'];

        //get the customer via the email
        $customer = Mage::getModel("customer/customer")->loadByEmail($email);

        //set the customer default address
        $default_address = array (
            'firstname' => $data['first'],
            'lastname' => $data['last'],
            'street' => array (
                '0' => $data['street1'],
                '1' => $data['street2'],
            ),
            'city' => $data['city'],
            'region_id' => $data['state'],
            'postcode' => $data['zipcode'],
            'country_id' => $data['country'],
            'telephone' => $data['telephone'],
        );
        $address = Mage::getModel('customer/address');

        $address->setData($default_address)
                    ->setCustomerId($customer->getId())
                    ->setIsDefaultBilling('1')
                    ->setIsDefaultShipping('1')
                    ->setSaveInAddressBook('1');
        try {
            $address->save();
        } catch(Exception $e) {
            Mage::logExeption($e);
        }

    }

}

Je suis pas sûr du format de l'IPN , de sorte que les clés de $data dans l'observateur ci-dessus peut être nécessaire de modifier pour ajuster. En outre, je suis pas sûr des règles métier , donc au moment où il met toutes les adresses des clients IPN à la valeur par défaut à tout ce qui était sur leur ordre le plus récent. Ceci est pas prêt pour la production , mais vous obtient 90% du chemin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top