270 lines
7.6 KiB
PHP
Executable File
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()
|
|
];
|
|
}
|
|
}
|
|
}
|