2011-09-22 55 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架构