Экспортные заказы из Magento на отправку
Вопрос
Я работаю над интернет-магазином на платформе Magento и столкнулся с серьезным препятствием:По какой-то причине Я не могу понять, как экспортировать текущие заказы (с информацией о доставке/типом доставки/и т. д.). У кого-нибудь есть предложения?Кажется, что это должно быть одной из самых основных вещей для такой системы, но я не смог понять, как это сделать.
Заранее спасибо за вашу помощь,
Энди
Решение
Видя, что вы хотите это для доставки, вы можете спросить того, кто занимается вашей доставкой, есть ли у него какой-то API, чтобы вы могли создать/купить/загрузить соответствующий модуль доставки и избавить себя от хлопот с CSV-файлами.
Если вам действительно нужен файл CSV, я могу показать вам, как его создать.Вы не упомянули, где будет запускаться этот сценарий, поэтому я предполагаю, что это внешний сценарий (что облегчит его использование с заданием cron).Вы хотите сделать следующее:
//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 "</pre>";
//Some random fields
echo "'" . $myOrder->getBillingAddress()->getLastname() . "',";
echo "'" . $myOrder->getTotal_paid() . "',";
echo "'" . $myOrder->getShippingAddress()->getTelephone() . "',";
echo "'" . $myOrder->getPayment()->getCc_type() . "',";
echo "'" . $myOrder->getStatus() . "',";
echo "\r\n";
}
Ради краткости (и здравомыслия) я не перечислил всю доступную информацию о заказе.Вы можете узнать, какие поля доступны, выгрузив соответствующие объекты и просмотрев их поля.
Например, если вы должны были выполнить print_r($myOrder->getBillingAddress());вы увидите такие поля, как «тип_адреса» и «фамилия».Вы можете использовать их с помощью $ myorder-> getBillingAddress ()-> getAddress_type () и $ myorder-> getBillingAddress ()-> getLastName () соответственно.
Редактировать:Изменен код в соответствии с ответом craig.michael.morris.
Другие советы
Я находился в процессе реализации вашего решения и заметил, что оно возвращает только первые значения для всех внешних ключей, таких как адрес выставления счета, адрес доставки, оплата и т. д.
Это можно исправить, изменив
$myOrder->load($thisId);
к
$myOrder->reset()->load($thisId);
Вы также можете посмотреть это расширение: http://www.magentocommerce.com/extension/1158/manual-order-export
Также можно подключиться через мыло:Этот пример настроен для локального хоста и предполагает, что вы настроили пользователя и роль веб-служб в разделе система>>веб-службы в администраторе.
<?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>";
?>
Если это кому-то поможет, вы можете использовать таблицу счетов в качестве ключа.Счет в 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
Если система не поддерживает какой-либо прямой способ экспорта заказов, вы можете создать в базе данных представление, в котором будут перечислены заказы, которые необходимо экспортировать.Затем используйте что-то вроде phpMyAdmin, чтобы экспортировать данные из представления в формате CSV.
Предложение Сахо по использованию SOAP великолепно, но это может занять много времени (Apache может выделить только ограниченный ресурс ЦП для обработки этого запроса).
Предлагаю вам написать PHP-скрипт, а затем запустить его через терминал.
Сонам