Комментарии клиента и менеджера, запись даты последнего заказа в лог
This commit is contained in:
parent
131a1a12a8
commit
c23e061525
@ -48,67 +48,89 @@ class ApiHelper {
|
|||||||
|
|
||||||
$orders = $this->filterOrders($orders);
|
$orders = $this->filterOrders($orders);
|
||||||
|
|
||||||
if ($this->uploadOrders($orders)) {
|
$this->uploadOrders($orders);
|
||||||
$a = sizeof($orders);
|
|
||||||
echo "uploaded $a orders" . PHP_EOL;
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
echo "upload failed" . PHP_EOL;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function uploadOrders($orders) {
|
protected function uploadOrders($orders) {
|
||||||
if ($orders === false)
|
|
||||||
return false;
|
|
||||||
if (sizeof($orders)) {
|
if (sizeof($orders)) {
|
||||||
$orders = array_chunk($orders, $this->config['retailcrm_order_chunk_size']);
|
$orders = array_chunk($orders, $this->config['retailcrm_order_chunk_size']);
|
||||||
foreach ($orders as $chunk) {
|
foreach ($orders as $chunk) {
|
||||||
try {
|
try {
|
||||||
$result = $this->crmClient->ordersUpload($chunk);
|
$result = $this->crmClient->ordersUpload($chunk);
|
||||||
} catch (\RetailCrm\Exception\CurlException $e) {
|
|
||||||
$this->writeLog(
|
|
||||||
'\Retailcrm\ApiClient::ordersUpload: ' . $e,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!$result->isSuccessful()) {
|
if (!$result->isSuccessful()) {
|
||||||
$this->writeLog(
|
$this->writeLog('ordersUpload: ' . $result['errorMsg'] . (isset($result['errors']) ? ': ' . json_encode($result['errors']) : ''));
|
||||||
'\Retailcrm\ApiClient::ordersUpload: ' . $result['errorMsg'] . (isset($result['errors']) ? ': ' . json_encode($result['errors']) : '')
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
time_nanosleep(0, 200000000);
|
time_nanosleep(0, 200000000);
|
||||||
|
} catch (\RetailCrm\Exception\CurlException $e) {
|
||||||
|
$this->writeLog('ordersUpload: ' . $e, 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function checkCustomers($order) {
|
protected function checkCustomers($order) {
|
||||||
$customerId = false;
|
$customerId = false;
|
||||||
if ($order['email'] != '') $filter['email']= $order['email'];
|
$filter = array();
|
||||||
if ($order['phone'] != '') $filter['name'] = $order['phone'];
|
|
||||||
|
|
||||||
if (isset($filter)) {
|
if (!empty($order['email'])) $filter['email']= $order['email'];
|
||||||
|
if (!empty($order['phone'])) $filter['name'] = $order['phone'];
|
||||||
|
|
||||||
|
if (!empty($filter)) {
|
||||||
try {
|
try {
|
||||||
$customers = $this->crmClient->customersList($filter);
|
$customers = $this->crmClient->customersList($filter);
|
||||||
} catch (\RetailCrm\Exception\CurlException $e) {
|
} catch (\RetailCrm\Exception\CurlException $e) {
|
||||||
$this->writeLog(
|
$this->writeLog('customersList: ' . $e, 'error');
|
||||||
'\Retailcrm\ApiClient::customersList: ' . $e,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($customers['customers'])) {
|
if (!empty($customers['customers'])) {
|
||||||
foreach ($customers as $_customer) {
|
foreach ($customers['customers'] as $_customer) {
|
||||||
if (!empty($_customer['externalId'])) {
|
if (!empty($_customer['externalId'])) {
|
||||||
$customerId = $_customer['externalId'];
|
$customerId = $_customer['externalId'];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if ($customerId === false) {
|
||||||
|
try {
|
||||||
|
$request = $this->crmClient->customersFixExternalId(
|
||||||
|
array(
|
||||||
|
'id' => $customers['customers'][0]['id'],
|
||||||
|
'externalId' => $order['externalId']
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($request->isSuccessful()) {
|
||||||
|
$customerId = $order['externalId'];
|
||||||
|
}
|
||||||
|
} catch (\RetailCrm\Exception\CurlException $e) {
|
||||||
|
$this->writeLog('customersFixExternalIds: ' . $e, 'error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
$request = $this->crmClient->customersCreate(
|
||||||
|
array(
|
||||||
|
'externalId' => $order['externalId'],
|
||||||
|
'firstName' => $order['firstName'],
|
||||||
|
'lastName' => !empty($order['lastName']) ? $order['lastName'] : '',
|
||||||
|
'email' => !empty($order['email']) ? $order['email'] : '',
|
||||||
|
'phones' => !empty($order['phone'])
|
||||||
|
? array(array('number' => $order['phone']))
|
||||||
|
: array()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($request->isSuccessful()) {
|
||||||
|
$customerId = $order['externalId'];
|
||||||
|
}
|
||||||
|
} catch (\RetailCrm\Exception\CurlException $e) {
|
||||||
|
$this->writeLog('customersCreate: ' . $e, 'error');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $customerId;
|
return $customerId;
|
||||||
@ -129,6 +151,7 @@ class ApiHelper {
|
|||||||
|
|
||||||
protected function filterOrders($toUpload) {
|
protected function filterOrders($toUpload) {
|
||||||
$numbers = array_keys($toUpload);
|
$numbers = array_keys($toUpload);
|
||||||
|
|
||||||
if (date_create_from_format('Y-m-d H:i:s', $this->config['date_from'])) {
|
if (date_create_from_format('Y-m-d H:i:s', $this->config['date_from'])) {
|
||||||
foreach ($toUpload as $i => $order) {
|
foreach ($toUpload as $i => $order) {
|
||||||
if ($order['createdAt'] < $this->config['date_from']) {
|
if ($order['createdAt'] < $this->config['date_from']) {
|
||||||
|
@ -17,6 +17,7 @@ class Parser {
|
|||||||
case 'id':
|
case 'id':
|
||||||
$val = (string)$val;
|
$val = (string)$val;
|
||||||
$order['number'] = $this->config['order_prefix'] . $val;
|
$order['number'] = $this->config['order_prefix'] . $val;
|
||||||
|
$order['externalId'] = $val;
|
||||||
break;
|
break;
|
||||||
case 'state':
|
case 'state':
|
||||||
$orderStatuses = array_flip($this->config['order_statuses']);
|
$orderStatuses = array_flip($this->config['order_statuses']);
|
||||||
@ -32,22 +33,42 @@ class Parser {
|
|||||||
$order = array_merge($order, array(
|
$order = array_merge($order, array(
|
||||||
'email' => (string)$xml->email,
|
'email' => (string)$xml->email,
|
||||||
'phone' => (string)$xml->phone,
|
'phone' => (string)$xml->phone,
|
||||||
'orderMethod' => $this->config['order_method'],
|
|
||||||
'createdAt' => $createdAt,
|
'createdAt' => $createdAt,
|
||||||
'paymentType' => $this->config['payment'][(string)$xml->paymentType],
|
|
||||||
'delivery' => array(
|
'delivery' => array(
|
||||||
'address' => array(
|
'address' => array(
|
||||||
'text' => (string)$xml->address
|
'text' => trim((string)$xml->address)
|
||||||
),
|
),
|
||||||
'code' => $this->config['delivery'][(string)$xml->deliveryType]
|
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
if (empty($xml->name) && empty((string) $xml->email)) {
|
||||||
|
$order['orderMethod'] = 'callback';
|
||||||
|
} else {
|
||||||
|
$order['orderMethod'] = $this->config['order_method'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($xml->deliveryType) && isset($this->config['delivery'][(string)$xml->deliveryType])) {
|
||||||
|
$order['delivery']['code'] = $this->config['delivery'][(string)$xml->deliveryType];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($xml->paymentType) && isset($this->config['payment'][(string)$xml->paymentType])) {
|
||||||
|
$order['paymentType'] = $this->config['payment'][(string)$xml->paymentType];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($xml->salescomment)) {
|
||||||
|
$order['managerComment'] = (string)$xml->salescomment;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($xml->payercomment)) {
|
||||||
|
$order['customerComment'] = (string)$xml->payercomment;
|
||||||
|
}
|
||||||
|
|
||||||
$items = array();
|
$items = array();
|
||||||
$xmlItems = $xml->items;
|
$xmlItems = $xml->items;
|
||||||
foreach($xmlItems as $xmlItem) {
|
foreach($xmlItems as $xmlItem) {
|
||||||
$xmlItem = $xmlItem->item;
|
$xmlItem = $xmlItem->item;
|
||||||
$items[] = array(
|
$items[] = array(
|
||||||
'productId' => (string)$xmlItem->external_id,
|
'productId' => (string)$xmlItem['id'],
|
||||||
'productName' => (string)$xmlItem->name,
|
'productName' => (string)$xmlItem->name,
|
||||||
'quantity' => (string)$xmlItem->quantity,
|
'quantity' => (string)$xmlItem->quantity,
|
||||||
'initialPrice' => (string)$xmlItem->price
|
'initialPrice' => (string)$xmlItem->price
|
||||||
|
10
run.php
10
run.php
@ -2,11 +2,13 @@
|
|||||||
require(__DIR__ . "/classes/ApiHelper.php");
|
require(__DIR__ . "/classes/ApiHelper.php");
|
||||||
require(__DIR__ . "/config/config.php");
|
require(__DIR__ . "/config/config.php");
|
||||||
|
|
||||||
if (! file_exists(__DIR__ . "/logs"))
|
if (! file_exists(__DIR__ . "/logs")) {
|
||||||
mkdir(__DIR__ . "/logs");
|
mkdir(__DIR__ . "/logs");
|
||||||
|
}
|
||||||
|
|
||||||
if (file_exists(__DIR__ . "/logs/cookie.txt"))
|
if (file_exists(__DIR__ . "/logs/cookie.txt")) {
|
||||||
unlink(__DIR__ . "/logs/cookie.txt");
|
unlink(__DIR__ . "/logs/cookie.txt");
|
||||||
|
}
|
||||||
|
|
||||||
$lockFile = __DIR__ . "/run.lock";
|
$lockFile = __DIR__ . "/run.lock";
|
||||||
|
|
||||||
@ -25,5 +27,7 @@ if (file_exists(__DIR__ . "/logs/sync.log")) {
|
|||||||
|
|
||||||
$apiHelper = new ApiHelper($сonfig);
|
$apiHelper = new ApiHelper($сonfig);
|
||||||
|
|
||||||
if ($apiHelper->processXMLOrders())
|
if ($apiHelper->processXMLOrders()) {
|
||||||
unlink($lockFile);
|
unlink($lockFile);
|
||||||
|
file_put_contents(__DIR__ . "/logs/sync.log", date('Y-m-d H:i:s'));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user