共计 4969 个字符,预计需要花费 13 分钟才能阅读完成。
首先创建文件test.php,代码如下(其中$page为当前页码,$size为每页记录数):
[php]
$url = ‘http://127.0.0.1/magento/api/soap/?wsdl’;
$appKey = ‘API账号’;
$appSecret = ‘API密码’;
$client = new SoapClient($url, array("trace" => true, "connection_timeout" => 600));
$sessionKey = $client->login($appKey,$appSecret);
$filterData = array(array(‘page’=>$page,’page_size’=>$size,’updated_at’=>array(‘from’=>$start, ‘to’=>$end)));
$Res = $client->call($sessionKey,’sales_order.list’,$filterData);
$total = $Res[‘total’];
for ($i = 0; !empty($Res[$i]); $i++) {
……
}
[/php]
然后还要修改magento的API文件app/code/core/Mage/Sales/Model/Order/Api.php为如下所示:
[php]
/**
* Retrieve list of orders by filters
*
* @param array $filters
* @return array
*/
public function items($filters = null)
{
//TODO: add full name logic
$billingAliasName = ‘billing_o_a’;
$shippingAliasName = ‘shipping_o_a’;
$collection = Mage::getModel("sales/order")->getCollection()
->addAttributeToSelect(‘*’)
->addAddressFields()
->addExpressionFieldToSelect(
‘billing_firstname’, "{{billing_firstname}}", array(‘billing_firstname’=>"$billingAliasName.firstname")
)
->addExpressionFieldToSelect(
‘billing_lastname’, "{{billing_lastname}}", array(‘billing_lastname’=>"$billingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘shipping_firstname’, "{{shipping_firstname}}", array(‘shipping_firstname’=>"$shippingAliasName.firstname")
)
->addExpressionFieldToSelect(
‘shipping_lastname’, "{{shipping_lastname}}", array(‘shipping_lastname’=>"$shippingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘billing_name’,
"CONCAT({{billing_firstname}}, ‘ ‘, {{billing_lastname}})",
array(‘billing_firstname’=>"$billingAliasName.firstname", ‘billing_lastname’=>"$billingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘shipping_name’,
‘CONCAT({{shipping_firstname}}, " ", {{shipping_lastname}})’,
array(‘shipping_firstname’=>"$shippingAliasName.firstname", ‘shipping_lastname’=>"$shippingAliasName.lastname")
);
if (is_array($filters)) {
try {
foreach ($filters as $field => $value) {
if ($field != ‘page’ && $field != ‘page_size’) {
if (isset($this->_attributesMap[‘order’][$field])) {
$field = $this->_attributesMap[‘order’][$field];
}
$collection->addFieldToFilter($field, $value);
}
}
} catch (Mage_Core_Exception $e) {
$this->_fault(‘filters_invalid’, $e->getMessage());
}
}
$result = array();
$result[‘total’] = $collection->count();
$collection = Mage::getModel("sales/order")->getCollection()
->addAttributeToSelect(‘*’)
->addAddressFields()
->addExpressionFieldToSelect(
‘billing_firstname’, "{{billing_firstname}}", array(‘billing_firstname’=>"$billingAliasName.firstname")
)
->addExpressionFieldToSelect(
‘billing_lastname’, "{{billing_lastname}}", array(‘billing_lastname’=>"$billingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘shipping_firstname’, "{{shipping_firstname}}", array(‘shipping_firstname’=>"$shippingAliasName.firstname")
)
->addExpressionFieldToSelect(
‘shipping_lastname’, "{{shipping_lastname}}", array(‘shipping_lastname’=>"$shippingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘billing_name’,
"CONCAT({{billing_firstname}}, ‘ ‘, {{billing_lastname}})",
array(‘billing_firstname’=>"$billingAliasName.firstname", ‘billing_lastname’=>"$billingAliasName.lastname")
)
->addExpressionFieldToSelect(
‘shipping_name’,
‘CONCAT({{shipping_firstname}}, " ", {{shipping_lastname}})’,
array(‘shipping_firstname’=>"$shippingAliasName.firstname", ‘shipping_lastname’=>"$shippingAliasName.lastname")
);
if (is_array($filters)) {
try {
foreach ($filters as $field => $value) {
if ($field != ‘page’ && $field != ‘page_size’) {
if (isset($this->_attributesMap[‘order’][$field])) {
$field = $this->_attributesMap[‘order’][$field];
}
$collection->addFieldToFilter($field, $value);
}
}
} catch (Mage_Core_Exception $e) {
$this->_fault(‘filters_invalid’, $e->getMessage());
}
}
if (is_array($filters) && $filters[‘page’] && $filters[‘page_size’]) {
$collection->setPage($filters[‘page’]);
$collection->setPageSize($filters[‘page_size’]);
}
foreach ($collection as $order) {
$result[] = $this->_getAttributes($order, ‘order’);
}
return $result;
}
[/php]