Magento SOAPを使用してカスタム製品属性に添付ファイルをアップロードする方法


8

これは私の質問に関連しています。製品ファイルの添付ファイルの入手方法

Intellimage_Attachs他の質問でモジュールを利用できるスクリプトを(サーバー上ではなく)作成したいと思います。

可能であればMagento SOAPを使用します。

現時点で私が抱えている問題は、製品「サンプル/ファイル」を取得/出力/更新/取得できないことです。

return $this->handle->call($this->session,'product_custom_option.list', "productnamehere ");

添付ファイルがある製品に空の配列を戻します:(!明らかに間違ったsoap呼び出しを使用していますが、どちらが正しいでしょうか?(product_custom_option.list不正解なので、他の呼び出しで関数は正常に動作します。)

更新

試しました:

return $this->handle->call($this->session, 'product_downloadable_link.list', array( $sku . " "));

ただし、を使用してもダウンロード可能な製品ではないため、機能しませんsamples


ダウンロード可能な唯一の製品の問題?
Abdul

あなたが誤解していると思ってください、どの製品もダウンロード可能な製品ではありません。すべての物理的な製品ですが、石鹸を介してそれらのサンプルダウンロードを取得できません。
Robert Pounder

amasty.com/product-attachments.html必要なすべてを実行し、APIアクセスを提供します。
B00MER 2015年

情報に感謝しますが、拡張機能を購入するのではなく、自分で並べ替えることを好みます。ファイルは既に統合されています。自動化を整理しようとしているのは、前述のように、magento管理者がファイルを更新するのが面倒だからです。私はSQLテーブルを使用したソリューションを持っているので、拡張機能を購入する前にそれを行います
Robert Pounder 2015年

回答:


2

あなたのケースでは、カスタムSOAP APIエンドポイントを実装する必要があります。幸いにも、Downloadable Product API実装を頻繁に再利用できます。

以下にリストされているすべてのファイルを作成すると、新しいSOAP V2 APIが使用可能になります:catalogProductAttachLinkList。追加/削除メソッドを有効にするには、それらをapp / code / core / Mage / Downloadable / Model / Link / Api.phpからapp / code / community / Intellimage / Attachs / Model / Link / Api.phpに移植するだけです。

新しいAPIをテストするには、次のいずれかを実行します。

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

モジュールに追加するファイル:

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 (SOAP V2 WS-I互換性が必要な場合はwsi.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 / 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);
        }
    }

素晴らしいもの、受け入れたら賞金がもらえるでしょう、そしてテストを終えると、おそらく明日になります!
Robert Pounder 2015

確かに、これに関して質問がある場合はお知らせください。また、質問に「api」タグと「soap」タグを追加してください。
Alex Paliarush 2015

0

わかりましたので、私は自分の答えを思いつきましたが、これが驚くほど簡単に実装されていますが、これがより良い方法であることを本当に望んでいます。

使用される2つのSQLテーブルは次のとおりです。 downloadable_sample downloadable_sample_title

しかし、私はmagento sqlに直接アクセスしたくないので、組み込みの方法があることを望んでいました。


0

Magento SOAP API V2を使用して添付ファイルをアップロードするには、以下のコードを試してください

try {
    $client = new SoapClient('http://magentohost/api/v2_soap/?wsdl'); // api url
    $sessionId = $client->login('test123', 'test123'); // API user name & key 
    $resource = array(
        'title' => 'link_2',
        'price' => '11.99',
        'type' => 'file',
        'file' => array(
            'name' => 'file_test',
            'base64_content' => '/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAXABcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDLooor8XP4DCiiigAooooAKKKKAP/Z'
        )
    );
    $resourceType = 'link';
    $productId =  '4607';
    $result = $client->catalogProductDownloadableLinkAdd($sessionId, $productId, $resource, $resourceType);
}
catch (Exception $e) {
   echo $e->getMessage();
}
print_r($result);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.