Domanda

Sto lavorando su un negozio online su piattaforma Magento e hanno colpito un ostacolo imprevisto:Per qualche motivo Non riesco a capire come esportare gli ordini in corso (con informazioni di spedizione/tipo di spedizione/etc.). Qualcuno ha qualche suggerimento?Questo sembra come se dovrebbe essere una delle cose più fondamentali per un sistema come questo, ma non sono stati in grado di scoprire come.

Vi ringrazio in anticipo per il vostro aiuto,

Andy

È stato utile?

Soluzione

Visto che lo desideri per la spedizione, potresti chiedere a chiunque gestisca la tua spedizione se hanno una sorta di API in modo da poter costruire / acquistare / scaricare un modulo di spedizione appropriato e risparmiarti il ??fastidio di confonderti con i file CSV.

Se vuoi davvero un file CSV, tuttavia, posso mostrarti come crearlo. Non hai menzionato dove verrà eseguito questo script, quindi suppongo che sia uno script esterno (che renderà più facile l'uso con un lavoro cron). Vuoi fare quanto segue:

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

Per brevità (e sanità mentale) non ho elencato tutte le informazioni sull'ordine disponibili. Puoi scoprire quali campi sono disponibili scaricando gli oggetti pertinenti e dando un'occhiata ai loro campi.

Ad esempio se dovessi fare print_r ($ myOrder- > getBillingAddress ()); vedresti campi come " address_type " e " cognome " ;. Puoi usarli con $ myOrder- > getBillingAddress () - > getAddress_type () e $ myOrder- > getBillingAddress () - rispettivamente > getLastname ().

Modifica : Codice modificato in base alla risposta di craig.michael.morris

Altri suggerimenti

Stavo implementando la tua soluzione e ho notato che stava restituendo solo i primi valori per tutte le chiavi esterne come indirizzo di fatturazione, indirizzo di spedizione, pagamento ecc ...

Questo può essere risolto cambiando

$ myOrder- > carico ($ thisId);

a

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

Si potrebbe anche voler guardare questa estensione: http://www.magentocommerce.com/extension/1158/manual-order-export

Inoltre è possibile connettersi tramite soap:Questo esempio è impostato per localhost e non si assume aver impostato un utente per i servizi web e il ruolo in sistema>>i servizi web admin.

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

Se questo aiuta qualcuno, puoi usare la tabella delle fatture come chiave. Una fattura in magento con un'autenticazione + acquisizione della carta di credito indica che il denaro è arrivato. Nel nostro caso avevamo solo bisogno di eseguire una query sql in phpmyadmin che avrebbe esportato i numeri di ordine e i numeri di fattura per riconciliarci per verificare che l'esportazione dell'ordine l'estensione da xtento stava funzionando. Questo è quello che abbiamo usato:

 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 il sistema non supporta alcun modo diretto per esportare gli ordini, è possibile creare una vista nel database che elenca gli ordini che è necessario esportare. Quindi utilizzare qualcosa come phpMyAdmin per esportare i dati dalla vista come CSV.

Il suggerimento di Saho per l'uso di SOAP è ottimo, ma potrebbe richiedere molto tempo (Apache può assegnare una risorsa CPU limitata solo per il battistrada per gestire quella richiesta)

Suggerisci di scrivere uno script php e poi eseguirlo attraverso il terminale.

Sonam

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top