Вопрос

Новый клиент, который совершает виртуальную покупку продукта через PayPal, передает свой счет для выставления счетов в Magento. Адрес прикреплен к заказу, но не прикреплен к клиенту. Как бы лучший способ прикрепить это к клиенту, а также установить его в качестве платежного адреса по умолчанию в своей учетной записи?

Это было полезно?

Решение

Вы захотите нажать на predispatch событие Mage_Paypal_IpnController учебный класс:

Создайте XML в своем пользовательском модуле, чтобы обрабатывать наблюдатель для 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>

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

    }

}

Я Не уверен в формате IPN, так что ключи $data в наблюдателе выше может потребоваться изменить чтобы настроить. Кроме того, я Не уверен в бизнес -правилах, Итак, в настоящее время он устанавливается Все адреса клиента IPN по умолчанию к тому, что было в их последнем порядке. Это не готовый к производству, но получает вам 90% пути.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top