Magento - как оформить возврат программно? - PullRequest
1 голос
/ 21 ноября 2011

Как можно вернуть заказ в Magento программно?Чтобы быть более точным, как можно изменить заказ, находящийся в состоянии ожидания и статус, на соответствующий статус и / или статус возврата.

1 Ответ

0 голосов
/ 05 августа 2012

Вы действительно не можете сделать это через средство IPN, поскольку шлюзы уведомляют Magento о действии, которое уже произошло. Если вы действительно хотите вернуть деньги через Интернет, вам потребуется чуть больше, чем просто продлить или вызвать saveAction от CreditmemoController.

Это действие контроллера, которое фактически выполняет возврат, но опирается на защищенные методы внутри контроллера. Чтобы использовать это, вы должны публиковать сообщения прямо в него - например, публиковать в https://yoursite.com/admin/sales/order/creditmemo/save/ или в крайнем случае вы можете дублировать методы в один монолитный скрипт.

<?php 

//taken from /app/code/core/Adminhtml/controllers/Sales/Order/CreditmemoController.php


    /**
     * Save creditmemo
     * We can save only new creditmemo. Existing creditmemos are not editable
     */
    public function saveAction()
    {
        $data = $this->getRequest()->getPost('creditmemo');
        if (!empty($data['comment_text'])) {
            Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']);
        }

        try {
            $creditmemo = $this->_initCreditmemo();
            if ($creditmemo) {
                if (($creditmemo->getGrandTotal() <=0) && (!$creditmemo->getAllowZeroGrandTotal())) {
                    Mage::throwException(
                        $this->__('Credit memo\'s total must be positive.')
                    );
                }

                $comment = '';
                if (!empty($data['comment_text'])) {
                    $creditmemo->addComment(
                        $data['comment_text'],
                        isset($data['comment_customer_notify']),
                        isset($data['is_visible_on_front'])
                    );
                    if (isset($data['comment_customer_notify'])) {
                        $comment = $data['comment_text'];
                    }
                }

                if (isset($data['do_refund'])) {
                    $creditmemo->setRefundRequested(true);
                }
                if (isset($data['do_offline'])) {
                    $creditmemo->setOfflineRequested((bool)(int)$data['do_offline']);
                }

                $creditmemo->register();
                if (!empty($data['send_email'])) {
                    $creditmemo->setEmailSent(true);
                }

                $creditmemo->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
                $this->_saveCreditmemo($creditmemo);
                $creditmemo->sendEmail(!empty($data['send_email']), $comment);
                $this->_getSession()->addSuccess($this->__('The credit memo has been created.'));
                Mage::getSingleton('adminhtml/session')->getCommentText(true);
                $this->_redirect('*/sales_order/view', array('order_id' => $creditmemo->getOrderId()));
                return;
            } else {
                $this->_forward('noRoute');
                return;
            }
        } catch (Mage_Core_Exception $e) {
            $this->_getSession()->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')->setFormData($data);
        } catch (Exception $e) {
            Mage::logException($e);
            $this->_getSession()->addError($this->__('Cannot save the credit memo.'));
        }
        $this->_redirect('*/*/new', array('_current' => true));
    }

HTH, ура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...