付款发票中没有交易ID

时间:2014-03-04 13:47:29

标签: magento payment-gateway invoices

我为Magento开发了付款方式扩展程序。在此扩展中,我添加了:

protected $_canRefund = true;

然而,当我点击发票并选择Credit Memo时,我只能看到'退款离线'而不是'退款'。我遵循的所有教程都坚持认为我只需将该值更改为true即可激活按钮(显然我仍然需要实施退款方法和实际的退款程序),但我看不到这样做的方法。

如果我在订单屏幕上的一个区块内执行此行$order->getPayment()->getMethodInstance()->canRefund();,它确实会返回true,但实际的贷记凭证仍然没有运气。

修改

我已经改变了问题的标题以反映我的新发现 基本上,它没有出现的原因是因为我的发票不是用交易ID创建的 - 我不知道为什么,但这是我在生成发票时运行的捕获付款方式:

public function capturePayment($order) {
    try {
        if (!$order->canInvoice()) {
            Mage::throwException(Mage::helper('core')->__('Cannot create an invoice.'));
        }
        $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
        if (!$invoice->getTotalQty()) {
            Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without products.'));
        }
        $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
        $invoice->register();
        $transactionSave = Mage::getModel('core/resource_transaction')
               ->addObject($invoice)
               ->addObject($invoice->getOrder());
        $transactionSave->save();
        $order->setState('processing', 'payment_received', "Payment has been received", false);
        $order->save();
    } catch (Mage_Core_Exception $e) {
        Mage::throwException("Error Taking Payment, Please Try Again:\n" . $e);
    }
}

为什么没有为我的捕获分配交易ID?