Если вы хотите, чтобы электронное письмо, содержащее информацию об отслеживании, отправлялось, когда какая-либо программа, например, eBridge, вызывает API-интерфейс salesOrderShipmentAddTrack V2, вы также можете расширить Mage_Sales_Model_Order_Shipment_Api
, например,
class PKS_Sales_Model_Order_Shipment_Api extends Mage_Sales_Model_Order_Shipment_Api
public function addTrack
, добавив вызовчтобы отправить электронное письмо в блоке try, например,
try {
$shipment->save();
$track->save();
$shipment->sendEmail(true, '')
->setEmailSent(true)
->save(); /* added email with null comment */
}
Вы также должны предоставить расширение для SOAP V2, например
class PKS_Sales_Model_Order_Shipment_Api_V2 extends PKS_Sales_Model_Order_Shipment_Api
, даже если у него нет методов:)
(в примере есть мой app / code / local / PKS / Sales module, подставьте название вашей компании для PKS, извините за форматирование)
app / code / local / PKS / Sales / etc / config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<PKS_Sales>
<version>4.0.0.0</version>
<depends>
<Mage_Sales />
</depends>
</PKS_Sales>
</modules>
<global>
<models>
<sales>
<rewrite>
<order_shipment_api>PKS_Sales_Model_Order_Shipment_Api</order_shipment_api>
<order_shipment_api_v2>PKS_Sales_Model_Order_Shipment_Api_V2</order_shipment_api_v2>
</rewrite>
</sales>
</models>
</global>
</config>
Потребовалось больше времени, чтобы понять, как написать требуемый файл PKS / Sales / etc / api.xml (например, в моем модуле app / code / local / PKS подставьте название вашей компании для PKS)
<config>
<api>
<resources>
<sales_order_shipment translate="title" module="PKS_Sales">
<title>Modified Shipment API</title>
<model>sales/order_shipment_api</model>
<acl>sales/order/shipment</acl>
<methods>
<addTrack translate="title" module="PKS_Sales">
<title>Add new tracking number</title>
<acl>sales/order/shipment/track</acl>
</addTrack>
</methods>
<faults module="PKS_Sales">
<not_exists>
<code>100</code>
<message>Requested shipment does not exist.</message>
</not_exists>
<filters_invalid>
<code>101</code>
<message>Invalid filters given. Details in error message.</message>
</filters_invalid>
<data_invalid>
<code>102</code>
<message>Invalid data given. Details in error message.</message>
</data_invalid>
<order_not_exists>
<code>103</code>
<message>Requested order does not exist.</message>
</order_not_exists>
<track_not_exists>
<code>104</code>
<message>Requested tracking does not exist.</message>
</track_not_exists>
<track_not_deleted>
<code>105</code>
<message>Tracking not deleted. Details in error message.</message>
</track_not_deleted>
</faults>
</sales_order_shipment>
</resources>
<resources_alias>
<order>sales_order</order>
<order_shipment>sales_order_shipment</order_shipment>
</resources_alias>
<v2>
<resources_function_prefix>
<order>salesOrder</order>
<order_shipment>salesOrderShipment</order_shipment>
</resources_function_prefix>
</v2>
</acl>
</api>
</config>
Обратите внимание, что при таком подходе и с включенной Системой> Конфигурация> Продажи> Электронные письма о продажах> Электронные письма с заказами и отгрузками ваш клиент получит - одно электронное письмо, подтверждающее новый заказ - второе электронное письмо fили отправка без номера отслеживания - третье электронное письмо для отправления с номером отслеживания от вашего расширения API.
Я пытался закомментировать функцию создания Api.php
$shipment->sendEmail($email, ($includeComment ? $comment : ''));
но второе письмо продолжает отправляться.