public function call(Http\Request &$request, Http\Response &$response)
 {
     $curl = curl_init();
     $headers = array();
     foreach ($request->getHeaders() as $header => $value) {
         $headers[] = "{$header}: {$value}";
     }
     $url = '';
     $url .= $request->getBaseUrl();
     $url .= $request->getPath();
     if ($request->getParams()) {
         $url .= '?' . http_build_query($request->getParams());
     }
     curl_setopt($curl, CURLOPT_URL, $url);
     curl_setopt($curl, CURLOPT_TIMEOUT, 100);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getMethod());
     curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getBody());
     curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
     $body = curl_exec($curl);
     /*var_dump($url);
       var_dump($request);
       var_dump($headers);
       var_dump($body);
       var_dump(curl_getinfo($curl));*/
     if ($body === false) {
         throw new \Exception(curl_error($curl));
     }
     $info = curl_getinfo($curl);
     $response->setHeader('Content-Type', $info['content_type']);
     $response->setStatus($info['http_code']);
     $response->setBody($body);
     curl_close($curl);
 }
 public function filterResponse(Response &$response)
 {
     $status = $response->getStatus();
     if ($status >= 400) {
         $body = $response->getBody();
         $errors = "";
         $exception = "[{$status}]";
         if (property_exists($body, 'message')) {
             $exception .= " - {$body->message}";
         }
         if (property_exists($body, 'errors')) {
             foreach ($body->errors as $category => $collection) {
                 $errors .= "{$category}: " . implode(", ", $collection);
             }
         }
         if ($errors) {
             $exception .= " - {$errors}";
         }
         throw new Exception($exception);
     }
 }
 public function filterResponse(Http\Response &$response)
 {
     if (stristr($response->getHeader('Content-Type'), 'application/json') !== false) {
         $response->setBody(json_decode($response->getBody()));
     }
 }