New question

Question:

 
  0  
 
Date: 10-06-2020 06:01:59 (In Spanish)

Conexión con API de Fotocasa.com[Resolved]

Hola amig@s,

estoy intentando conectarme con el API de fotocasa y siempre me deniega el acceso.

Como ya no tengo claro si es mi código o no, y con la esperanza de que haya alguien con más conocimientos en API que yo, voy a dejar mi código.

Primero el código de mi classe PHP

class Rest {

	//Propiedades
	public $url;
	public $method;
	public $codigo_estado;
	public $estado;
	public $info;
	public $headers = array();
	public $body;
	public $cache_control 	= 'no-cache';
	public $contentType 	= 'application/json';
	public $datosPeticion 	= array();
	
	public $ch;
	
	private $api_key;
	
	/*
	* constructor
	* setea partes necesarias para la solicitud
	*/
	public function __construct($apiKey = NULL){
		if(!is_null($apiKey)){
			$this->setApiKey($apiKey);
		}
	}
	
	/*
	* curlInit
	* establece parámetros de solicitud y devueve manejador
	*/
	public function curlInit(){
		$this->ch = curl_init();
		curl_setopt($this->ch, CURLOPT_URL, $this->url);
		curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($this->ch, CURLOPT_MAXREDIRS, 10); 
		curl_setopt($this->ch, CURLOPT_TIMEOUT, 30);
		curl_setopt($this->ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
	}
	
	/*
	* curlSetOpts
	* setea opciones a curl
	*/
	public function curlSetOpts($option, $valor){
		curl_setopt($this->ch, $option, $valor);	
	}
	
	/*
	* curlInfo
	* devuelve array con la info de la transferencia
	*/
	public function curlInfo(){
		$this->info = curl_getinfo($this->ch);	
		//return curl_getinfo($this->ch);
	}
	
	/*
	* curlExec
	* ejecuta la consulta curl y devuelve datos
	* y cierra
	* @return $this
	*/
	public function curlExec(){
		$this->datosPeticion = curl_exec($this->ch);
		$this->codigo_estado = curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
		$this->estado = $this->getEstado();
		$this->curlInfo();
		curl_close($this->ch);  
	}
	
	/*
	* setApiKey
	* Setea el apikey
	*/
	private function setApiKey($apiKey) {  
		$this->api_key = trim($apiKey);	
	}   
	
	/*
	* getEstado
	* obtiene el estado del código pasado
	* @return estado
	*/
	private function getEstado(){
		$estado = array(  
			200 => 'OK',  
			201 => 'Created',  
			202 => 'Accepted',  
			204 => 'No Content',  
			301 => 'Moved Permanently',  
			302 => 'Found',  
			303 => 'See Other',  
			304 => 'Not Modified',  
			400 => 'Bad Request',  
			401 => 'Unauthorized',  
			403 => 'Forbidden',  
			404 => 'Not Found',  
			405 => 'Method Not Allowed',  
			500 => 'Internal Server Error');  
     	$respuesta = ($estado[$this->codigo_estado]) ? $estado[$this->codigo_estado] : $estado[500];  
     	return $respuesta;  
   }  
	
	
}


Ahora os dejo el código desde donde realizo la llamada al API de fotocasa y siempre me da error 401 No autorizado

$cabeceras = array(
	'Cache-Control' 		=> 'no-cache',
    'Inmofactory-Api-Key' 	=> $api_key_fotocasa,
    'Content-Type' 			=> 'application/json'
);


$objRest = new Rest($api_key_fotocasa);
$objRest->url = 'https://api.inmofactory.com/api/property';

$objRest->curlInit();

$objRest->curlSetOpts(CURLOPT_HTTPHEADER, $cabeceras);
$objRest->curlSetOpts(CURLOPT_HTTPGET, true);
$objRest->curlSetOpts(CURLOPT_NOBODY, true);

$objRest->curlExec();

$resSolicitud = json_decode($objRest->datosPeticion, true);	

if($objRest->codigo_estado != 200){
	echo $resSolicitud['Message'].' || Código: '.$objRest->codigo_estado.'->'.$objRest->estado; 
	echo '<br><br><br>';
	echo json_encode($body);
	exit;
}else{
	echo 1;
	exit;
}




Espero que alguien me pueda ayudar y decirme done estoy haciendo algo mal porque yo ya no encuentro salida.
Tags: API - cURL - PHP - Question Votes: 0 - Answers: 3 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 24-06-2020 13:20:13 El código parece correcto, lo he usado para hacer una petición a la API de prueba JSONPlaceholder (https://jsonplaceholder.typicode.com) y obtuve una respuesta válida.

    Se me ocurren un par de cosas:
    - Error en la api key, quizás es inválida o no ha sido habilitada y por eso no puedes autenticarte.
    - Estás corriendo el código en tu máquina local y quizás la API no acepta peticiones que no provengan de un servidor en línea (lo digo por experiencia! XD).
      Votes: 1 - Link answer
     
  •  
      0  
     
    Date: 24-06-2020 21:40:33 Hola Cristian, muchas gracias por tu comentario.

    Al final lo solucioné con la ayuda de una persona pero no a través del Foro.

    El problema era una tontería pero que yo jamás me hubiera dado cuenta.

    Al pasar el array llamado cabeceras las paso como array, y por lo visto hay que pasarlo como string, tan solo eso era el problema.

    Igualmente garcias por tomarte tu tiempo en probarlo.
      Votes: 0 - Link answer
     
  • Date: 25-06-2020 11:39:46 Aaah sí sí sí... Es cierto, se me pasó eso. El tipo de dato en el segundo parámetro de curl_setopt() depende de lo que se pase en el primer parámetro. Un pequeño gran detalle xD
    Espero todo esté funcionando sin problemas entonces!
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In