2012-06-05 3 views
0

Мне нужно внести изменение способа оплаты в заказ после его размещения. У меня есть код заказа ($ OrderId), объект заказа ($ заказ), правильный объект оплаты и т.д.Magento Programmatically Edit Order Payment

$ сервис-> retrievePaymentType() Возвращает платеж в виде Mage_Sales_Model_Order_Payment

Все о это происходит в расширении Mage_Checkout_Model_Type_Onepage

Кто-нибудь знает, как я буду это делать?

$order = Mage::getModel('sales/order')->load($orderID); 

    $service = Mage::getModel('sales/service_quote', $this->getQuote()); 

    // Update Saved Order Payment Method 

    // $order->getPaymentsCollection()->clear(); 

    $order->setPayment($service->retrievePaymentType()); 

    $order->getPaymentsCollection()->save(); 

    $order->save(); 

Заранее благодарен!

+0

Функция "$ сервис-> retrievePaymentType()" от Mage_Sales_Model_Service_Quote просто делает следующее: \t возврата $ это -> _ convertor-> paymentToOrderPayment ($ цитирую> getPayment()); – Nitroware

ответ

0

К сожалению, мне пришлось выполнить прямой SQL-запрос, который не является спецификацией Magento, но он выполняет свою работу. Если кому-то нужен код, оставьте мне комментарий, и я его выкопаю.

Спасибо, хотя!

EDIT:

мне удалось на самом деле получить эту работу с Magento API:

// The payment type I want to change the target order to 
    $service = Mage::getModel('sales/service_quote', $this->getQuote()); 


    $payment = $service->retrievePaymentType(); 

    $paymentData = $payment->getData(); 
    $oldPayment = $order->getAllPayments(); 
    $oldPayment = $oldPayment[0]; 

    foreach ($paymentData as $n => $v) { 
     $oldPayment->setData($n,$v); 
    } 

Это немного хаком, но довольно эффективно.

+1

Включение кода в ваш ответ было бы хорошей идеей. – ThiefMaster

Смежные вопросы