opencart-module/system/library/intarocrm/apihelper.php
2014-08-15 19:36:28 +04:00

202 lines
6.9 KiB
PHP

<?php
require_once __DIR__ . '/vendor/autoload.php';
class ApiHelper
{
private $dir, $fileDate;
protected $intaroApi, $log, $settings;
public function __construct($settings) {
$this->dir = __DIR__ . '/../logs/';
$this->fileDate = $this->dir . 'intarocrm_history.log';
$this->settings = $settings;
$this->domain = $settings['domain'];
$this->intaroApi = new IntaroCrm\RestApi(
$settings['intarocrm_url'],
$settings['intarocrm_apikey']
);
$this->initLogger();
}
public function dumperData($data)
{
return false;
}
public function orderCreate($data) {
$order = array();
$customer = array();
$payment_code = $data['payment_code'];
$delivery_code = $data['shipping_code'];
$settings = $this->settings;
try {
$customers = $this->intaroApi->customers($data['telephone'], $data['email'], $data['lastname'], 200, 0);
} catch (ApiException $e) {
$this->log->addError('['.$this->domain.'] RestApi::customers:' . $e->getMessage());
$this->log->addError('['.$this->domain.'] RestApi::customers:' . json_encode($data));
} catch (CurlException $e) {
$this->log->addError('['.$this->domain.'] RestApi::customers::Curl:' . $e->getMessage());
}
if(count($customers) > 0 && isset($customers[0]['externalId'])) {
$order['customerId'] = $customers[0]['externalId'];
} else {
$order['customerId'] = $data['customer_id'];
$customer['externalId'] = $data['customer_id'];
$customer['firstName'] = $data['firstname'];
$customer['lastName'] = $data['lastname'];
$customer['email'] = $data['email'];
$customer['phones']['number'] = $data['telephone'];
$customer['address']['text'] = implode(', ', array(
$data['payment_postcode'],
$data['payment_country'],
$data['payment_city'],
$data['payment_address_1'],
$data['payment_address_2']
));
try {
$this->intaroApi->customerCreate($customer);
} catch (ApiException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderCreate:' . $e->getMessage());
$this->log->addError('['.$this->domain.'] RestApi::orderCreate:' . json_encode($order));
} catch (CurlException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderCreate::Curl:' . $e->getMessage());
}
}
$order['externalId'] = $data['order_id'];
$order['firstName'] = $data['firstname'];
$order['lastName'] = $data['lastname'];
$order['email'] = $data['email'];
$order['phone'] = $data['telephone'];
$order['customerComment'] = $data['comment'];
$order['deliveryCost'] = 0;
foreach ($data['totals'] as $totals) {
if ($totals['code'] == 'shipping') {
$order['deliveryCost'] = $totals['value'];
}
}
$order['deliveryAddress']['text'] = implode(', ', array(
$data['shipping_postcode'],
$data['shipping_country'],
$data['shipping_city'],
$data['shipping_address_1'],
$data['shipping_address_2']
));
$order['createdAt'] = date('Y-m-d H:i:s');
$order['paymentType'] = $settings['intarocrm_payment'][$payment_code];
$order['delivery'] = array(
'code' => $settings['intarocrm_delivery'][$delivery_code],
'cost' => $order['deliveryCost']
);
foreach ($data['products'] as $product) {
$order['items'][] = array(
'productId' => $product['product_id'],
'productName' => $product['name'] . ' '. $product['model'],
'initialPrice' => $product['price'],
'quantity' => $product['quantity'],
);
}
try {
$this->intaroApi->orderCreate($order);
} catch (ApiException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderCreate:' . $e->getMessage());
$this->log->addError('['.$this->domain.'] RestApi::orderCreate:' . json_encode($order));
} catch (CurlException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderCreate::Curl:' . $e->getMessage());
}
}
public function orderHistory() {
try {
$orders = $this->intaroApi->orderHistory($this->getDate());
$this->saveDate($this->intaroApi->getGeneratedAt()->format('Y-m-d H:i:s'));
} catch (ApiException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderHistory:' . $e->getMessage());
$this->log->addError('['.$this->domain.'] RestApi::orderHistory:' . json_encode($orders));
return false;
} catch (CurlException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderHistory::Curl:' . $e->getMessage());
return false;
}
foreach($orders as $order) {
if (!isset($order['deleted'])) {
try {
$o = $this->intaroApi->orderGet($order['id'], 'id');
} catch (ApiException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderGet:' . $e->getMessage());
$this->log->addError('['.$this->domain.'] RestApi::orderGet:' . json_encode($order));
return false;
} catch (CurlException $e) {
$this->log->addError('['.$this->domain.'] RestApi::orderGet::Curl:' . $e->getMessage());
return false;
}
if(isset($o['orderMethod']) && $o['orderMethod'] == $this->params['intarocrm_api']['orderMethod']) {
$this->log->addNotice('send order to PAP: ' . $o['id'] . ' - ' . $o['status']);
}
}
}
return true;
}
private function saveDate($date) {
file_put_contents($this->fileDate, $date, LOCK_EX);
}
private function getDate() {
if (file_exists($this->fileDate)) {
$result = file_get_contents($this->fileDate);
} else {
$result = date('Y-m-d H:i:s', strtotime('-2 days', strtotime(date('Y-m-d H:i:s'))));
}
return $result;
}
private function explodeFIO($str) {
if(!$str)
return array();
$array = explode(" ", $str, 3);
$newArray = array();
foreach($array as $ar) {
if(!$ar)
continue;
$newArray[] = $ar;
}
return $newArray;
}
protected function initLogger() {
$this->log = new Monolog\Logger('intarocrm');
$this->log->pushHandler(new Monolog\Handler\StreamHandler($this->dir . 'intarocrm.log', Monolog\Logger::INFO));
}
}