Frage

Ein neuer Kunde, der über PayPal einen virtuellen Produktkauf tätigt, hat seine Abrechnungsadresse an Magento verabschiedet. Die Adresse ist der Bestellung beigefügt, aber nicht dem Kunden beigefügt. Was wäre der beste Weg, um dies dem Kunden beizubringen und auch als Standard -Abrechnungsadresse auf ihrem Konto festzulegen?

War es hilfreich?

Lösung

Sie werden in die anziehen wollen predispatch Ereignis der Mage_Paypal_IpnController Klasse:

Erstellen Sie das XML in Ihrem benutzerdefinierten Modul, um den Beobachter für das Predispatch zu verarbeiten:

<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);
        }

    }

}

Ich bin Nicht sicher das Format des IPN, so die Schlüssel von $data im obigen Beobachter Möglicherweise müssen geändert werden anpassen. Ich bin auch Ich bin mir der Geschäftsregeln nicht sicher, also im Moment setzt es Alle IPN -Kundenadressen zur Standardeinstellung zu allem, was auf ihrer jüngsten Bestellung war. Das ist nicht produktionsbereit, aber bringt dir 90% des Weges dort.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top