1

私はライブの Magento 1.5.0.1 Web ショップを持っていますが、次の問題があります。

iDEAL (オランダのオンライン決済サービス) を通じて支払いが行われた注文を受け取りました。支払いが完了すると、請求書が自動生成されました。また、銀行口座に金額を受け取りました。

唯一のことは、「Total due」フィールドが 0 (ゼロ) より大きい金額であるため、注文を完了することができないということです。これは、iDEAL モジュールのバグに違いありません (別の機会に対処します)。

Total due フィールドを 0 に設定して、この特定の注文を「完了」させる方法はありますか?

明らかに、そうするための PHP コードの例は大歓迎です (私自身プログラマーです)。

4

1 に答える 1

2

これはあなたを助けるかもしれません。

モジュールの例:

$order = Mage::getModel('sales/order')->loadByIncrementId($incrementId);
if ($order->getTotalPaid() == 0) {
    $invoice = $order->prepareInvoice();
    $invoice->register()->capture();
    Mage::getModel('core/resource_transaction')
        ->addObject($invoice)
        ->addObject($invoice->getOrder())
        ->save();
    $order->save();

これは、支払いがまだ登録されていないかどうかを確認し (ユーザーが複数回クリックして成功したリクエストを送信する可能性があります)、請求書を作成して登録し、請求書と注文をキャプチャして保存します。

編集1

private function markOrderPayd($incrementId, $status) {
        $order = Mage::getModel('sales/order')->loadByIncrementId($incrementId);
        if ($order->getTotalPaid() == 0) {
            ... 
            $order->save();
            $invoice = $order->prepareInvoice();
            $invoice->register()->capture();
            ...
            Mage::getModel('core/resource_transaction')
                ->addObject($invoice)
                ->addObject($invoice->getOrder())
                ->save();
            $order->save();
            ...

        } else {
            ...
            $order->save();
        }
}

小切手がないと思うので、2 つの請求書が生成されます。

于 2012-03-16T07:58:19.313 に答える