Экспортные заказы от Magento для отгрузки - PullRequest
9 голосов
/ 06 марта 2009

Я работаю в интернет-магазине на платформе Magento и столкнулся с серьезным препятствием: по какой-то причине Я не могу понять, как экспортировать текущие заказы (с информацией о доставке / типом отгрузки / и т. Д.). У кого-нибудь есть предложения? Кажется, что это должно быть одной из самых основных вещей для такой системы, но я не смог выяснить, как это сделать.

Заранее благодарю за помощь,

Andy

Ответы [ 6 ]

24 голосов
/ 27 марта 2009

Учитывая, что вы хотите это для доставки, вы можете спросить любого, кто занимается вашей доставкой, есть ли у них какой-то API, чтобы вы могли создать / купить / скачать соответствующий модуль доставки и избавить себя от хлопот с CSV-файлами.

Если вы действительно хотите файл CSV, я могу показать вам, как его создать. Вы не упомянули, где будет запускаться этот скрипт, поэтому я предполагаю, что это внешний скрипт (который облегчит использование с заданием cron). Вы хотите сделать следующее:

<code>//External script - Load magento framework
require_once("C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\magento\app\Mage.php");
Mage::app('default');

$myOrder=Mage::getModel('sales/order'); 
$orders=Mage::getModel('sales/mysql4_order_collection');

//Optional filters you might want to use - more available operations in method _getConditionSql in Varien_Data_Collection_Db. 
$orders->addFieldToFilter('total_paid',Array('gt'=>0)); //Amount paid larger than 0
$orders->addFieldToFilter('status',Array('eq'=>"processing"));  //Status is "processing"

$allIds=$orders->getAllIds();
foreach($allIds as $thisId) {
    $myOrder->reset()->load($thisId);
    //echo "<pre>";
    //print_r($myOrder);
    //echo "
"; // Некоторые случайные поля эхо "'". $ myOrder-> getBillingAddress () -> getLastname (). «»»; эхо "'". $ myOrder-> getTotal_paid (). «»»; эхо "'". $ myOrder-> getShippingAddress () -> getTelephone (). «»»; эхо "'". $ myOrder-> getPayment () -> getCc_type (). «»»; эхо "'". $ myOrder-> getStatus (). «»»; эхо "\ r \ n"; }

Ради краткости (и здравомыслия) я не перечислил всю доступную информацию о заказе. Вы можете узнать, какие поля доступны, выгрузив соответствующие объекты и посмотрев их поля.

Например, если вы должны были сделать print_r ($ myOrder-> getBillingAddress ()); вы бы увидели такие поля, как "address_type" и "lastname". Вы можете использовать их с $ myOrder-> getBillingAddress () -> getAddress_type () и $ myOrder-> getBillingAddress () -> getLastname () соответственно.

Редактировать : Изменен код в соответствии с ответом craig.michael.morris

4 голосов
/ 02 мая 2009

Вы также можете посмотреть это расширение: http://www.magentocommerce.com/extension/1158/manual-order-export

Также вы можете подключиться через мыло: Этот пример настроен для localhost и предполагает, что вы настроили пользователя и роль веб-сервисов в разделе system >> web services в администраторе.

    <?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$begintime = $time; 
?> 
<?php 
ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 
// hostname 
$host= '127.0.0.1'; 
// if store in /magento change /shop, if store in root remove /shop 
$client= new SoapClient('http://'.$host.'/magento/index.php/api/soap/?wsdl'); 

// Can be added in Magento-Admin -> Web Services with role set to admin 
$apiuser= 'soap'; 
// API key is password 
$apikey = '******'; 
$sess_id= $client->login($apiuser, $apikey); 
echo "<html>"; 
echo "<head>"; 
echo "<LINK REL=StyleSheet HREF=\"style.css\" TYPE=\"text/css\" MEDIA=screen>"; 
echo "</head>"; 
echo "<body>";

$result= $client->call($sess_id, 'sales_order.list',  array(array('status'=>array('='=>'Pending'))));
echo '<pre>';
print_r($result);
echo '<pre>';


?> 
<?php 
// Let's see how long this took… 
$time = microtime(); 
$time = explode(" ", $time); 
$time = $time[1] + $time[0]; 
$endtime = $time; 
$totaltime = ($endtime - $begintime); 
echo '<br /><br /><em>This Magento SOAP API script took ' .$totaltime. ' seconds, precisely.</em>'; 
// ...and close the HTML document 
echo "</body>"; 
echo "</html>"; 
?>
4 голосов
/ 20 апреля 2009

Я занимался реализацией вашего решения и заметил, что оно возвращает только первые значения для всех внешних ключей, таких как адрес выставления счета, адрес доставки, оплата и т. Д. *

Это можно исправить, изменив

$ myOrder-> нагрузка ($ thisId);

до

$ myOrder-> сброс () -> нагрузки ($ thisId);

2 голосов
/ 09 августа 2011

Если это кому-нибудь поможет, вы можете использовать таблицу счетов в качестве ключа. Счет в magento с настройкой кредитной карты auth + capture означает, что деньги пришли. В нашем случае нам понадобился только SQL-запрос для запуска в phpmyadmin, который экспортировал бы номера заказов и номера счетов-фактур, чтобы мы могли согласовать их, чтобы убедиться, что экспорт заказов расширение от Xtento работало. Вот что мы использовали:

 SELECT sales_flat_order.increment_id AS 'order', sales_flat_invoice.increment_id AS 'invoice'
   FROM sales_flat_order
  RIGHT JOIN sales_flat_invoice ON sales_flat_invoice.order_id = sales_flat_order.entity_id
  WHERE sales_flat_invoice.updated_at >= "2011-07-01 00:00:00"
  ORDER BY sales_flat_order.increment_id DESC 
0 голосов
/ 20 августа 2012

Предложение Saho об использовании SOAP велико, но это может занять много времени (Apache может назначить только ограниченный ресурс ЦП для протектора для обработки этого запроса)

Предложите вам написать скрипт php, а затем запустить его через терминал.

Сон

0 голосов
/ 26 марта 2009

Если система не поддерживает прямой способ экспорта заказов, вы можете создать представление в базе данных, в котором перечислены заказы, которые необходимо экспортировать. Затем используйте что-то вроде phpMyAdmin, чтобы экспортировать данные из представления как CSV.

...