我正在为 magento 编写一个自定义订单处理脚本。如果脚本通过 cron 获取新订单,它应该创建发票并通知用户并发送评论。我使用 SOAP API 来实现此目的。 这在发送电子邮件时有效,但如何使前端的用户可以看到评论? 如果我手动登录 Magento 管理员,我可以向订单添加评论,然后检查
Visible on Frontend
。
我希望用 sales_order_invoice.create
和 sales_order_shipment.create
添加的评论能够以同样的方式在前端对客户可见。我知道后端的默认设置是不可能的,但我想这样做。
如果这真的很难做到,我至少希望客户在前端可以看到用 sales_order.addComment
添加的评论,就像我手动评论并检查 Visible on Frontend
时一样。
这是我的 SOAP 代理代码:
class magentoProxyHandler{
protected $proxy;
protected $session;
function __construct(){
$this->proxy = new SoapClient('http://www.magento.nl/index.php/api/soap/?wsdl');
$this->session = $this->proxy->login('change_order', 'password');
}
function __destruct(){
$this->proxy->endSession($this->session);
}
function addComment($orderId, $status, $comment = '', $notifyCustomer = true){
$orderId = ($orderId > 100000000 ? $orderId : $orderId + 100000000);
$notify = $notifyCustomer ? true : false;
$changeOrder = array('orderIncrementId' => $orderId, 'status' => $status, 'comment'=> $comment, 'notify'=> $notify);
return $this->proxy->call($this->session, 'sales_order.addComment', $changeOrder);
}
function createInvoice($orderId, $status, $comment = 'Invoice ready', $notifyCustomer = true){
$orderId = ($orderId > 100000000 ? $orderId : $orderId + 100000000);
$notify = $notifyCustomer ? true : false;
return $this->proxy->call($this->session, 'sales_order_invoice.create', array($orderId, array(), $comment, true, true));
}
function shipOrder($orderId, $status, $comment = 'Order shipped', $notifyCustomer = true){
$orderId = ($orderId > 100000000 ? $orderId : $orderId + 100000000);
$notify = $notifyCustomer ? true : false;
return $this->proxy->call($this->session, 'sales_order_shipment.create', array($orderId, array(), $comment, true, true));
}
} //end of class
我知道我可以对这段代码做一些小的改进,这只是为了测试soap API。
我通过阅读互联网上的指南并开始尝试来学习 PHP 编码。 Stack Overflow 对我这一路上遇到的所有问题都提供了很大的帮助;我已经得到了很多,我的意思是过去仅使用堆栈溢出的搜索功能就得到了很多帮助。谢谢你! 当然,我又和大朋友Google一起使用了它,但第一次没有运气。这就是为什么这是我的第一个问题。 我真的希望你们能帮助我,提前谢谢!
好吧,我知道怎么做了,必须更改一些代码:
/app/code/core/Mage/Sales/Model/Order/Api.php
复制到 /app/code/local/Mage/Sales/Model/Order/Api.php
我改变了方法addComment:
public function addComment($orderIncrementId, $status, $comment = '', $notify = false, $showOnFront = true)
{
$order = $this->_initOrder($orderIncrementId);
$historyItem = $order->addStatusHistoryComment($comment, $status);
$historyItem->setIsVisibleOnFront($showOnFront);
$historyItem->setIsCustomerNotified($notify)->save();
try {
if ($notify && $comment) {
$oldStore = Mage::getDesign()->getStore();
$oldArea = Mage::getDesign()->getArea();
Mage::getDesign()->setStore($order->getStoreId());
Mage::getDesign()->setArea('frontend');
}
$order->save();
$order->sendOrderUpdateEmail($notify, $comment);
if ($notify && $comment) {
Mage::getDesign()->setStore($oldStore);
Mage::getDesign()->setArea($oldArea);
}
} catch (Mage_Core_Exception $e) {
$this->_fault('status_not_changed', $e->getMessage());
}
return true;
}
然后在我的课堂上:
function addComment($orderId, $status, $comment = '', $notifyCustomer = true, $showOnFront = true){
$orderId = ($orderId > 100000000 ? $orderId : $orderId + 100000000);
$notify = $notifyCustomer ? true : false;
$changeOrder = array('orderIncrementId' => $orderId, 'status' => $status, 'comment'=> $comment, 'notify'=> $notify, 'showOnFront' => $showOnFront);
return $this->proxy->call($this->session, 'sales_order.addComment', $changeOrder);
}
就像魅力一样! 据我所知,我可以在发货和发票 api 文件中执行相同的操作。