Files
ltsecurityinc/app/code/JR/NetSuite/Lib/NetSuiteAPI.php
T

270 lines
7.6 KiB
PHP
Executable File

<?php
namespace JR\NetSuite\Lib;
use JR\NetSuite\Helper\Data;
use JR\NetSuite\Logger\Logger;
use JR\NetSuite\Lib\Oauth;
use Magento\Framework\HTTP\Client\Curl;
use Magento\Framework\Serialize\Serializer\Json;
class NetSuiteAPI
{
const CUSTOMER = 'customer';
const CUSTOMER_WITH_FILTER = 'customerWithFilter';
const RETURN_AUTHORIZATION = 'returnAuthorization';
const INVENTORY_ITEM = 'inventoryItem';
const INVENTORY_ITEM_WITH_LOCATION = 'inventoryItemWithLocation';
const LOCATION = 'location';
const SALES_ORDER = 'salesOrder';
const CREATE_LEAD_SCRIPT = '351';
const CREATE_SALES_ORDER_SCRIPT = '468';
const DEFAULT_PAGE_SIZE = 150;
const DEFAULT_PAGE = 1;
/**
* @var \JR\NetSuite\Helper\Data
*/
protected $helper;
/**
* @var \JR\NetSuite\Logger\Logger
*/
protected $_logger;
/**
* @var \JR\NetSuite\Lib\Oauth
*/
protected $oauth;
/**
* @var \Magento\Framework\HTTP\Client\Curl
*/
public $curl;
/**
* @var \Magento\Framework\Serialize\Serializer\Json
*/
public $json;
/**
* @param Data $helper
* @param Logger $_logger
*/
public function __construct(
Data $helper,
Logger $logger,
Oauth $oauth,
Curl $curl,
Json $json
) {
$this->helper = $helper;
$this->_logger = $logger;
$this->oauth = $oauth;
$this->curl = $curl;
$this->json = $json;
}
/**
* fetch customer data from NetSuite
*
* @param $pageSize
* @param $page
* @param $addtionalParams
* @return array
*/
public function fetchCustomers($pageSize = self::DEFAULT_PAGE_SIZE, $page = 1, $addtionalParams = [])
{
return $this->fetchData(self::CUSTOMER, $pageSize, $page, $addtionalParams);
}
/**
* fetch customer data from NetSuite by email
*
* @param $pageSize
* @param $page
* @param $addtionalParams
* @return array
*/
public function fetchCustomersWithFilter($pageSize = self::DEFAULT_PAGE_SIZE, $page = 1, $addtionalParams = [])
{
// TODO: filter not right for new lead
return $this->fetchData(self::CUSTOMER_WITH_FILTER, $pageSize, $page, $addtionalParams);
}
/**
* fetch return authorization data from NetSuite
*
* @param $pageSize
* @param $page
* @return array
*/
public function fetchReturnAuthorizations($pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
return $this->fetchData(self::RETURN_AUTHORIZATION, $pageSize, $page, $addtionalParams);
}
/**
* fetch location data from NetSuite
*
* @param $pageSize
* @param $page
* @return array
*/
public function fetchLocations($pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
return $this->fetchData(self::LOCATION, $pageSize, $page, $addtionalParams);
}
/**
* fetch product data from NetSuite
*
* @param $pageSize
* @param $page
* @return array
*/
public function fetchProducts($pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
return $this->fetchData(self::INVENTORY_ITEM, $pageSize, $page, $addtionalParams);
}
/**
* fetch product data from NetSuite
*
* @param $pageSize
* @param $page
* @return array
*/
public function fetchProductsWithLocation($pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
return $this->fetchData(self::INVENTORY_ITEM_WITH_LOCATION, $pageSize, $page, $addtionalParams);
}
/**
* fetch sales order data from NetSuite
*
* @param $pageSize
* @param $page
* @return array
*/
public function fetchOrders($pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
return $this->fetchData(self::SALES_ORDER, $pageSize, $page, $addtionalParams);
}
/**
* fetch data from NetSuite
*
* @param $recordType
* @param $pageSize
* @param $page
* @return array
*/
private function fetchData($recordType, $pageSize = self::DEFAULT_PAGE_SIZE, $page = self::DEFAULT_PAGE, $addtionalParams = [])
{
$params = [
'recordType' => $recordType,
'page' => $page,
'pageSize' => $pageSize
];
if (!empty($addtionalParams)) {
$params = array_merge($params, $addtionalParams);
}
$response = $this->postData($params);
return $response;
}
/**
* update customer data to NetSuite
*/
public function updateCustomer($data)
{
$this->oauth->setScript(self::CREATE_LEAD_SCRIPT);
$response = $this->postData($data);
return $response;
}
/**
* update order data to NetSuite
*/
public function updateOrder($data)
{
$this->oauth->setScript(self::CREATE_SALES_ORDER_SCRIPT);
$response = $this->postData($data);
return $response;
}
/**
* create return authorization in NetSuite
*/
public function createReturnAuthorization($data)
{
$params = [
'action' => 'create',
'recordType' => self::RETURN_AUTHORIZATION,
'data' => $data
];
$response = $this->postData($params);
return $response;
}
/**
* update data to NetSuite
*/
public function updateData($recordType, $data)
{
$params = [
'recordType' => $recordType,
'data' => $data
];
$response = $this->postData($params);
return $response;
}
/**
* @param array $data
* @return array
*/
public function postData(array $data)
{
$url = $this->oauth->getApiUrl() . '?script=' . $this->oauth->getScript() . '&deploy=1';
$oauthCredentials = $this->oauth->getOauthParams('POST');
$jsonData = $this->json->serialize($data);
$this->_logger->info('Request: ' . $jsonData);
try {
$this->curl->addHeader("Accept", "application/json");
$this->curl->addHeader("Content-Type", "application/json");
$this->curl->addHeader("Authorization", $oauthCredentials);
// $this->curl->addHeader("Cookie", "NS_ROUTING_VERSION=LAGGING");
$this->curl->post($url, $jsonData);
// check the status code returned by NetSuite
$statusCode = $this->curl->getStatus();
$this->_logger->info('Status Code: ' . $statusCode);
$this->_logger->info('NetSuite API data: ', ['data' => $data, 'url' => $url]);
if ($statusCode != 200) {
$this->_logger->error("Error: " . $this->curl->getBody());
return $response = [
'error' => true,
'message' => $this->curl->getBody()
];
}
$response = $this->curl->getBody();
$this->_logger->info('Response: ' . $response);
$response = $this->json->unserialize($response);
# if response is not an array, unserialize again
if (!is_array($response)) {
$response = $this->json->unserialize($response);
}
return $response;
} catch (\Exception $e) {
$this->_logger->error("error: " . $e->getMessage());
return $response = [
'error' => true,
'message' => $e->getMessage()
];
}
}
}