如何在 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() 设置的数据?

如何在magento中使用付款方式取消订单

Magento 2:如何在 Paypal Express 中即时更改付款方式

如何获取 Magento 的付款信息?

在magento上拆分付款流程?

在magento中自动从paypal捕获付款