Получаем остатки в МС, выгружаем в 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;
}
?>