Magento-如何以编程方式发布退款?

Magento-如何以编程方式发布退款?,magento,Magento,如何以编程方式在Magento中退款订单?更准确地说,如何将处于挂起状态和状态的订单更改为适当的退款状态和/或状态 您确实无法通过IPN设施执行此操作,因为网关正在通知Magento已发生的操作。如果你想在线退款,只需扩展或调用CreditmemoController的saveAction即可 这是实际执行退款但依赖控制器内受保护方法的控制器操作。要使用它,您可以直接发布到它-例如发布到https://yoursite.com/admin/sales/order/creditmemo/save/

如何以编程方式在Magento中退款订单?更准确地说,如何将处于挂起状态和状态的订单更改为适当的退款状态和/或状态

您确实无法通过IPN设施执行此操作,因为网关正在通知Magento已发生的操作。如果你想在线退款,只需扩展或调用CreditmemoController的saveAction即可

这是实际执行退款但依赖控制器内受保护方法的控制器操作。要使用它,您可以直接发布到它-例如发布到
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));
    }

正在寻求离线发布信用备忘录,或者您的目标是通过支付网关触发在线退款?我正在尝试从Magento端的网关处理退款ipn(将状态更改为适当的状态,发布备忘录,无论正确的过程是什么)。谢谢