4

Magentoで仮想製品を拡張する新しいカスタム製品タイプを作成しました。ここで、オンライン支払いの自動請求をブロックしたいと思います。注文に少なくとも1つのカスタム製品タイプが含まれている場合のペイパル。このような製品を使用したすべての注文は、手動で請求する必要があります。これをどのように解決すればよいですか?

4

1 に答える 1

5

これに対する最善のアプローチは、支払い回収プロセス中にスローされたイベントにオブザーバーを登録することですが、残念ながら、関連するイベントはあまり多くありません。sales_order_invoice_save_beforesave()を傍受しようとすることもできますが、請求書の保存が失敗した理由についてコントローラーを混乱させる可能性があるため、私はそれに熱心ではありません。

Paypalコードを見ると、成功を要求し、成功をMage_Paypal_Model_Ipn::_processOrder()要求していることがわかります。$this->_registerPaymentCapture()$payment->registerCaptureNotification()

Mage_Sales_Model_Order_Payment::registerCaptureNotification($amount)まだ存在せず、支払いが注文の全額である場合は、新しい請求書を作成します。この方法を使用して_isCaptureFinal($amount)これを確認します。

1つのオプションは、次の行に沿ってコードを拡張Mage_Sales_Model_Order_Paymentおよびオーバーライドすることです。_isCaptureFinal($amount)

foreach($this->getOrder()->getAllItems() as $oOrderItem){
  if($oOrderItem()->getProduct()->getTypeId() == 'your_custom_product_type'){
    return false;
  }
}
return parent::_isCaptureFinal($amountToCapture);

親への最後の呼びかけを忘れないでください!

これはすべてカスタムモジュールで行い(必要に応じてModuleCreatorから開始します)、以下をconfig.xmlに挿入します。

<global>
    <models>
        <modulename>
            <class>Namespace_Modulename_Model</class>
        </modulename>
        <sales>
            <rewrite>
                <order_payment>Namespace_Modulename_Model_Order_Payment</order_payment>
            </rewrite>
        </sales>
    </models>

標準の免責事項が適用されます。ここでは資金取引をいじっています。そのため、実際に徹底的にテストするようにしてください。

このアプローチはMage_Sales_Model_Order_Payment::registerCaptureNotification($amount)、Paypalだけでなく、を呼び出すすべての支払い方法に適用されることに注意してください。

幸運、
JD

于 2011-02-17T02:32:41.887 に答える