Получаем остатки в МС, выгружаем в ABCP, запоминаем артикулы, производителя номенклатуры и коды МС в файлах abcpbrands.array abcpcodes.array msids.array

http://cp.abcp.ru/?page=distributors

Сердюков К.Е. 8-951-871-14-57 kserdyukov@mail.ru

Остатки на складе МС

'; //echo 'Результат запроса до декодирования
'; $url = 'online.moysklad.ru/api/remap/1.1/report/stock/all'; $page = 0; $total = 1000000;//всего товаров в выдаче $prevtime = 0;//чтобы считать разницу во времени //делаем 3 массива, чтобы в будущем проще искать $msids = array();//массив с идентификаторами МС $abcpcodes = array();//массив с кодами ABCP $abcpbrands = array();//массив с производителями ABCP $fileCSV = "Brand;Artikul;Description;Kratnost;Cena;Nalichie;ExternalCode\r\n"; while ($page*100 < $total) { if ($page == 0) { $offset = 0; } else { $offset = 100*$page+1; } $page++; $fullurl = "https://".$login.":".$password."@".$url."?offset=".$offset."&limit=100";//добавляем постраничный вывод, так как больше 100 товаров за раз не выводит //echo $fullurl."
"; $StockFile = file_get_contents($fullurl); $StockFile = json_decode($StockFile, true);//преобразовать в ассоциативный массив, а не в объект if ($total == 1000000) { $total = $StockFile['meta']['size']; tolog("Выгружено позиций: ".$total, false); echo "Всего позиций: ".$total."
"; } //создаем файл csv при выводе таблицы foreach ($StockFile['rows'] as $row) { $manufacturer = iconv("UTF-8", "WINDOWS-1251", $row["article"]); $name = iconv("UTF-8", "WINDOWS-1251", $row["name"]); $price = ((int)$row["salePrice"]/100);//выгружаем на сайт продажную цену $stock = (int)$row["stock"]; //извлекаем из метаданных идентификатор товара $id = str_replace(array("https://online.moysklad.ru/api/remap/1.1/entity/product/","?expand=supplier"),"",$row["meta"]["href"]); $msids[] = $id;//массив с идентификаторами МС $abcpcodes[] = $row["code"];//массив с кодами ABCP $abcpbrands[] = $manufacturer;//массив с производителями ABCP $fileCSV .= $manufacturer.";".$row["code"].";".$name.";1;".$price.";".$stock.";".$id."\r\n"; } echo "
".$fileCSV."
"; //определяем время, если разница в выполнении меньше 0.2 с, то задерж иваем $curtime = time(); //echo $curtime."
"; if ($curtime = $prevtime) { usleep(200000);//на 0.2 с 1 млн. доля с } $prevtime = $curtime; } $fname = "csv_stock.csv"; file_put_contents($fname, $fileCSV); $fnamezip = "csv_stock.zip"; if (file_exists($fnamezip)) { unlink($fnamezip); } $zip = new ZipArchive; $res = $zip->open($fnamezip, ZipArchive::CREATE); $zip->addFile($fname); $zip->close(); if (file_exists($fname)) { unlink($fname); } //заполняем вспомогательные массивы для удобства работы $msids[] = $id;//массив с идентификаторами МС $abcpcodes[] = $row["code"];//массив с кодами ABCP $abcpbrands[] = $manufacturer;//массив с производителями ABCP file_put_contents("msids.array", serialize($msids)); file_put_contents("abcpcodes.array", serialize($abcpcodes)); file_put_contents("abcpbrands.array", serialize($abcpbrands)); /*echo "msids;abcpcodeslabcpbrands
"; for ($i==0;$i<=count($msids);$i++) { echo $msids[$i].";".$abcpcodes[$i].";".$abcpbrands[$i]."
"; }*/ ini_set('display_errors', 1); error_reporting(E_ALL); //теперь выгружаем на abcp с помощью curl $post_data = array ("userlogin" => $abcplogin, "userpsw"=> $abcppassword, "distributorId"=> $distributorId, "fileTypeId"=> "1",//полная выгрузка "uploadFile" => "@".$fnamezip);//или не имя файла, а сам файл //выгружаем архив "uploadFile" => "@".$fname);//или не имя файла, а сам файл $CurlPost = curl_init(); curl_setopt($CurlPost, CURLOPT_HTTPHEADER, array("Content-Type: multipart/form-data")); curl_setopt($CurlPost, CURLOPT_URL, "http://".$abcphost."/cp/distributor/pricelistUpdate"); curl_setopt($CurlPost, CURLOPT_RETURNTRANSFER, true);//TRUE для возврата результата передачи в качестве строки из curl_exec() вместо прямого вывода в браузер. curl_setopt($CurlPost, CURLOPT_POST, true); curl_setopt($CurlPost, CURLOPT_POSTFIELDS, $post_data); curl_setopt($CurlPost, CURLINFO_HEADER_OUT, true);//You can see the information regarding the transfer by doing $response = curl_exec($CurlPost); $httpcode = curl_getinfo($CurlPost, CURLINFO_HTTP_CODE); echo "Код ответа сервера =".$httpcode."
"; if ($httpcode == 200) { curl_close($CurlPost); $response = json_decode($response, true);//преобразовать в ассоциативный массив, а не в объект //print_r($response); $message = iconv("UTF-8", "WINDOWS-1251", $response["message"]); echo "status: ".$response["status"]."
"; echo "message: ".$message."
"; } else { echo "Ответ на запрос: ".$response; } ?>