Cách tải tệp đính kèm lên thuộc tính sản phẩm tùy chỉnh bằng Magento SOAP


8

Điều này liên quan đến câu hỏi của tôi; how-to-get-a-sản phẩm-file-file đính kèm

Tôi muốn tạo một tập lệnh (không phải trên máy chủ) có thể sử dụng Intellimage_Attachsmô-đun trong câu hỏi khác của tôi.

Tôi sẽ sử dụng Magento SOAP nếu có thể.

Vấn đề tôi gặp phải lúc này là tôi không thể nhận / đặt / cập nhật / chúng tôi sản phẩm "mẫu / tệp".

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

Mang lại một mảng trống trên sản phẩm tôi có tệp đính kèm trên :(! Rõ ràng là sử dụng sai cuộc gọi xà phòng, cái nào sẽ là đúng? (Như trong product_custom_option.listkhông chính xác, chức năng của tôi hoạt động tốt với các cuộc gọi khác.)

CẬP NHẬT

đã thử:

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

Nhưng sẽ không hoạt động vì các sản phẩm không phải là sản phẩm có thể tải xuống, mặc dù chúng sử dụng samples.


vấn đề về các sản phẩm chỉ có thể tải xuống?
Abdul

Hãy nghĩ rằng bạn đang hiểu lầm, không có sản phẩm nào là sản phẩm có thể tải xuống. Tất cả các sản phẩm vật lý nhưng không thể tải xuống mẫu cho chúng qua xà phòng.
Robert Pounder

amasty.com/product-attachments.html Sẽ làm mọi thứ bạn cần và cấp quyền truy cập API.
B00mer

cảm ơn về thông tin nhưng muốn tự mình sắp xếp nó hơn là mua một tiện ích mở rộng và các tệp đã được tích hợp, lý do tôi cố gắng sắp xếp tự động hóa là vì việc quản trị magento cập nhật tệp chỉ là một nỗi đau Tôi có một giải pháp với các bảng SQL vì vậy tôi sẽ làm điều đó trước khi mua một phần mở rộng
Robert Pounder

Câu trả lời:


2

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

tốt đẹp, sẽ chấp nhận và tiền thưởng một khi được thử nghiệm, có thể sẽ là ngày mai ngay bây giờ mặc dù đã hết giờ!
Robert Pounder

Chắc chắn, cho tôi biết nếu bạn có bất kỳ câu hỏi liên quan đến điều này. Ngoài ra, vui lòng thêm thẻ 'api' và 'xà phòng' vào câu hỏi.
Alex Paliarush

0

Ok vì vậy tôi đã đưa ra câu trả lời của riêng mình, nhưng thực sự hy vọng họ là một cách gọn gàng hơn để làm điều này, mặc dù cách này dễ dàng thực hiện một cách đáng ngạc nhiên;

Hai bảng SQL được sử dụng là; downloadable_sample downloadable_sample_title

Tuy nhiên, tôi không muốn truy cập trực tiếp vào magento sql và hy vọng sẽ có cách xây dựng.


0

Vui lòng thử mã dưới đây để tải lên tệp đính kèm bằng 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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.