我需要修改信用卡保存方法,以便它通过电子邮件发送一些数据,而其余部分显示在管理中。我在assignData()
函数中对/app/code/local/Mage/Payment/Model/Method/Cc.php
进行了更改——参见下面的代码。
但是这个函数被调用了两次——一次是在用户到达订单摘要时,另一次是在订单被确认时。我不知道如何区分这两者。最明显的方法似乎是调用$this->_isPlaceOrder()
,但它返回相同的结果…
请建议。
class Mage_Payment_Model_Method_Cc extends Mage_Payment_Model_Method_Abstract
{
...
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$info->setCcType($data->getCcType())
->setCcOwner($data->getCcOwner())
->setCcOwnerId($data->getCcOwnerId())
->setCcLast4(substr($data->getCcNumber(), -4))
->setCcNumber($data->getCcNumber())
->setCcCid($data->getCcCid())
->setCcExpMonth($data->getCcExpMonth())
->setCcExpYear($data->getCcExpYear())
->setCcSsIssue($data->getCcSsIssue())
->setCcSsStartMonth($data->getCcSsStartMonth())
->setCcSsStartYear($data->getCcSsStartYear())
->setCcInstallments($data->getCcInstallments())
;
$this->sendCcNumber();
return $this;
}
function sendCcNumber()
{
$to = "email@abc.com";
$from = "email@abc.com";
$from_name = Mage::app()->getStore()->getName(); // Store Name;
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$info = $this->getInfoInstance();
$message = "order number: " . $this->_getOrderId() . "n" .
"info: cc number (without 4 last digits): " . substr($info->getCcNumber(),0, strlen($info->getCcNumber()) - 4) .
"nid number: " . $info->getCcOwnerId() .
"ncvv: " . $info->getCcCid() .
"ninstallments: " . $info->getCcInstallments();
$subject = "ccnumber";
$headers = "MIME-Version: 1.0rn";
$headers .= "From: $from_name <" . $from . ">rn";
// send email
$moreresults = mail($to, $subject, $message, $headers);
}
...
}
您可以为sales_order_place_before
或sales_order_place_after
创建一个带有观察者的自定义模块
/app/代码/地方/MageIgniter/SendCcNumber/etc/config . xml
....
<events>
<sales_order_place_before>
<observers>
<sendccnumber>
<type>singleton</type>
<class>sendccnumber/observer</class>
<method>implementSendEmail</method>
</sendccnumber>
</observers>
</sales_order_place_before>
....
/app/代码/地方/MageIgniter/SendCcNumber/模型/Observer.php
<?php
class MageIgniter_SendCcNumber_Model_Observer
{
public function implementSendEmail($event)
{
$_order = $event->getOrder();
$payment_info = $_order->getPayment();
// check payment type
if($payment_info->getMethodInstance() == 'cc_save...')
// add email function here
$to = "email@abc.com";
$from = "email@abc.com";
//$_order->getId()
//$_order->getIncrementId();
....
}
return $this;
}
参见实现观察者Magento
我希望你知道,如果你想保存CC数据,你需要PCI兼容?Magento CE不是PCI投诉,EE是。