Pergunta

Estou trabalhando em uma loja online na plataforma Magento e encontrei um grande obstáculo:Por algum motivo Não consigo descobrir como exportar pedidos atuais (com informações de envio/tipo de envio/etc). Alguém tem alguma sugestão?Parece que deveria ser uma das coisas mais básicas para um sistema como esse, mas não consegui descobrir como.

Agradeço antecipadamente por sua ajuda,

Andy

Foi útil?

Solução

Vendo como você quer isso para o transporte que você pode querer perguntar quem lida com o seu transporte se eles têm algum tipo de API para que você possa construir / comprar / fazer download de um módulo de transporte apropriado e poupar-se o aborrecimento de mucking com arquivos CSV.

Se você realmente quer um arquivo CSV no entanto eu posso mostrar-lhe como criá-la. Você não mencionou onde este script será executado, então eu vou assumir que é um script externo (o que irá torná-lo mais fácil de usar com um trabalho cron). Você quer fazer o seguinte:

//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";
}

Por razões de brevidade (e sanidade) eu não listadas todas as informações ordem disponível. Você pode descobrir o que estão disponíveis por despejar os objetos relevantes e dar uma olhada em seus campos campos.

Por exemplo, se você fosse fazer print_r ($ myOrder-> getBillingAddress ()); você veria campos como "address_type" e "sobrenome". Você pode usá-los com $ MyOrder-> getBillingAddress () -> getAddress_type () e $ MyOrder-> getBillingAddress (.) -> getLastName (), respectivamente

Editar : código alterado de acordo com a resposta do craig.michael.morris

Outras dicas

Eu estava no processo de implementação de sua solução e notei que ele só estava retornando os primeiros valores para todas as chaves estrangeiras, tais como endereço de cobrança, endereço do transporte, pagamento etc ...

Isso pode ser corrigido alterando

$ myOrder-> load ($ thisId);

para

$ myOrder-> reset () -> load ($ thisId);

Você também pode querer dar uma olhada nesta extensão: http://www.magentocommerce.com/extension/1158/manual-order-export

Além disso, você pode se conectar via sabonete:Este exemplo é configurado para localhost e pressupõe que você configurou um usuário e uma função de serviços da web em sistema >> serviços da web no administrador.

    <?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>"; 
?>

No caso de isso ajuda qualquer um, você pode usar a tabela a factura como uma chave. Uma factura no Magento com um auth + captura meio de instalação de cartão de crédito o dinheiro veio em. No nosso caso, só precisava de uma consulta SQL para ser executado em phpmyadmin que exportar números de ordem e números de faturas para nós conciliar a verificar que a exportação a fim extensão de xtento estava funcionando. Isto é o que nós usamos:

 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 

Se o sistema não suporta qualquer maneira direta de encomendas de exportação, você pode criar uma exibição no banco de dados que relaciona as ordens que você precisa para exportação. Em seguida, use algo como phpMyAdmin para exportar os dados a partir da visão como CSV.

A sugestão de Saho para usar SOAP é grande, mas pode levar um longo tempo (Apache só pode atribuir um recurso CPU limitada a passo para lidar com esse pedido)

sugiro que você escrever um script php e, em seguida, executá-lo através do terminal.

Sonam

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top