Die Adresse von PayPal als Standardadresse gespeichert
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?
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.