如何在 Magento 的观察者中获取付款方式?
Posted
技术标签:
【中文标题】如何在 Magento 的观察者中获取付款方式?【英文标题】:How to get payment method in an observer in Magento? 【发布时间】:2011-09-05 18:56:23 【问题描述】:我有一个处理事件的观察者:sales_payment_invoice_pay(或类似的东西)。
如果付款方式是 PayPal,我要做的是发送发票。
在 1.4 版中一切正常~通过 $observer->getEvent()->getOrder()->getPayment->getMethodInstance()。
在 1.5+ 版本中,但我似乎找不到任何解决方案。 我也试过 getData() 但没有任何结果。
感谢任何帮助。谢谢
称我非常渴望得到答案是轻描淡写的。
【问题讨论】:
【参考方案1】:看起来传递给sales_order_invoice_pay
事件的唯一数据是$this
,这将是sales/order_invoice
模型。我通过搜索 Magneto 核心代码发现了这一点,它在 Invoice.php 中被触发,如下所示:
Mage::dispatchEvent('sales_order_invoice_pay', array($this->_eventObject=>$this));
查看一个类似事件 (sales_order_invoice_register
),它在核心中有一个观察者(至少是 Enterprise 的 - GiftCardAccount 中的increaseOrderGiftCardInvoicedAmount()
),您可以在 Observer 方法中访问 Invoice 对象,如下所示:
$invoice = $observer->getEvent()->getInvoice();
发票是你能得到的所有东西,因为它是dispatchEvent()
传递给观察者的唯一东西。您无法直接访问订单,就像您尝试做的那样。
然而,看看 Invoice 模型,它似乎有一个不错的 getOrder
方法,应该可以解决问题。我还没有测试过,但试试这个:
$observer->getEvent()->getInvoice()->getOrder()->getPayment->getMethodInstance();
干杯,祝你好运!
【讨论】:
不幸的是,它不起作用。我也是这样尝试的。 对不起,它还没有工作——我猜是时候淘汰Mage::log()
了。确保你的观察者首先被触发(如果你的事件没有被正确触发,什么都不会起作用!)。然后可能转储$observer->getEvent()->getInvoice()
返回的内容,以确保它是发票。继续沿着调用链向上工作,直到到达getMethodInstance
。网上有很多关于调试 Magento 的好文章,祝你好运。【参考方案2】:
我可以使用这个获取付款方式代码
$observer->getEvent()->getInvoice()->getOrder()->getPayment()->getMethodInstance()->getCode()
【讨论】:
【参考方案3】:使用 varien 对象的 debug() 函数是处理此类事情的一个不错的选择。像这样:http://pastebin.com/wtdJdeLq - 我无法让代码在这个站点上工作,不想再尝试了。检查 pastebin 链接。
这里有 order_id,像往常一样加载订单,getModel('...')(非常快),然后获取付款方式。
【讨论】:
【参考方案4】:使用此代码:$order->getPayment()->getMethodInstance()->getCode() ;
【讨论】:
以上是关于如何在 Magento 的观察者中获取付款方式?的主要内容,如果未能解决你的问题,请参考以下文章
Magento 自定义付款方式:如何获取通过 Mage_Payment_Model_Method_Abstract::assignData() 设置的数据?