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