Передача переменной из Magento - PullRequest
1 голос
/ 22 сентября 2011

Я создал специальный модуль в 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 ]

1 голос
/ 23 сентября 2011

Я рекомендую вам использовать наблюдателя, слушающего событие, связанное с созданием заказа.
Например, вы можете прослушать 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
        {
    }
    
1 голос
/ 23 июля 2013

вы можете использовать cURL .... прямо напишите код в вашем обозревателе.php.вам понадобятся следующие вещи при написании curl ....

  1. url: URL-адрес, на который вы хотите отправить данные
  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

1 голос
/ 23 сентября 2011

Вы можете обойти это несколькими способами, вот два из них, к которым я бы пошел:

1) Самый простой: в момент размещения заказа и получения информации вы можете использовать функцию PHP exec () для вызова автономного файла PHP. (Где передаются переменные конечно)

Пример:

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

(вам может понадобиться переменная json_encode $, если это массив)

Этот скрипт просто использовал переменные и подключается к локальной / удаленной базе данных, чтобы выполнить запрос и обновить информацию.

2) Вы можете создать веб-сервис на внешнем сервере, который можно вызывать в любое время из Magento

Есть и другие способы сделать это, но я надеюсь, что мой ответ уже содержит полезную информацию, которая может помочь вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...