Question:
Date: 10-06-2020 06:01:59
(In Spanish)
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
Ahora os dejo el código desde donde realizo la llamada al API de fotocasa y siempre me da error 401 No autorizado
Espero que alguien me pueda ayudar y decirme done estoy haciendo algo mal porque yo ya no encuentro salida. Votes: -1 - Answers: 3 - Views: 11 Share on: Google Facebook Twitter LinkedIn Link
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. Votes: -1 - Answers: 3 - Views: 11 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 -
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
