我正在寻找一种方法,以便在为订单分配跟踪号时以编程方式向用户发送电子邮件.我需要能够以编程方式执行此操作,因为我使用外部源来填充跟踪信息.
我想我在这里真正需要的是一个特定的触发器或事件,我可以用来触发当管理员点击"发送跟踪信息"按钮时通常会发送的电子邮件.我已经浏览了核心代码,并且无法指出按下该按钮时实际触发的操作.
我们正在使用第三方(eBridge)连接我们的销售工具.一旦订单被标记为已发货并且跟踪号输入到eBridge工具中,它将与magento对话并将跟踪号输入到订单中.问题在于它没有告诉magento发送电子邮件以向客户提供这个新输入的跟踪号码.我想要做的是,一旦将信息发送到magento,就会从magentos端发送一封电子邮件.这可能吗?简而言之,我们想要的是能够让magento发送带有跟踪信息的电子邮件,而无需手动输入每个订单并单击"发送跟踪信息"按钮.
Pet*_*han 10
通过控制面板向订单添加新货件时,您可以勾选一个框以发送电子邮件.如果您需要以编程方式发送,管理区域的控制器只需调用该sendEmail方法Mage_Sales_Model_Order_Shipment.
更新:如果跟踪号码正在通过"标准"方法添加到货件,也就是货件api的addTrack方法,那么您将能够挂钩到sales_order_shipment_track_save_after事件.添加一个观察者,它做了......
public function sendTrackEmail($observer)
{
$track = $observer->getEvent()->getTrack();
$shipment = $track->getShipment(true);
$shipment->sendEmail();
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,有一个未记录的 API调用就是这样,sendInfo().我不知道这是什么版本,只要我能说它已经超过一年了,我只需要自己解决同样的问题,这是谷歌的第一个结果之一.
注意:如果您正在实施此操作,您可能不希望将电子邮件标志发送到sales_order_shipment.create()API调用,因为这将导致两封电子邮件针对同一订单发出,一封没有跟踪号,然后一个与它.
addTrack()可能已经实现,你只需要立即使用sendInfo().
sales_order_shipment.addTrack(sessionId, shipmentIncrementId, carrier, title, trackNumber)
sales_order_shipment.sendInfo(sessionId, comment)
Run Code Online (Sandbox Code Playgroud)
发送的电子邮件与您手动点击Magento后端中的"发送跟踪信息"按钮所获得的电子邮件相同.有关addTrack和一般使用SOAP API的更多说明,请参考Magento API.
至于sendInfo(),请查看来自magento/app/code/core/Mage/Sales/Model/Order/Shipment/Api.php的源代码以获取帮助:
/**
* Send email with shipment data to customer
*
* @param string $shipmentIncrementId
* @param string $comment
* @return bool
*/
public function sendInfo($shipmentIncrementId, $comment = '')
{
/* @var $shipment Mage_Sales_Model_Order_Shipment */
$shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($shipmentIncrementId);
if (!$shipment->getId()) {
$this->_fault('not_exists');
}
try {
$shipment->sendEmail(true, $comment)
->setEmailSent(true)
->save();
$historyItem = Mage::getResourceModel('sales/order_status_history_collection')
->getUnnotifiedForInstance($shipment, Mage_Sales_Model_Order_Shipment::HISTORY_ENTITY_NAME);
if ($historyItem) {
$historyItem->setIsCustomerNotified(1);
$historyItem->save();
}
} catch (Mage_Core_Exception $e) {
$this->_fault('data_invalid', $e->getMessage());
}
return true;
}
Run Code Online (Sandbox Code Playgroud)