Вопрос по методу API shop.product.MassUpdate

https://developers.webasyst.ru/api/explorer/shop/shop.product.massUpdate/

В описании параметров указано

  • product POST НеобязательноМассив данных товаров.
  • sku POST НеобязательноМассив данных артикулов.
  • jproduct POST НеобязательноЕсли не указано значение для параметра 'product', используется значение, закодированное в строку с помощью функции json_encode().
  • jsku POST НеобязательноЕсли не указано значение для параметра 'sku', используется значение, закодированное в строку с помощью функции json_encode().

Я планирую использовать JSON но состав данных массива остается непонятным - что должно являться элементами массива?

Что подразумевается под "данными товаров" и "данными артикулов"

Мне нужно обновлять остатки по складам с помощью этого метода.

Прошу дать пример элемента такого массива товара и артикула.

Возможно это должны быть данные в виде который возвращает метод shop.product.getInfo ?

1 ответ

  • 1
    Евгений Е 21 ноября 2018 18:06 #

    В итоге ответ найден?

    • +2
      Евгений Е Евгений Е 21 ноября 2018 18:46 #

      Тогда сам отвечу. Обновление цен и остатков просто колоссальный прирост производительности по сравнению с методами api shop.product.skus.update и shop.product.update

      Пишем примерно такую функцию для https протокола :

      function updateMassProduct($products, $skus, $ACCESS_TOKEN){
      	$curl = curl_init();
      	$url = 'https://site.ru/api.php/shop.product.massUpdate?&access_token='.$ACCESS_TOKEN.'&format=json';
      	curl_setopt($curl, CURLOPT_URL, $url);
      	curl_setopt($curl, CURLOPT_POST, 1);
      	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      	$params = array('jproduct'=>json_encode($products), 'jsku'=>json_encode($skus));
      	curl_setopt($curl, CURLOPT_POSTFIELDS,$params);
      	curl_setopt($curl, CURLOPT_USERAGENT, 'Opera 10.00');
      	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
      	curl_setopt($curl, CURLOPT_TIMEOUT, 60);
      	curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
      	curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
      
      	$res = json_decode(curl_exec($curl));
      	curl_close($curl);
      	return $res;
      }

      Вызов примерно из такого кода:

      if($total>0){
      	$cnt = 100;
      	$i=$total-$cnt; 
      
      	while ($i>-$cnt){
      		$data = getUpdated($db, ($i>0)?$i:0, $cnt);
      		$products=array();
      		$skus=array();
      		foreach($data as $d){
      			$params = array(
      				'name'   => $d['name'],
      				'id'  => $d['product_id'],
      				//'price' 	=> $d['price'],
      				'available'  => $d['available'],
      				'status'  => $d['status'],
      				'count'=> $d['count'],
      			);
      			$products[$d['product_id']] = $params;
      		
      			$params2 = array(
      				'id' 	=> $d['sku_id'],
      				'price' => $d['price'],
      				'count'=> $d['count'],
      				'purchase_price'  => $d['purchase_price'],
      				'available'  => $d['available'],
      				'compare_price'  => $d['old_price'],
      			);
      			$skus[$d['skuid']] = $params2;
      		}
      		
      			$res = updateMassProduct($products, $skus, $ACCESS_TOKEN );
      			if($res){
      				// тут делаем лог или какие-то другие полезные вещи
      			}
      		$i-=$cnt;
      	}
      }

      где, getUpdated($db, ($i>0)?$i:0, $cnt) некая своя функция, которая тянет данные порциями  для обновления.

      • +1
        cms1c.ru cms1c.ru 21 ноября 2018 18:54 #

        Спасибо за пример, мы действительно обновляли поэлементными методами пока.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите