Domanda

Un nuovo cliente che effettua un acquisto prodotto virtuale tramite PayPal ha il proprio indirizzo di fatturazione passato a Magento. L'indirizzo è attaccato alla fine, ma non è attaccato al cliente. Quale sarebbe il modo migliore per collegare questo al cliente e anche impostarlo come l'indirizzo di fatturazione di default sul proprio conto?

È stato utile?

Soluzione

Si sta andando a voler rubinetto in caso predispatch della classe Mage_Paypal_IpnController:

Creare il codice XML nel modulo personalizzato per gestire l'osservatore per il 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);
        }

    }

}

sono non certo del formato del IPN , quindi le chiavi $data nell'osservatore sopra può richiedere modifiche per regolare. Inoltre, sono non è sicuro delle regole di business , quindi al momento imposta tutti gli indirizzi IPN clienti per l'impostazione predefinita a tutto ciò che era in loro ordine più recente. Questo è non pronto per la produzione , ma si ottiene il 90% della strada.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top