private static function jsonDecode($data, $assoc = false)
 {
     $result = false;
     if (function_exists('json_decode')) {
         $result = array(true, json_decode($data, $assoc));
     } elseif (method_exists('Tools', 'jsonEncode')) {
         $result = array(true, Tools::jsonDecode($data, $assoc));
     } else {
         $result = array(false);
     }
     if ($result) {
         $code = isset($result[1]['status']) ? $result[1]['status']['code'] : $result[1]['code'];
         $message = isset($result[1]['status']) ? $result[1]['status']['message'] : $result[1]['message'];
         $response = isset($result[1]['response']) ? $result[1]['response'] : '';
         return array('json' => true, 'status_code' => $code, 'status_message' => $message, 'response' => $response);
     } else {
         $result = preg_match('/code[\\W]*(\\d*)/', $data, $matches);
         $status_code = $result == 1 ? $matches[1] : '';
         unset($matches, $result);
         $result = preg_match("/message[\\W]*[\"'](.*?)[\"']/", $data, $matches);
         $status_message = $result == 1 ? $matches[1] : '';
         unset($matches, $result);
         $result = preg_match('/response[\\W]*({)/', $data, $matches, PREG_OFFSET_CAPTURE);
         $response = '';
         if ($result == 1 && isset($matches[1][1])) {
             $response = YotpoHttpClient::getStringBetweenBrackets(substr($data, $matches[1][1]));
         }
         return array('json' => false, 'status_code' => $status_code, 'status_message' => $status_message, 'response' => $response);
     }
 }