Magento:如何重写getOrder getGrandTotal,以便在将值传递给支付模块时更改金额


Magento: how to override getOrder getGrandTotal for purpose of changing amount when passing the value to payment modules

我正试图以编程方式更改订单总额,以便允许用户支付部分付款。我尝试编辑核心文件Mage_Payment_Model_Info方法getMethodInstance

if (method_exists($instance,"getOrder")){
    $order = $instance->getOrder(); 
}else{
        $session = Mage::getSingleton('checkout/session');
        $order = Mage::getModel('sales/order');
        $order->loadByIncrementId($session->getLastRealOrderId());
}
$total=$order->getGrandTotal()/2;
$order->setGrandTotal($total);
我知道这不是最好的方法,但我正在尝试找到最好的方法。如何做到这一点?我计划将更改放在自定义模块中。所以不会将更改保存在core文件中。由于

我最近也做过类似的事情,遇到了一些大问题,但首先是好消息。

  • 收取的金额以发票为准,该部分的发票和订单的支付金额将适当增加。
  • 一个订单可以有多个发票。
  • 你不需要改变总数。保持完整,作为他们需要支付的记录。
然而,

  • 订单项每个都需要标记为发票。当订单只付了一半时,你必须计算出哪些项目是明智的。如果一个订单有一个10美元的项目和一个100美元的项目,由第一个20美元支付?
  • 订单不能多付。由于一个错误的假设,所欠金额和已支付金额之间的差额("到期")不会显示负数,这是一个谬误,使得一次支付两个未决订单非常困难。

我没有及时想到的一种方法是为每个客户开设信用账户。当付款少于整个订单时,将其添加到帐户中,暂时不支付订单。允许任意(预先)付款到账户。一旦帐户足够大,可以使用它来支付订单,您可能需要为此位创建一个支付模块。
或者它可以反过来工作,立即支付所有订单,并在信用账户中留下负余额,稍后再支付。我想这应该是最不痛苦的方法了。