首页 文章

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

提问于
浏览
2

Edit :这是一个修改过的问题,我希望它会给我一些答案:)(原来的问题在线下)

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

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

在查找调用函数并在magento的核心代码中放置断点之后,我发现 void 未被调用,因为 Mage_Sales_Model_Order_PaymentcanVoid 方法返回false,这反过来是因为下面的表达式求值为false

$authTransaction = $this->getAuthorizationTransaction();

我认为这种情况正在发生,因为我还没有在付款方式模型中实现 authorize 方法 . 所以我添加了 authorize 方法,但即使这样也没有被调用 . 在config.xml文件中,"authorize"添加在payment_action节点中 .

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

请帮忙..


Original Question:

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

为了给出背景,我试图在magento中集成类似于paypal标准的支付网关 . 我已经完成了整合的结账部分 . 即结账时,带有参数的隐藏表格将以paypal和 the shopper enters the credit card details on the payment gateways site 的形式提交 . 这部分效果很好..

除此之外,我需要调用支付网关的update-api,以便在取消任何订单时将交易状态设置为取消 . 所以我在我的付款方式模型类中添加了以下代码

protected $_canVoid = true;

public function void(Varien_Object $payment) {
    // some code here.. 
    var_dump($payment); exit; 
}

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

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

任何帮助表示赞赏 .

PS . 我已经经历了这个问题 - Magento Payment flow但在我的情况下它没有被调用 .

1 回答

  • 1

    如果要使授权无效,则必须阻止事务被关闭 .

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

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

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

    $payment->setIsTransactionClosed(false);
    

相关问题