문제

저는 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 ())를 수행하는 경우; "wasse_type"및 "lastname"과 같은 필드가 표시됩니다. $ 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

또한 비누를 통해 연결할 수도 있습니다.이 예는 localhost에 대해 설정되었으며 관리자의 system>>web services에서 웹 서비스 사용자 및 역할을 설정했다고 가정합니다.

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

이것이 어떤 사람에게 도움이되는 경우, 송장 테이블을 키로 사용할 수 있습니다. 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 

시스템이 주문을 직접 내보내는 방법을 지원하지 않으면 데이터베이스에서 내보내는 주문을 나열하는보기를 작성할 수 있습니다. 그런 다음 phpmyadmin과 같은 것을 사용하여 CSV로보기에서 데이터를 내보내십시오.

비누 사용에 대한 Saho의 제안은 훌륭하지만 시간이 오래 걸릴 수 있습니다 (Apache는 제한된 CPU 리소스 만 할당하여 해당 요청을 처리하기 위해 트레드 할 수 있습니다).

PHP 스크립트를 작성한 다음 터미널을 통해 실행하도록 제안하십시오.

소남

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top