init commit
This commit is contained in:
commit
d37e104105
|
|
@ -0,0 +1 @@
|
|||
config.php
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,153 @@
|
|||
<?php
|
||||
|
||||
class livesklad
|
||||
{
|
||||
protected $token_info = array();
|
||||
protected $api_url = "https://api.livesklad.com";
|
||||
private $login = "";
|
||||
private $password = "";
|
||||
private $cURL = null;
|
||||
private $headers = 'Content-Type: application/x-www-form-urlencoded';
|
||||
|
||||
public $id = "";
|
||||
public $remainRequest = 0;
|
||||
|
||||
public function __construct($login, $password)
|
||||
{
|
||||
if(!isset($login) || !isset($password)) exit();
|
||||
|
||||
$this->login = $login;
|
||||
$this->password = $password;
|
||||
$this->cURL = curl_init();
|
||||
|
||||
curl_setopt_array($this->cURL, array(
|
||||
CURLOPT_RETURNTRANSFER => 1,
|
||||
CURLOPT_REFERER => "http://optima-crimea.ru/",
|
||||
));
|
||||
|
||||
if(file_exists("class_" . __CLASS__ . ".json")) $this->token_info = json_decode(file_get_contents("class_" . __CLASS__ . ".json"), true);
|
||||
$this->__checkToken();
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
if($this->cURL)
|
||||
curl_close($this->cURL);
|
||||
}
|
||||
|
||||
//Проверка токена на актуальность
|
||||
private function __checkToken()
|
||||
{
|
||||
if(!isset($this->token_info['token']) || time() - $this->token_info["time"] >= 10 * 60) /* token timeout is 10 min */
|
||||
$this->__getToken();
|
||||
}
|
||||
|
||||
|
||||
//Получение токена, сохранение в файл
|
||||
private function __getToken()
|
||||
{
|
||||
$method = "auth";
|
||||
|
||||
$params = array('login' => $this->login, 'password' => $this->password);
|
||||
|
||||
$result = $this->query($method, $params, false);
|
||||
|
||||
if(isset($result->error))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->token_info = array("token" => $result->token, "time" => time(), "renew" => false, 'headers' => [$this->headers, 'Authorization: ' . $result->token]);
|
||||
file_put_contents("class_" . __CLASS__ . ".json", json_encode($this->token_info));
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected function query($method, $params = [], $get)
|
||||
{
|
||||
// $get = true Метод GET, false Метод POST
|
||||
$url = $this->api_url . "/" . $method;
|
||||
$response = "";
|
||||
|
||||
if(!empty($params) && $get == true)
|
||||
{
|
||||
$url .= "?" . http_build_query($params);
|
||||
}
|
||||
curl_setopt($this->cURL, CURLOPT_URL, $url);
|
||||
|
||||
if($get == true)
|
||||
{
|
||||
curl_setopt($this->cURL, CURLOPT_POST, 0);
|
||||
curl_setopt($this->cURL, CURLOPT_HTTPHEADER, $this->token_info['headers']);
|
||||
$response = json_decode(curl_exec($this->cURL), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
curl_setopt($this->cURL, CURLOPT_POST, 1);
|
||||
curl_setopt($this->cURL, CURLOPT_POSTFIELDS, http_build_query($params));
|
||||
$response = json_decode(curl_exec($this->cURL));
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
public function getOrders ($params = [])
|
||||
{
|
||||
$this->__checkToken();
|
||||
|
||||
$method = "company/orders";
|
||||
|
||||
if(is_array($params) == false)
|
||||
{
|
||||
$params = [];
|
||||
}
|
||||
|
||||
return $this->query($method, $params, true);
|
||||
}
|
||||
|
||||
|
||||
public function getCounteragents ($params = [])
|
||||
{
|
||||
$this->__checkToken();
|
||||
|
||||
$method = "counteragents";
|
||||
|
||||
if(is_array($params) == false)
|
||||
{
|
||||
$params = [];
|
||||
}
|
||||
|
||||
return $this->query($method, $params, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getBranches($params = [])
|
||||
{
|
||||
$this->__checkToken();
|
||||
|
||||
$method = "shops";
|
||||
|
||||
return $this->query($method, $params, true);
|
||||
}
|
||||
|
||||
|
||||
public function getStatusID()
|
||||
{
|
||||
$this->__checkToken();
|
||||
|
||||
$method = "statuses";
|
||||
|
||||
$params = [];
|
||||
|
||||
$result = $this->query($method, $params, true);
|
||||
|
||||
return $result['data'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
if (php_sapi_name() != "cli")
|
||||
{
|
||||
die("Only CLI mode allowed!");
|
||||
}
|
||||
|
||||
require_once("class_livesklad.php");
|
||||
require_once("class_MysqliDb.php");
|
||||
|
||||
|
||||
$live = new livesklad(API_LOGIN, API_PASSWD);
|
||||
$db = new MysqliDb ('localhost', DB_LOGIN, DB_PASSWD, DB_NAME);
|
||||
|
||||
$pauseBetweenRequests = 7;
|
||||
$pauseLong = 5 * 60;
|
||||
$dataLimit = 0;
|
||||
$maxPageSize = 50;
|
||||
$maxQueryLimit = 10000;
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$params = array (
|
||||
"page" => 1,
|
||||
"pageSize" => 50
|
||||
);
|
||||
|
||||
|
||||
$i = 0;
|
||||
//$db->onDuplicate(array("dateClose", "summPrice", "purchasePrice"), "orderId");
|
||||
|
||||
$remainRequest = 0;
|
||||
|
||||
do
|
||||
{
|
||||
$pageSize = ($params["page"] * $params["pageSize"] >= $maxQueryLimit) ? floor( ($maxQueryLimit / ($params["page"] * $maxPageSize)) * $maxPageSize) : $maxPageSize;
|
||||
$params["pageSize"] = min($pageSize, $params["pageSize"]);
|
||||
|
||||
|
||||
$results = $live->getCounteragents($params);
|
||||
|
||||
|
||||
|
||||
if ( isset($results["error"]) )
|
||||
{
|
||||
echo "Error: " . $results["error"]["statusCode"] . "\n" . $results["error"]["message"] . "\n";
|
||||
echo "Page#: " . $params["page"] . "; pageSize: " . $pageSize . "\n";
|
||||
$remainRequest = $results["error"]["remainRequest"];
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($results["data"] as $result)
|
||||
{
|
||||
if(isset($result["id"]))
|
||||
{
|
||||
$id = $db->insert ("counteragents", array(
|
||||
"id" => $result["id"],
|
||||
"name" => $result["name"]
|
||||
));
|
||||
|
||||
if (is_array($result["phones"]) && sizeof($result["phones"]) > 0)
|
||||
{
|
||||
foreach ($result["phones"] as $phone)
|
||||
{
|
||||
$id = $db->insert("counteragents_phone", array(
|
||||
"counteragent_id" => $result["id"],
|
||||
"phone_number" => preg_replace("/[^0-9]/", "", $phone)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if(!$id)
|
||||
{
|
||||
echo "Insert failed: " . $db->getLastError() . "\n";
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$remainRequest = $results["remainRequest"];
|
||||
|
||||
if (!$dataLimit ) $dataLimit = $results["total"];
|
||||
|
||||
echo "Grabbed: " . $i . "[" . $dataLimit . "]; Page: " . $params["page"] . "[" . $params["pageSize"] . "]\n";
|
||||
|
||||
|
||||
$params["page"]++;
|
||||
}
|
||||
|
||||
echo "Remains: " . $remainRequest ."\n---\n";
|
||||
|
||||
if ($remainRequest < 4) sleep($pauseLong); else sleep($pauseBetweenRequests);
|
||||
}
|
||||
while ($remainRequest > 1 && $i < $dataLimit)
|
||||
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
if (php_sapi_name() != "cli")
|
||||
{
|
||||
die("Only CLI mode allowed");
|
||||
}
|
||||
|
||||
require_once("class_livesklad.php");
|
||||
require_once("class_MysqliDb.php");
|
||||
|
||||
|
||||
$live = new livesklad(API_LOGIN, API_PASSWD);
|
||||
$db = new MysqliDb ('localhost', DB_LOGIN, DB_PASSWD, DB_NAME);
|
||||
|
||||
$pauseBetweenRequests = 7;
|
||||
$pauseLong = 5 * 60;
|
||||
$dataLimit = 100;
|
||||
$maxPageSize = 50;
|
||||
$maxQueryLimit = 10000;
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$params = array (
|
||||
"isVisible" => true,
|
||||
"page" => 1,
|
||||
"pageSize" => 50,
|
||||
"sort" => "id DESC"
|
||||
);
|
||||
|
||||
$i = 0;
|
||||
$db->onDuplicate(array("dateClose", "summPrice", "purchasePrice"), "orderId");
|
||||
|
||||
$remainRequest = 0;
|
||||
|
||||
do
|
||||
{
|
||||
$pageSize = ($params["page"] * $params["pageSize"] >= $maxQueryLimit) ? floor( ($maxQueryLimit / ($params["page"] * $maxPageSize)) * $maxPageSize) : $maxPageSize;
|
||||
$params["pageSize"] = min($pageSize, $params["pageSize"]);
|
||||
|
||||
|
||||
$orders = $live->getOrders($params);
|
||||
|
||||
|
||||
|
||||
if ( isset($orders["error"]) )
|
||||
{
|
||||
echo "Error: " . $orders["error"]["statusCode"] . "\n" . $orders["error"]["message"] . "\n";
|
||||
echo "Page: " . $params["page"] . "; pageSize: " . $pageSize . "\n";
|
||||
$remainRequest = $orders["error"]["remainRequest"];
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($orders["data"] as $order)
|
||||
{
|
||||
if(isset($order["id"]))
|
||||
{
|
||||
$order["dateCreate"] = date("Y-m-d H:i:s", strtotime($order["dateCreate"]));
|
||||
$order["dateClose"] = (isset($order["dateClose"]) && !is_null($order["dateClose"])) ? date("Y-m-d H:i:s", strtotime($order["dateClose"])) : null;
|
||||
|
||||
$id = $db->insert ("orders", array(
|
||||
"orderId" => $order["id"],
|
||||
"counteragentId" => $order["counteragentId"],
|
||||
"dateCreate" => $order["dateCreate"],
|
||||
"dateClose" => $order["dateClose"],
|
||||
"shopId" => $order["shopId"],
|
||||
"statusId" => $order["statusId"],
|
||||
"typeOrderId" => $order["typeOrderId"],
|
||||
"summPrice" => $order["summ"]["price"],
|
||||
"purchasePrice" => $order["summ"]["purchasePrice"]
|
||||
));
|
||||
|
||||
if(!$id)
|
||||
{
|
||||
echo "Insert failed: " . $db->getLastError() . "\n";
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
$remainRequest = $orders["remainRequest"];
|
||||
|
||||
if (!$dataLimit ) $dataLimit = $orders["total"];
|
||||
|
||||
echo "Grabbed: " . $i . "[" . $orders["total"] . "]; Page: " . $params["page"] . "[" . $params["pageSize"] . "]\n";
|
||||
|
||||
|
||||
$params["page"]++;
|
||||
}
|
||||
|
||||
echo "Remains: " . $remainRequest ."\n---\n";
|
||||
|
||||
//@file_put_contents('grab_orders.json', json_encode($params));
|
||||
|
||||
if ($remainRequest < 4) sleep($pauseLong); else sleep($pauseBetweenRequests);
|
||||
}
|
||||
while ($remainRequest > 1 && $i <= $dataLimit)
|
||||
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
if (php_sapi_name() != "cli")
|
||||
{
|
||||
die("Only CLI mode allowed!");
|
||||
}
|
||||
|
||||
require_once("class_livesklad.php");
|
||||
require_once("class_MysqliDb.php");
|
||||
|
||||
|
||||
$live = new livesklad(API_LOGIN, API_PASSWD);
|
||||
$db = new MysqliDb ('localhost', DB_LOGIN, DB_PASSWD, DB_NAME);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$params = array (
|
||||
"page" => 1,
|
||||
"pageSize" => 50
|
||||
);
|
||||
|
||||
|
||||
$results = $live->getBranches($params);
|
||||
|
||||
print_r($results);
|
||||
|
||||
/*
|
||||
|
||||
*/
|
||||
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
SELECT
|
||||
c.id,
|
||||
c.name,
|
||||
GROUP_CONCAT(cph.phone_number SEPARATOR ';') AS phone
|
||||
FROM counteragents c
|
||||
LEFT JOIN counteragents_phone cph ON c.id = cph.counteragent_id
|
||||
GROUP BY id
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
SELECT
|
||||
o.orderId,
|
||||
c.name,
|
||||
GROUP_CONCAT(DISTINCT(cph.phone_number) SEPARATOR ';') AS phone,
|
||||
o.dateCreate,
|
||||
o.dateClose,
|
||||
o.shopId,
|
||||
o.statusId,
|
||||
o.summPrice,
|
||||
o.purchasePrice
|
||||
FROM
|
||||
orders o
|
||||
LEFT JOIN counteragents c ON c.id = o.counteragentId
|
||||
LEFT JOIN counteragents_phone cph ON c.id = cph.counteragent_id
|
||||
WHERE
|
||||
o.dateClose IS NULL
|
||||
GROUP BY c.id
|
||||
ORDER BY dateCreate DESC
|
||||
LIMIT 30
|
||||
Loading…
Reference in New Issue