2011-09-22 61 views
1

我在Magento中創建了一個自定義模塊,可以在下訂單時隨時創建一個包含訂單信息數組的變量。我現在需要創建一些將這些變量發送到外部數據庫的機制或過程。但是,我不確定採取哪條路線。有人能指引我朝着正確的方向嗎?從Magento傳遞變量

編輯:這裏是我迄今爲止的Observer.php文件:

<?php 
class Companyname_Dataport_Model_Observer 
{ 
    public function orderPaid(Varien_Event_Observer $observer) 
    { 
     $orderId = $observer->getPayment()->getOrder()->getId(); 

     $orderdata = array(); 
     $orderdata['id'] = $order->getIncrementId(); 
     $orderdata['customername'] = $order->getCustomerFirstname() . " " . $order->getCustomerLastname(); 
     $orderdata['price'] = $order->getPrice(); 
     $orderdata['items'] = array(); 
     foreach ($order->getAllItems() as $orderItem) { 
      $item = array(); 

      $item['productid'] = $orderItem->getProductId(); 
      $item['qty'] = $orderItem->getQtyOrdered(); 

      $orderdata['items'][] = $item; 
     } 

     // Writing to the DOM 

    } 
} 

回答

1

我建議您使用觀察者,傾聽與訂單創建相關的事件。
例如,您可以聽sales_order_save_after,在觀察者中,您的方法將用作參數$observer。然後您可以使用$order = $observer->getEvent()->getOrder();訪問訂單數據。
下面是一些代碼:

  1. config.xml中

    <config> 
        ... 
        <global> 
         ... 
         <events> 
          <sales_order_save_after> 
           <observers> 
            <some_descriptive_string> 
             <type>singleton</type> 
             <class>themodelalias/observer</class> 
             <method>theMethodToUse</method> 
            </some_descriptive_string> 
           </observers> 
          </sales_order_save_after> 
         </events> 
         ... 
        </global> 
        ... 
    </config> 
    
  2. Observer.php

    class Yournamespace_Yourmodule_Model_Observer 
    { 
        public function theMethodToUse($observer) 
        { 
         $order = $observer->getEvent()->getOrder(); 
         //here goes your code to send the information to your external db 
        { 
    } 
    
+0

這非常接近我已採取的方法,但我堅持如何編碼發送信息到外部數據庫的部分。你有什麼可以幫忙的嗎?我已經編輯了原文,包括我目前爲Observer.php文件所做的工作。 – linnse

+0

它在同一個主機上嗎?你想直接插入數據庫或發送到另一個域的腳本? – OSdave

+0

我們需要將它發送到另一個域的數據庫。我在這方面缺乏經驗,並且正在努力學習,但我在尋找可比較的東西方面遇到了困難。編碼語法的任何幫助都會很好。我現在的想法是創建一個XML文件,然後將它傳遞給遠程服務器。 – linnse

1

你可以去解決這個幾個方面,這裏有兩個人,我會去的:

1)最簡單:在下訂單的時刻,您可以使用PHP exec()函數調用獨立的PHP文件。 (其中變量ofcourse通過)

例子:

exec("php /path/to/standalone/script.php ". $variable); 

(您可能需要json_encode $變量,如果它是一個數組)

這個腳本只是使用的變量,並連接到本地/遠程數據庫運行查詢並更新信息。

2)您可以創建一個可以隨時從Magento的

還有其他方法可以做到這被稱爲外部服務器上的Web服務,但我希望我的回答包含了有用的信息,已經可以讓你開始。

+0

肯尼的web服務 - 您如何將腳本放置在Observer.php文件中而不是獨立的PHP文件中?另外,我在哪裏可以找到如何編寫腳本的幫助? – linnse

+0

嗨,我正在談論把我在Observer.php中提供的行或您在magento模塊中使用的任何其他文件放在一起。我只是簡單地指出瞭如何通過exec()或web服務與其他數據庫聯繫,正如我在回覆中指出的那樣。在上面的回覆中,「//這裏是你的代碼發送信息到你的外部數據庫」,你可以簡單地複製粘貼我提供的exec()行。至於編寫處理遠程數據庫插入的獨立php腳本,我將使用基本的mysql_query函數。 – Kenny

+0

感謝您的帖子。因此,爲了澄清您的建議,您需要在您的Observer.php文件中包含「exec」行,這將完成整個Observer.php文件?那麼你會建議創建一個單獨的文件,其中包含基本的mysql_query函數?對不起,如此頭重腳輕。 – linnse

1

您可以使用捲曲.. directl Ÿ將代碼寫入您的observer.php。你需要的東西followung在寫捲曲....

  1. 網址:網址,你想發送的數據
  2. 用戶密鑰和密碼
  3. 腳本在收到您的數據遠程站點。

您的數據將以json格式發送....下面是一個示例發送器例如:

$xurl='http://domain/Observer_test/';//open bravo or any other application's endpoint here 
         $curl = curl_init(); 
         curl_setopt($curl, CURLOPT_HEADER, false); 
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
         curl_setopt($curl, CURLOPT_URL, $xurl); 
         curl_setopt($curl, CURLOPT_USERPWD, "111:abc"); 
         curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
         curl_setopt($curl, CURLOPT_POST, 1); 
         curl_setopt($curl, CURLOPT_POSTFIELDS, array("data" => json_encode($data))); 
         $resp = curl_exec($curl); 

         curl_close($curl); 
         $resp = json_decode($resp); 

而且在PHP試樣接收代碼(可以是任何語言):

$userkey=$_SERVER["PHP_AUTH_USER"]; 
$usersecret=$_SERVER["PHP_AUTH_PW"]; 
$key = '111';//16 character 
     $secret = 'abc';//32 character 
     if(!($userkey==$key && $usersecret==$secret)) { 
     http_response_code(403); 

}else{ 
    $data = $_POST["data"]; 

    $dir='/path/to/save/file'; 
    $file = new SplFileObject($dir."fread.txt", "w"); 

    $written = $file->fwrite($data); 
    if($written){ 
     header('Content-Type: application/json'); 
     http_response_code(200); 
     echo json_encode(array("stat"=>"SUCCESS")); 
    } 
} 

因此,基本上它是以下REST架構