* @copyright 2020 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ class RetailcrmProxy { private $api; private $log; public function __construct($url, $key, $log) { $this->api = new RetailcrmApiClientV5($url, $key); $this->log = $log; } /** * Reduces error array into string * * @param $errors * * @return false|string */ private static function reduceErrors($errors) { $reduced = ''; if (is_array($errors)) { foreach ($errors as $key => $error) { $reduced .= sprintf('%s => %s\n', $key, $error); } } return $reduced; } public function __call($method, $arguments) { $date = date('Y-m-d H:i:s'); try { RetailcrmLogger::writeDebug($method, print_r($arguments, true)); $response = call_user_func_array(array($this->api, $method), $arguments); if (!($response instanceof RetailcrmApiResponse)) { RetailcrmLogger::writeDebug($method, $response); return $response; } if (!$response->isSuccessful()) { RetailcrmLogger::writeCaller($method, $response->getErrorMsg()); if (isset($response['errors'])) { RetailcrmApiErrors::set($response['errors'], $response->getStatusCode()); $error = static::reduceErrors($response['errors']); RetailcrmLogger::writeNoCaller($error); } $response = false; } else { // Don't print long lists in debug logs (errors while calling this will be easy to detect anyway) if (in_array($method, array('statusesList', 'paymentTypesList', 'deliveryTypesList'))) { RetailcrmLogger::writeDebug($method, '[request was successful, but response is omitted]'); } else { RetailcrmLogger::writeDebug($method, $response->getRawResponse()); } } return $response; } catch (CurlException $e) { RetailcrmLogger::writeCaller(get_class($this->api).'::'.$method, $e->getMessage()); RetailcrmLogger::writeNoCaller($e->getTraceAsString()); return false; } catch (InvalidJsonException $e) { RetailcrmLogger::writeCaller(get_class($this->api).'::'.$method, $e->getMessage()); RetailcrmLogger::writeNoCaller($e->getTraceAsString()); return false; } } }