从Magento传递变量

时间:2011-09-22 18:04:28

标签: 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

     }
}

3 个答案:

答案 0 :(得分:1)

你可以通过以下几种方式解决这个问题,以下是其中两种方法:

1)最简单:在下订单并获得信息的那一刻,您可以使用PHP exec()函数来调用独立的PHP文件。 (变量通过的地方)

示例:

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

(如果它是一个数组,你可能需要json_encode $ variable)

此脚本只使用变量并连接到本地/远程数据库以运行查询并更新信息。

2)您可以在外部服务器上创建一个可以随时从Magento调用的Web服务

还有其他方法可以做到这一点,但我希望我的答案中包含的有用信息可以帮助您入门。

答案 1 :(得分: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
        {
    }
    

答案 2 :(得分:1)

你可以使用cURL ....直接在observer.php中编写代码。在写卷毛时你需要跟随的东西......

  1. url:您要发送数据的网址
  2. 用户密钥和秘密
  3. 用于在远程站点接收数据的脚本。
  4. 您的数据将以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架构的Web服务