【发布时间】:2012-01-27 23:13:13
【问题描述】:
编辑:这是一个修改后的问题,我希望它能给我一些答案 :) (原题在下面)
我正在尝试在 magento 中集成一种自定义付款方式,其中的工作流程类似于 Paypal Standard。这意味着用户将被重定向到支付网关以填写 CC 详细信息。到目前为止,我已经实现了这部分,并且运行良好。
问题是当管理员取消订单时,我需要调用支付网关的更新api。所以在自定义支付方式模型类中,我将$_canVoid 变量设置为true 并实现了一个void 方法,该方法将调用api。但它没有被调用。
在查找调用函数并在magento的核心代码中放置断点后,我发现void没有被调用,因为Mage_Sales_Model_Order_Payment的canVoid方法返回false,这反过来是因为下面的表达式计算为false
$authTransaction = $this->getAuthorizationTransaction();
我认为这是因为我没有在支付方式模型中实现authorize 方法。所以我添加了authorize 方法,但即使这样也没有被调用。在 config.xml 文件中,“authorize”被添加到 payment_action 节点中。
我无法弄清楚何时以及从何处调用授权方法,以及我必须做什么才能使订单取消时无效。
请帮忙..
原问题:
我需要对授权和捕获等支付网关相关概念有一些基本了解。
为了提供背景,我正在尝试在 magento 中集成类似于 paypal 标准的支付网关。我已经完成了集成的结帐部分。即在结账时,一个带有参数的隐藏表单会像在贝宝中一样提交,并且购物者在支付网关站点上输入信用卡详细信息。这部分效果很好..
现在除此之外,每当取消任何订单时,我都需要调用支付网关的 update-api 将交易状态设置为已取消。所以我在我的支付方式模型类中添加了以下代码
protected $_canVoid = true;
public function void(Varien_Object $payment) {
// some code here..
var_dump($payment); exit;
}
但是这个方法根本没有被调用。看了下代码,好像 magento 查找授权事务,如果未找到,则不调用上述 void 方法。这是否意味着必须先调用 authorize 方法,然后才可以 void ?但是随着用户在支付网关网站上输入信用卡详细信息, 据我了解,我不需要实现授权和捕获,因为它由网关服务处理。如有错误请指正..
我检查了 Magento 中的 Paypal 标准代码,那里也没有 void 方法。这是否意味着对于像支付网关这样的贝宝标准,这在 magento 中不起作用?
感谢任何帮助。
PS。我已经解决了这个问题-Magento Payment flow,但这并不能完全解释为什么在我的情况下不会调用 void 方法。
【问题讨论】:
-
您访问过这个网站吗? Creating Your Own Payment Gateway
-
感谢您的链接。我看到这是用于商店网站本身接受信用卡信息的付款方式。在我的例子中,购物者在支付网关的网站上输入 cc 详细信息。所以我想,magento 中的支付方式类不需要授权/捕获。但是当订单被取消并单击贷项通知单时,我需要调用 update-api 以取消/退款。我的问题是,这是可能的还是我没有清楚地理解授权/捕获/无效(一般)的概念?
标签: magento payment-gateway payment