Esta es la función que yo uso para hacer llamadas a las diferentes API’s que utilizo.
function callAPI($method, $api, $data = '', $headers = array(),$debug = false) {
$status = array('error' => false, 'status' => array('code' => '','message' => ''),'data' => '');
try {
$curl = curl_init($api);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); // Necesario para HTTPS
if($debug){
$out = fopen('php://temp', 'w+');
// Activar el debug verbose
curl_setopt($curl,CURLOPT_VERBOSE, true);
curl_setopt($curl,CURLOPT_NOPROGRESS, true);
curl_setopt($curl,CURLOPT_STDERR, $out);
}
// Comprobar los metodos aceptados
if(in_array($method,array('GET','POST','PUT','DELETE'))){
curl_setopt($curl,CURLOPT_CUSTOMREQUEST, $method);
}else{
throw new Exception("Method not allowed", 1);
}
// Si hay datos los añadimos
if(!empty($data))
curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($data));
// Cabecera si la hay, por defecto indicamos que todo es en JSON
$h = array('Content-Type: application/json');
if(!empty($headers)){
foreach ($headers as $key => $value) {
$h[] = $key.': '.$value;
}
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $h);
$response = curl_exec($curl);
/* Comprobar el codigo HTTP de respuesta */
$httpCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
switch ($httpCode) {
case 200:
$status['status']['code'] = 200;
$status['status']['message'] = '200: Success';
$status['data'] = isJSON($response) ? json_decode($response,true) : $response;
break;
case 400:
$status['error'] = true;
$status['status']['code'] = 400;
$status['status']['message'] = '400: Bad Request.';
case 404:
$status['error'] = true;
$status['status']['code'] = 404;
$status['status']['message'] = '404: API Not found.';
break;
case 503:
$status['error'] = true;
$status['status']['code'] = 503;
$status['status']['message'] = '503: Service unavailable.';
break;
default:
$status['error'] = true;
$status['status']['code'] = $httpCode;
$status['status']['message'] = 'Undocumented error: '.$httpCode. ' : ' . curl_error($curl);
break;
}
if($debug){
rewind($out);
$status['verbose'] = str_replace('"',"'", stream_get_contents($out));
fclose($out);
# to display the data in the console you need to make it Javascript friendly.
# This pattern & replacement will replace newline characters to make it suitable for javascript multiline display.
$pttn='@(\r\n|\n)@i';
$repl='"+\'\n\'+"';
printf('<script>console.info("Status code:%s\n\nVerbose output:\n%s")</script>', $httpCode, preg_replace(
$pttn,
$repl,
$status['verbose']
));
}
curl_close($curl);
return $status;
} catch (\Exception $e) {
$status['error'] = true;
$status['status'] = $e->getMessage();
return $status;
}
}
$return = callAPI('POST', $url.'accounts/sign_in?login_name='.$X_Login_Name.'&password='.$pass);
$headers = array('X-Login-Name' => $X_Login_Name,'X-Auth-Token' => $X_Auth_Token);
$params = '?per_page=200';
$return = callAPI('GET', $url.$organization.'/vehicles'.$params,'',$headers,true);