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