Magento:发票并获取授权订单

时间:2014-05-07 21:43:56

标签: magento magento-1.7 magento-1.8

我正在为支付网关开发一个模块,可以通过两个不同的步骤进行授权和捕获。到目前为止,我可以通过运行以下代码来授权订单:

class My_Gateway_Model_Method_Cc extends Mage_Payment_Model_Method_Cc
{
    protected $_code          = 'mycode';
    protected $_canSaveCc     = true;

    protected $_canRefund                   = true;
    protected $_isGateway                   = true;
    protected $_canAuthorize                = true;
    protected $_canCapture                  = true;
    protected $_canCapturePartial           = false;


    public function authorize(Varien_Object $payment, $amount){
        /* code to call the payment gateway and authorize the charge */
    }


    public function capture(Varien_Object $payment, $amount){
        /* some code to capture the payment */
    }
}

问题在于,当我下订单,然后我进入开发票面板时,我收到此消息:

  

'将创建发票而不与付款网关进行通信

没有选项可以捕获授权付款,也不会在开具发票时调用捕获方法。

3 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案:

基本上,Magento默认关闭任何授权交易,并且它允许选项在授权交易开放时捕获发票上的付款。因此,您所要做的就是将事务配置为保持开放状态(未关闭)

所以这就是我所做的:

public function authorize(Varien_Object $payment, $amount)
{
    // Leave the transaction opened so it can later be captured in backend
    $payment->setIsTransactionClosed(false);

    /*
     * Place all the code to connect with your gateway here!!!
     *
     */

    return $this;
}

答案 1 :(得分:0)

您已设置

$_isGateway = true;

所以你还需要设置网关URL

在您的付款模式中,扩展Mage_Payment_Model_Method_Abstract的付款模式,您需要实施该方法:

function getOrderPlaceRedirectUrl() {
    return 'http://www.where.should.we.pay.com/pay';
}

通常,您将用户重定向到站点上的页面,例如/ mymodule / payment / redirect,然后在控制器的操作中处理重定向逻辑。这可以使您的付款模式保持清洁和无状态,同时允许您使用某种类型的"您现在正被转移到网关进行付款"消息。

保存您需要的所有内容,以确定在会话变量中重定向的位置,通常也是Mage::getSingleton('checkout/session')

对于Paypal标准,Magento有一个非常可靠,如果很混乱的实现。您可以在app/code/core/Mage/Paypal/{Model/Standard.php,controllers/StandardController.php}中查看他们是如何做到的。

答案 2 :(得分:0)

最后查看此blog Magento交易部分。

if($result['status'] == 1){  // on success result from payment gateway
    $payment->setTransactionId($result['transaction_id']);
    $payment->setIsTransactionClosed(1);
    $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('key1'=>'value1','key2'=>'value2'));
}