سؤال

أنا أعمل في متجر إلكتروني على منصة Magento وقد واجهت عقبة كبيرة:لسبب ما لا أستطيع معرفة كيفية تصدير الطلبات الحالية (مع معلومات الشحن/نوع الشحنة/إلخ). هل يوجد لدى احد أي اقتراحات؟يبدو أن هذا ينبغي أن يكون أحد أهم الأمور الأساسية التي يجب أن يقوم بها نظام مثل هذا، لكنني لم أتمكن من معرفة كيفية القيام بذلك.

شكرا لكم مقدما على مساعدتكم،

آندي

هل كانت مفيدة؟

المحلول

وكما نرى كنت تريد هذا للشحن قد أريد أن أسأل كل من يتعامل مع الشحن الخاص بك إذا كان لديهم نوعا من API حتى تتمكن من بناء / شراء / تحميل وحدة الشحن المناسبة وتجنيب نفسك من المتاعب من التلويث حول مع ملفات CSV.

إذا كنت تريد حقا ملف CSV ولكن أنا يمكن أن تظهر لك كيفية إنشائه. أنت لم تذكر حيث سيتم تشغيل هذا البرنامج النصي ولذا فإنني سوف نفترض انها النصي الخارجي (والتي سوف تجعل من الأسهل للاستخدام مع وظيفة كرون). تريد أن تفعل ما يلي:

//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" و "اللقب". يمكنك استخدام هذه مع $ myOrder-> getBillingAddress () -> getAddress_type () و $ myOrder-> getBillingAddress () -> getLastname () على التوالي

تعديل : في كود تغير وفقا لإجابة craig.michael.morris ل

نصائح أخرى

وكنت في عملية تنفيذ الحل، ولاحظت أنه كان عائدا فقط القيم الأولى لجميع المفاتيح الخارجية مثل عنوان الفواتير، وعنوان الشحن، ودفع الخ ...

ويمكن ان تكون ثابتة هذا عن طريق تغيير

و$ myOrder-> الحمل ($ thisId)؛

إلى

و$ myOrder-> إعادة تعيين () -> الحمل ($ 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>"; 
?>

في حالة هذا يساعد أي واحد، يمكنك استخدام جدول الفواتير كمفتاح. فاتورة في الماجنتو مع إعداد المصادقة + القبض على بطاقة الائتمان تعني المال قد حان. وفي حالتنا نحن بحاجة فقط استعلام 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 

إذا لم يدعم النظام بأي شكل من الأشكال المباشرة لتصدير أوامر، يمكنك إنشاء طريقة عرض في قاعدة البيانات تسرد أوامر تحتاج إلى تصدير. ثم استخدام شيء من هذا القبيل بريس لتصدير البيانات من طريقة العرض كما CSV.

واقتراح ساهو لاستخدام SOAP كبيرة، ولكن ذلك قد يستغرق وقتا طويلا (أباتشي يمكن فقط تعيين مورد CPU محدود لتخطو للتعامل مع هذا الطلب)

وأقترح عليك لكتابة السيناريو فب ثم تشغيله من خلال المحطة.

وسونام

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top