2016-06-10 5 views
7

Использование Magento2.1.0-RC1 филиал с типовыми даннымиMagento2: REST API: Сохранить Деталь продукта в магазине зрения не работает

Использование REST API catalogProductRepositoryV1 REF: http://devdocs.magento.com/swagger/index.html Получить ключ от администратора токенов API и использовать этот ключ в

POST/V1/продукты

&

PUT/V1/Продукты/{ы}

с параметром попытался как с параметром один на один

  • store_id = 0
  • StoreID = 0 используя следующие JSON

{ 
 
    "saveOptions": "true", 
 
    "product": { 
 
     "name": "Test11_11", 
 
     "sku": "TESTOPP_111", 
 
     "attributeSetId": "15", 
 
     "price": "10", 
 
     "weight": "10", 
 
     "status": "1", 
 
     "visibility": "3", 
 
     "customAttributes": [ 
 
      { 
 
       "attributeCode": "manufacturer", 
 
       "value": "222" 
 
      }, 
 
      { 
 
       "attributeCode": "tax_class_id", 
 
       "value": "0" 
 
      }, 
 
      { 
 
       "attributeCode": "specialPrice", 
 
       "value": "10" 
 
      }, 
 
      { 
 
       "attributeCode": "description", 
 
       "value": "44332211" 
 
      }, 
 
      { 
 
       "attributeCode": "eco_collection", 
 
       "value": "1" 
 
      } 
 
     ], 
 
     "typeId": "simple" 
 
    } 
 
}

Не поддерживает store_id/поле StoreID, , но информация, содержащаяся в продукте не сохраняет для хранения это сохранить по умолчанию магазин ID

GET/V1/продукты имеет параметр StoreID таки попытался с PUT & POST, но не работает с PUT & POST

ответ

4

после отладки много на Magento2, Найдено, что Magento2 не имеет никакой функциональности для хранения данных с REST API, как р эр StoreID getStore функции в StoreManager просто проверить, если магазин существует в сессии еще возвращенных по умолчанию, поэтому все REST API вызовов сохраняются в магазине по умолчанию ID

У меня есть более Rided Magento \ магазин \ Model \ StoreManager, как показано ниже:

и т.д./di.xml

<?xml version="1.0"?> 
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> 
    <preference for="Magento\Store\Model\StoreManager" type="Emizentech\MobileAdmin\Model\EmizenStoreManager" /> 
</config> 

vim Модель/EmizenStoreManager.PHP

<?php 
namespace Emizentech\MobileAdmin\Model; 

use Magento\Store\Api\StoreResolverInterface; 
use Magento\Framework\App\RequestInterface; 

/** 
* @SuppressWarnings(PHPMD.CouplingBetweenObjects) 
*/ 
class EmizenStoreManager extends \Magento\Store\Model\StoreManager 
{ 
     /** 
    * Request instance 
    * 
    * @var \Magento\Framework\App\RequestInterface 
    */ 
    protected $_request; 

     /** 
    * @param \Magento\Store\Api\StoreRepositoryInterface $storeRepository 
    * @param \Magento\Store\Api\GroupRepositoryInterface $groupRepository 
    * @param \Magento\Store\Api\WebsiteRepositoryInterface $websiteRepository 
    * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig 
    * @param StoreResolverInterface $storeResolver 
    * @param \Magento\Framework\Cache\FrontendInterface $cache 
    * @param bool $isSingleStoreAllowed 
    */ 
    public function __construct(
     \Magento\Store\Api\StoreRepositoryInterface $storeRepository, 
     \Magento\Store\Api\GroupRepositoryInterface $groupRepository, 
     \Magento\Store\Api\WebsiteRepositoryInterface $websiteRepository, 
     \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
     StoreResolverInterface $storeResolver, 
     \Magento\Framework\Cache\FrontendInterface $cache, 
     RequestInterface $request, 
     $isSingleStoreAllowed = true 
    ) { 
     $this->storeRepository = $storeRepository; 
     $this->websiteRepository = $websiteRepository; 
     $this->groupRepository = $groupRepository; 
     $this->scopeConfig = $scopeConfig; 
     $this->storeResolver = $storeResolver; 
     $this->cache = $cache; 
     $this->_request = $request; 
     $this->isSingleStoreAllowed = $isSingleStoreAllowed; 
    } 
    /** 
    * {@inheritdoc} 
    */ 
    public function getStore($storeId = null) 
    { 

       if($this->_request->isPut() && strlen($this->_request->getParam('storeId'))) 
       { 
         return parent::getStore($this->_request->getParam('storeId')); 
       } 
       return parent::getStore($storeId); 
    } 

} 

в этом файле у меня есть проверить, что если запрос типа PUT и URL StoreID В параметре существует, чем набор, которые хранят еще называют родительской :: getStore()

и в REST API PUT Позвоните, я добавил storeId во всех запросах, в которых я необходимо установить информацию, которая будет храниться в соответствии с StoreID &, она работает как шарм :) для значений хранилища в admin Я использую storeID = 0 ByDefault для всех запросов PUT.

5

Я столкнулся с похожим сценарием, где я хочу обновить цены на веб-сайт. Поэтому, чтобы обновить цену, я использовал

/rest/<store_code>/V1/products/<sku> 

Это работало нормально.

Таким образом, я предполагаю, что вы можете использовать это, чтобы обновлять данные о продукте в магазине.

4

/rest/<store_code>/V1/products/<sku>

Это один работает, вы можете использовать

  • все
  • по умолчанию

для хранения кодов

+1

Спасибо за этот ответ. Для этого есть проблема (https://github.com/magento/magento2/issues/4952), но это, похоже, помогает. Чтобы улучшить ваш вопрос: «все» равно store_id = 0 (admin), но 'default' может быть переменной. Правда, в новой установке он по умолчанию, но в многопользовательском режиме это могут быть «en», «de», «fr» и т. Д. –