2

まず、Magento1.7を使用しています。

問題は、誰かがPayPalの異議申し立てを開くと、Magento内にクレジットメモの電子メールも作成され、顧客に返金されていないときに返金されたことを知らせる電子メールが送信されることです。代わりに、PayPalは紛争が解決するまで資金を保留します。

異議申し立てを解決しても、クレジットメモは残っているため、削除したりキャンセルしたりすることはできません。

誰かがこれが起こるのを防ぐ方法を知っていますか?

ありがとう。

マレク

4

1 に答える 1

1

これは、v1.4.0.1からv1.7.0.2にアップグレードした後に遭遇した新しいバージョンのMagentoで厄介なバグだと思います。それはv1.4.2.0の頃に起こったと思います。これがうまくいかない可能性のある方法はたくさんあります。なぜそれを追加するのが良い考えだと彼らが思ったのかわかりません。

このアクションを実行しているコードは、/ app / code / core / Mage / Sales / Model / Order / Payment.phpのMage_Sales_Model_Order_PaymentクラスのregisterRefundNotification()メソッドにあります。

http://www.magentocommerce.com/boards/viewthread/261158/でのtinpeaの修正により、registerRefundNotification()をオーバーロードし、問題のある部分をコメントアウトする必要があります。これは、v1.7.0.2では以下の部分になります。

$serviceModel = Mage::getModel('sales/service_order', $order);
if ($invoice) {
    if ($invoice->getBaseTotalRefunded() > 0) {
        $adjustment = array('adjustment_positive' => $amount);
    } else {
        $adjustment = array('adjustment_negative' => $baseGrandTotal - $amount);
    }
    $creditmemo = $serviceModel->prepareInvoiceCreditmemo($invoice, $adjustment);
    if ($creditmemo) {
        $totalRefunded = $invoice->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal();
        $this->setShouldCloseParentTransaction($invoice->getBaseGrandTotal() <= $totalRefunded);
    }
} else {
    if ($order->getBaseTotalRefunded() > 0) {
        $adjustment = array('adjustment_positive' => $amount);
    } else {
        $adjustment = array('adjustment_negative' => $baseGrandTotal - $amount);
    }
    $creditmemo = $serviceModel->prepareCreditmemo($adjustment);
    if ($creditmemo) {
        $totalRefunded = $order->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal();
        $this->setShouldCloseParentTransaction($order->getBaseGrandTotal() <= $totalRefunded);
    }
}

$creditmemo->setPaymentRefundDisallowed(true)
    ->setAutomaticallyCreated(true)
    ->register()
    ->addComment(Mage::helper('sales')->__('Credit memo has been created automatically'))
    ->save();

$this->_updateTotals(array(
    'amount_refunded' => $creditmemo->getGrandTotal(),
    'base_amount_refunded_online' => $amount
));

$this->setCreatedCreditmemo($creditmemo);
于 2012-08-31T12:18:49.660 に答える