Trong trường hợp của bạn, bạn cần triển khai điểm cuối API SOAP tùy chỉnh. May mắn thay, bạn có thể tái sử dụng rất nhiều triển khai API sản phẩm có thể tải xuống.
Nếu bạn tạo tất cả các tệp được liệt kê bên dưới, bạn sẽ có API SOAP V2 mới có sẵn: catalog sản phẩmAttachLinkList . Để bật các phương thức thêm / xóa, chỉ cần chuyển chúng từ app / code / core / Mage / Downloadable / Model / Link / Api.php sang app / code / cộng đồng / Intellimage / Đính kèm / Model / Link / Api.php .
Để kiểm tra API mới, hãy chạy một trong các cách sau:
<?php
/* SOAP V2 Style */
$client = new SoapClient('http://simple-magento-vagrant.dev/index.php/api/v2_soap/?wsdl');
$sessionId = $client->login('apiUser', 'apiKey');
$productId = 1;
$result = $client->catalogProductAttachLinkList($sessionId, $productId);
print_r($result);
/* SOAP V1 style. If you want to use this style, you may skip creation of custom wsdl.xml and Api/V2.php files proposed below. Adding api.xml and Api.php will be enough */
$client = new SoapClient('http://simple-magento-vagrant.dev/index.php/api/soap/?wsdl');
$sessionId = $client->login('apiUser', 'apiKey');
$productId = 1;
$result = $client->call($sessionId, 'attach_link.list', [$productId]);
print_r($result);
Các tệp sẽ được thêm vào mô-đun của bạn:
ứng dụng / mã / cộng đồng / Intellimage / Đính kèm / etc / api.xml
<?xml version="1.0"?>
<config>
<api>
<resources>
<catalog_product_attach_link translate="title" module="intellimage_attachs">
<model>attachs/link_api</model>
<title>Category API</title>
<acl>downloadable/link</acl>
<methods>
<list translate="title" module="intellimage_attachs">
<title>Retrieve links and samples list from attach product</title>
<method>items</method>
<acl>downloadable/link/list</acl>
</list>
</methods>
</catalog_product_attach_link>
</resources>
<resources_alias>
<attach_link>catalog_product_attach_link</attach_link>
</resources_alias>
<v2>
<resources_function_prefix>
<attach_link>catalogProductAttachLink</attach_link>
</resources_function_prefix>
</v2>
</api>
</config>
ứng dụng / mã / cộng đồng / Intellimage / Đính kèm / etc / wsdl.xml
(Xin lưu ý rằng wsi.xml nên được tạo nếu cần tương thích SOAP V2 WS-I)
<?xml version="1.0"?>
<config>
<api>
<resources>
<catalog_product_attach_link translate="title" module="intellimage_attachs">
<model>attachs/link_api</model>
<title>Category API</title>
<acl>downloadable/link</acl>
<methods>
<list translate="title" module="intellimage_attachs">
<title>Retrieve links and samples list from attach product</title>
<method>items</method>
<acl>downloadable/link/list</acl>
</list>
</methods>
</catalog_product_attach_link>
</resources>
<resources_alias>
<attach_link>catalog_product_attach_link</attach_link>
</resources_alias>
<v2>
<resources_function_prefix>
<attach_link>catalogProductAttachLink</attach_link>
</resources_function_prefix>
</v2>
</api>
</config>
ứng dụng / mã / cộng đồng / Intellimage / Đính kèm / Model / Link / Api / V2.php
<?php
class Intellimage_Attachs_Model_Link_Api_V2 extends Intellimage_Attachs_Model_Link_Api
{
protected function _prepareData(&$var)
{
if (is_object($var)) {
$var = get_object_vars($var);
foreach ($var as $key => &$value) {
$this->_prepareData($value);
}
}
}
public function add($productId, $resource, $resourceType, $store = null, $identifierType = null)
{
$this->_prepareData($resource);
return parent::add($productId, $resource, $resourceType, $store, $identifierType);
}
}
ứng dụng / mã / cộng đồng / Intellimage / Đính kèm / Model / Link / Api.php
<?php
class Intellimage_Attachs_Model_Link_Api extends Mage_Catalog_Model_Api_Resource
{
public function items($productId, $store = null, $identifierType = null)
{
$product = parent::_getProduct($productId, $store, $identifierType);
$typeInstance = $product->getTypeInstance(true);
$product->setTypeInstance(Mage::getModel('attachs/product_type', $typeInstance), true);
$linkArr = array();
$links = $product->getTypeInstance(true)->getSamples($product);
$downloadHelper = Mage::helper('downloadable');
foreach ($links as $item) {
$tmpLinkItem = array(
'link_id' => $item->getId(),
'title' => $item->getTitle(),
'price' => $item->getPrice(),
'number_of_downloads' => $item->getNumberOfDownloads(),
'is_shareable' => $item->getIsShareable(),
'link_url' => $item->getLinkUrl(),
'link_type' => $item->getLinkType(),
'sample_file' => $item->getSampleFile(),
'sample_url' => $item->getSampleUrl(),
'sample_type' => $item->getSampleType(),
'sort_order' => $item->getSortOrder()
);
$file = Mage::helper('downloadable/file')->getFilePath(
Mage_Downloadable_Model_Link::getBasePath(), $item->getLinkFile()
);
if ($item->getLinkFile() && !is_file($file)) {
Mage::helper('core/file_storage_database')->saveFileToFilesystem($file);
}
if ($item->getLinkFile() && is_file($file)) {
$name = Mage::helper('downloadable/file')->getFileFromPathFile($item->getLinkFile());
$tmpLinkItem['file_save'] = array(
array(
'file' => $item->getLinkFile(),
'name' => $name,
'size' => filesize($file),
'status' => 'old'
));
}
$sampleFile = Mage::helper('downloadable/file')->getFilePath(
Mage_Downloadable_Model_Link::getBaseSamplePath(), $item->getSampleFile()
);
if ($item->getSampleFile() && is_file($sampleFile)) {
$tmpLinkItem['sample_file_save'] = array(
array(
'file' => $item->getSampleFile(),
'name' => Mage::helper('downloadable/file')->getFileFromPathFile($item->getSampleFile()),
'size' => filesize($sampleFile),
'status' => 'old'
));
}
if ($item->getNumberOfDownloads() == '0') {
$tmpLinkItem['is_unlimited'] = 1;
}
if ($product->getStoreId() && $item->getStoreTitle()) {
$tmpLinkItem['store_title'] = $item->getStoreTitle();
}
if ($product->getStoreId() && $downloadHelper->getIsPriceWebsiteScope()) {
$tmpLinkItem['website_price'] = $item->getWebsitePrice();
}
$linkArr[] = $tmpLinkItem;
}
unset($item);
unset($tmpLinkItem);
unset($links);
$samples = $product->getTypeInstance(true)->getSamples($product)->getData();
return array('links' => $linkArr, 'samples' => $samples);
}
}