在magento自定义支付网关集成中不调用void方法

时间:2011-12-26 12:09:20

标签: magento payment-gateway payment

编辑:这是一个修改过的问题,我希望它会给我一些答案:) (最初的问题在线下面)

我正在尝试在magento中集成自定义付款方式,其工作流程类似于Paypal Standard。这意味着用户将被重定向到支付网关以填写CC详细信息。到目前为止,我已经实现了这部分,它的工作非常好。

问题是当从管理员取消订单时,我需要调用支付网关的更新API。因此,在自定义付款方式模型类中,我将$_canVoid变量设置为true并实现了void方法,该方法将调用api。但它没有得到调用。

在查找调用函数并在magento的核心代码中放置断点后,我发现void未被调用,因为canVoid的{​​{1}}方法返回false,而这又是因为以下表达式的计算结果为false

Mage_Sales_Model_Order_Payment

我认为这是因为我没有在付款方式模型中实施$authTransaction = $this->getAuthorizationTransaction();方法。所以我添加了authorize方法,但即使这样也没有被调用。在config.xml文件中,在payment_action节点中添加了“authorize”。

我无法弄清楚何时以及何时会授权方法被调用,以及我必须做什么才能使订单取消时无效。

请帮助..


原始问题:

我需要对支付网关相关概念(如授权和捕获)有一些基本的了解。

为了给出背景,我正在尝试在magento中集成类似于paypal标准的支付网关。我已经完成了整合的结账部分。即,在结账时,带有参数的隐藏表格将以PayPal形式提交,购物者在支付网关网站上输入信用卡详细信息。这部分效果很好..

除此之外,我还需要调用支付网关的update-api,以便在取消任何订单时将交易状态设置为已取消。所以我在我的付款方式模型类

中添加了以下代码
authorize

但这种方法根本没有被调用。看完代码之后,似乎就是这样 magento查找授权事务,如果没有找到,则不调用上述void方法。这是否意味着首先调用authorize方法然后只有它可以是无效的?但是,当用户在支付网关网站上输入信用卡详细信息时, 根据我的理解,我不需要实现授权和捕获,因为它由网关服务处理。如果这是错误的,请更正..

我检查了magento中的Paypal标准代码,并且那里也没有void方法。这是否意味着对于PayPal标准,如支付网关,这在magento中不起作用?

感谢任何帮助。

PS。我已经经历过这个问题 - Magento Payment flow但是它并不能解释为什么在我的情况下不会调用void方法。

1 个答案:

答案 0 :(得分:1)

如果您想取消授权,您必须阻止交易被关闭。

当然你可以做坏事(重新实现_addTransaction就像authorize.net实现一样)

但最好的方法是在自定义支付网关的authorize方法中使用false调用setIsTransactionClosed方法。

这是一个未记录的功能,您将很难在IDE中找到它,因为此方法通过PHP的magic __call方法设置Mage_Sales_Model_Order_Payment的内部成员。

$payment->setIsTransactionClosed(false);