public function request($meth, $url, $params = null)
 {
     $params = self::encode($params);
     $headers = $this->setHeaders();
     $curl = curl_init();
     $meth = strtolower($meth);
     $opts = array();
     $query = "";
     if (count($params) > 0) {
         $query = '?' . $params;
     }
     switch ($meth) {
         case 'get':
             $opts[CURLOPT_HTTPGET] = 1;
             $url = $url . $query;
             break;
         case 'post':
             $opts[CURLOPT_POST] = 1;
             $opts[CURLOPT_POSTFIELDS] = $params;
             break;
         case 'put':
             $opts[CURLOPT_RETURNTRANSFER] = 1;
             $opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
             $opts[CURLOPT_POSTFIELDS] = $params;
             break;
         case 'delete':
             $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
             $url = $url . $query;
             break;
         default:
             throw new Exception('Wrong method');
     }
     $url = $this->apiUrl($url);
     $opts[CURLOPT_URL] = $url;
     $opts[CURLOPT_RETURNTRANSFER] = true;
     $opts[CURLOPT_CONNECTTIMEOUT] = 30;
     $opts[CURLOPT_TIMEOUT] = 80;
     $opts[CURLOPT_RETURNTRANSFER] = true;
     $opts[CURLOPT_HTTPHEADER] = $headers;
     $opts[CURLOPT_CAINFO] = dirname(__FILE__) . '/../ssl_data/ca_bundle.crt';
     curl_setopt_array($curl, $opts);
     $response = curl_exec($curl);
     $response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
     curl_close($curl);
     if ($response_code != 200) {
         Conekta_Error::errorHandler($response, $response_code);
     }
     return json_decode($response, true);
 }
 public function __construct($message, $param, $http_status = null, $http_body = null, $json_body = null)
 {
     parent::__construct($message, $http_status, $http_body, $json_body);
     $this->param = $param;
 }