function call($method, $args = array(), $post = false) { $url = $this->api_url . $method . '/'; foreach ($args as $key => $value) { if (empty($value)) { unset($args[$key]); } } if (!$post) { $url .= '?' . _vcf_get_query_string($args); $args = null; } if (!($response = _vcf_urlopen($url, $args)) || !$response['code']) { $this->last_error = 'Unable to connect to the Vicomi API servers'; return false; } if ($response['code'] != 200) { if ($response['code'] == 500) { if (!empty($response['headers']['X-Sentry-ID'])) { $this->last_error = 'Vicomi returned a bad response (HTTP ' . $response['code'] . ', ReferenceID: ' . $response['headers']['X-Sentry-ID'] . ')'; return false; } } elseif ($response['code'] == 400) { $data = vicomi_json_decode($response['data']); if ($data && $data->message) { $this->last_error = $data->message; } else { $this->last_error = "Vicomi returned a bad response (HTTP " . $response['code'] . ")"; } return false; } $this->last_error = "Vicomi returned a bad response (HTTP " . $response['code'] . ")"; return false; } $data = vicomi_json_decode($response['data']); if (!$data) { $this->last_error = 'No valid JSON content returned from Vicomi'; return false; } if (!$data->succeeded) { if (!$data->message) { $this->last_error = '(No error message was received)'; } else { $this->last_error = $data->message; } return false; } $this->last_error = null; return $data->message; }
function _vcf_fopen_urlopen($url, $postdata, &$response, $file_name, $file_field) { $params = array(); if ($file_name && $file_field) { $boundary = '----------' . md5(time()); $content = _vcf_get_post_content($boundary, $postdata, $file_name, $file_field); $header = _vcf_get_http_headers_for_request($boundary, $content, $file_name, $file_field); $params = array('http' => array('method' => 'POST', 'header' => $header, 'content' => $content, 'timeout' => TIMEOUT)); } else { if ($postdata) { $params = array('http' => array('method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => _vcf_get_query_string($postdata), 'timeout' => TIMEOUT)); } } ini_set('user_agent', USER_AGENT); $ctx = stream_context_create($params); $fp = fopen($url, 'rb', false, $ctx); if (!$fp) { return false; } list($unused, $response['code'], $unused) = explode(' ', $http_response_header[0], 3); $headers = array_slice($http_response_header, 1); foreach ($headers as $unused => $header) { $header = explode(':', $header); $header[0] = trim($header[0]); $header[1] = trim($header[1]); $headers[strtolower($header[0])] = strtolower($header[1]); } $response['data'] = stream_get_contents($fp); $response['headers'] = $headers; }