PayPalのアドレスは、デフォルトアドレスとして保存されました
質問
PayPalを通じて仮想製品を購入する新しい顧客は、請求先住所をMagentoに渡しました。アドレスは注文に添付されていますが、顧客には添付されていません。これを顧客に添付し、それをアカウントのデフォルトの請求アドレスとして設定する最良の方法は何ですか?
解決
あなたはを利用したいと思うでしょう predispatch
のイベント Mage_Paypal_IpnController
クラス:
Predispatchのオブザーバーを処理するために、カスタムモジュールにXMLを作成します。
<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);
}
}
}
私は IPNの形式は確かではありません, 、だからキー $data
上記のオブザーバーで 変更する必要がある場合があります 調整。また、私は ビジネスルールがわかりません, 、だから現時点では設定されています すべてのIPNカスタマーアドレス デフォルトでは、最新の注文にあったものは何でも。これは 生産対応ではありません, 、しかし、あなたはそこの方法の90%を取得します。
所属していません magento.stackexchange