从 Magento 导出订单以进行装运
Posted
技术标签:
【中文标题】从 Magento 导出订单以进行装运【英文标题】:Export Orders from Magento for shipment 【发布时间】:2010-10-11 16:02:24 【问题描述】:我在 Magento 平台上的在线商店工作,遇到了一个主要障碍:出于某种原因 我无法弄清楚如何导出当前订单(包括运输信息/运输类型/等)。 有人有什么建议吗?对于这样的系统来说,这似乎应该是最基本的事情之一,但我一直无法找到如何去做。
提前感谢您的帮助,
安迪
【问题讨论】:
我不确定您到底要做什么...导出当前订单或所有挂单?将它们出口到哪里以及出于什么目的?这是发生在某个特定页面还是发生某些事情时(例如创建订单时)? 我需要从 Magento 获取已完成订单的电子表格(即 CSV),以便我可以将其与专门的 UPS/USPS 程序一起使用,或者将其发送给我们的履行提供商,以便他们运送物品对我们来说。 【参考方案1】:看到您想要这个运送时,您可能想询问负责运送您的人是否有某种 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());你会看到像“address_type”和“lastname”这样的字段。您可以将这些与 $myOrder->getBillingAddress()->getAddress_type() 和 $myOrder->getBillingAddress()->getLastname() 分别。
编辑: 根据 craig.michael.morris 的回答修改了代码
【讨论】:
【参考方案2】:我正在实施您的解决方案,并注意到它只返回所有外键的第一个值,例如帐单地址、送货地址、付款等...
这可以通过改变来解决
$myOrder->load($thisId);
到
$myOrder->reset()->load($thisId);
【讨论】:
【参考方案3】:您可能还想查看此扩展程序:http://www.magentocommerce.com/extension/1158/manual-order-export
你也可以通过soap连接:这个例子是为localhost设置的,并假设你已经在管理员的系统>>web服务下设置了一个web服务用户和角色。
<?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】:如果这对任何人有帮助,您可以使用发票表作为键。带有auth+capture信用卡设置的magento发票意味着钱已经进来了。在我们的例子中,我们只需要在phpmyadmin中运行一个sql查询,它将导出订单号和发票号,以便我们核对以检查订单是否导出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
【讨论】:
【参考方案5】:如果系统不支持任何直接导出订单的方式,您可以在数据库中创建一个视图,列出您需要导出的订单。然后使用 phpMyAdmin 之类的工具将视图中的数据导出为 CSV。
【讨论】:
【参考方案6】:Saho 对使用 SOAP 的建议很棒,但可能需要很长时间(Apache 只能分配有限的 CPU 资源来处理该请求)
建议你写一个php脚本,然后通过终端运行。
索南
【讨论】:
以上是关于从 Magento 导出订单以进行装运的主要内容,如果未能解决你的问题,请参考以下文章