Adresse Paypal Enregistré en tant qu'adresse par défaut
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?
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.