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() ]; } } }