Вопрос

Я работаю над интернет-магазином на платформе 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-скрипт, а затем запустить его через терминал.

Сонам

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top