Dalam kasus Anda, Anda perlu menerapkan titik akhir API SOAP khusus. Untungnya Anda dapat menggunakan kembali implementasi API Produk yang Dapat Diunduh.
Jika Anda membuat semua file yang tercantum di bawah ini, Anda akan memiliki API SOAP V2 baru yang tersedia: catalogProductAttachLinkList . Untuk mengaktifkan metode add / remove, cukup porting dari app / code / core / Mage / Diunduh / Model / Link / Api.php ke app / kode / komunitas / Intellimage / Attachs / Model / Link / Api.php .
Untuk menguji API baru jalankan salah satu dari yang berikut:
<?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);
File yang akan ditambahkan ke modul Anda:
app / code / community / Intellimage / Attachs / 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>
app / code / community / Intellimage / Attachs / etc / wsdl.xml
(Harap dicatat, bahwa wsi.xml harus dibuat jika kompatibilitas SOAP V2 WS-I diperlukan)
<?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>
app / code / community / Intellimage / Attachs / 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);
}
}
app / code / community / Intellimage / Attachs / 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);
}
}