2012-01-09 8 views
5

に設定されている場合、追跡番号が順に割り当てられているとき、私はprogrammaticlyユーザーに電子メールを送信する方法を探していますメールを送信します。トラッキング情報を埋め込むために外部ソースを使用しているため、プログラムでこれを実行できる必要があります。はProgrammaticly出荷追跡番号が

は、私が何を私は本当にここを探していますが、私は管理者が「追跡情報を送信」ボタンをクリックしたときに正常に送信される電子メールをオフに解雇するために使用できる特定のトリガまたはイベントですね。私は、コアコードをスキップして、そのボタンが押されたときに実際にどのようなアクションがトリガーされているのかについて指を置くことができませんでした。

私たちは、販売ツールと接続するために、第三者(eBridge)を使用しています。注文が出荷時にマークされ、追跡番号がeBridgeツールに入力されると、Magentoと話して注文に追跡番号を入力します。問題は、Magentoに、この新たに入力された追跡番号を顧客に提供するための電子メールを発しないように指示しないことです。私がしようとしていることは、情報がMagento側から電子メールを出してMagento側に入れた後です。これは可能ですか?一言で言えば、手動で各注文に行き、「トラッキング情報を送信」ボタンをクリックする必要なしに、Magentoがトラッキング情報を電子メールで送信できるようにすることです。

すべてのヘルプや提案をいただければ幸いです!

答えて

10

あなたがコントロールパネルから順に、新たな出荷を追加するときは、電子メールを送信するためにボックスをチェックすることができます。これをプログラムで送信する必要がある場合は、管理領域のコントローラはMage_Sales_Model_Order_ShipmentsendEmailメソッドを呼び出します。

UPDATE:追跡番号は、あなたがsales_order_shipment_track_save_afterイベントにフックすることができるだろう、出荷APIのaddTrack方法を言うことである「標準的な」方法、を経由して出荷に追加されている場合。 ...

public function sendTrackEmail($observer) 
{ 
    $track = $observer->getEvent()->getTrack(); 
    $shipment = $track->getShipment(true); 
    $shipment->sendEmail(); 
} 
+0

されています特定のリスナ/オブザーバが、追跡コードが出荷に追加されたときのためのものですか? – Jen

+0

これは、トラッキングコードの追加方法に非常に依存します。 –

+0

コメントとして追加されただけで、追跡コードが実際の追跡コードフィールドにあると言うと役立ちますか? – Jen

0

トラッキング情報が記載されたメールを送信するには、たとえば次のようなプログラムが送信されます。 eBridgeはsalesOrderShipmentAddTrack V2 APIを呼び出して、あなたも拡張することができます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に拡張機能を提供する必要があります。それは方法:)

(例はPKSのためのあなたの会社名に置き換え、PKS /セールスモジュール/ローカル/私のアプリ/コードを持って、謝罪の書式再)

アプリを持っていない場合でも、

class PKS_Sales_Model_Order_Shipment_Api_V2 extends PKS_Sales_Model_Order_Shipment_Api 

/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 /セールスの/ etc/APIを作成する方法を考え出すより多くの時間がかかりました。XML (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> 

このアプローチであることに注意して、[システム]> [設定]> [セールス>セールスメール>注文や出荷を持ってください。あなたの顧客は を受け取る - 新しい注文を確認するメールが1つ - 追跡番号なしの郵便物の第2のメール - 追跡番号付きの郵便物の3番目のEメールがあなたのAPI拡張から得られる。

私はApi.phpは、関数の

$shipment->sendEmail($email, ($includeComment ? $comment : '')); 

を作成するが、2番目のメールがちょうど送っ取得し続けることをコメントアウトしようとしました。

6

FYIこれはまさにこのsendInfo()を行う APIコールの文書化されていないです。私はこれが何に追加されたのか分からない。一歳以上だと分かる限り、私はこの同じ問題を自分で解決しなければならず、これはGoogleの最初の結果の1つです。

:あなたはこれを実装している場合、これは同じ順序のために外出2通の電子メールになりますように、あなたはおそらくは、sales_order_shipment.create()API呼び出しにメールフラグを送信したくありません1つは追跡番号なし、もう1つは追跡番号付きです。

addTrack()は既に実装されている可能性があります。すぐにsendInfo()を実行するだけで済みます。

sales_order_shipment.addTrack(sessionId, shipmentIncrementId, carrier, title, trackNumber) 
sales_order_shipment.sendInfo(sessionId, comment) 

メールは手動でMagentoのバックエンドでボタン「追跡情報を送信」をクリックすることで取得するのと同じである送りました。 addTrackとSOAP APIの一般的な説明については、Magento APIを参照してください。 sendInfoについては

()具体的には、助けを求めて/ Magentoの/アプリ/コード/コア/メイジ/販売/モデルからソースコードを受注/出荷/ 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; 
} 
+0

これは私が必要とするものです。どうもありがとうございます! – chuangbo

+0

あなたは素晴らしいです。 – star18bit

関連する問題