<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>api &#8211; Blog</title>
	<atom:link href="https://blog.sergiorios.com.ar/tag/api/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sergiorios.com.ar</link>
	<description>Investigación y Desarrollo, Tecnologías Web &#38; Cloud</description>
	<lastBuildDate>Mon, 23 Feb 2026 12:14:00 +0000</lastBuildDate>
	<language>es-AR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://blog.sergiorios.com.ar/wp-content/uploads/2024/10/cropped-favicon-32x32.png</url>
	<title>api &#8211; Blog</title>
	<link>https://blog.sergiorios.com.ar</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>🌐API personalizada en WHMCS</title>
		<link>https://blog.sergiorios.com.ar/trabajo/crear-api-personalizada-whmcs-automatizacion/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Fri, 18 Oct 2024 21:27:30 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[whmcs]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=80</guid>

					<description><![CDATA[Hoy quiero compartir una experiencia práctica que tuve desarrollando una API personalizada para WHMCS, orientada a resolver una necesidad muy específica: consultar si un cliente existe en el sistema a partir de datos como su ID, DNI o CUIT. Este proyecto surgió a raíz de un requerimiento de integración con una central telefónica, que necesitaba &#8230; <a href="https://blog.sergiorios.com.ar/trabajo/crear-api-personalizada-whmcs-automatizacion/" class="more-link">Continuá leyendo <span class="screen-reader-text">🌐API personalizada en WHMCS</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Hoy quiero compartir una experiencia práctica que tuve desarrollando una <strong>API personalizada para WHMCS</strong>, orientada a resolver una necesidad muy específica: <strong>consultar si un cliente existe en el sistema a partir de datos como su ID, DNI o CUIT</strong>.</p>



<p>Este proyecto surgió a raíz de un requerimiento de integración con una <strong>central telefónica</strong>, que necesitaba acceder a esta información en tiempo real para facilitar la identificación del cliente durante las llamadas entrantes.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> El problema: identificar clientes desde un sistema externo</h3>



<p>La necesidad era simple pero concreta: validar si un cliente está registrado en WHMCS y, de ser así, <strong>devolver algunos datos clave</strong>, como nombre, apellido y correo electrónico. Esta información debía estar disponible a través de una API que pudiera ser consumida desde un script externo ejecutado por la central telefónica.</p>



<p>El desafío fue diseñar una solución <strong>rápida, segura y sencilla de implementar</strong>, respetando el entorno de WHMCS y asegurando la correcta exposición de los datos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La solución: una API de consulta de clientes</h3>



<p>La respuesta fue desarrollar una <strong>API REST personalizada</strong> dentro de WHMCS, capaz de recibir uno de los siguientes parámetros:</p>



<ul class="wp-block-list">
<li><code>client_id</code></li>



<li><code>dni</code></li>



<li><code>cuit</code></li>
</ul>



<p>A partir de ese dato, la API realiza una búsqueda en el sistema y devuelve una respuesta en formato <strong>JSON</strong>. Un ejemplo de respuesta positiva sería:</p>



<pre class="wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-73942dca76e8aefb147b0aeb9cdcd798"><code>{<br>  "result": "success",<br>  "totalresults": 1,<br>  "clients": [<br>    {<br>      "client_id": 123,<br>      "firstname": "Sergio",<br>      "lastname": "Rios",<br>      "email": "sergio@example.com"<br>    }<br>  ]<br>}<br></code></pre>



<p>Si no se encuentra ningún cliente que coincida con los parámetros enviados, la respuesta devuelve un estado diferente, informando que no hay resultados.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Qué es una API y cómo se consume?</h3>



<p>Una <strong>API (Interfaz de Programación de Aplicaciones)</strong> permite que distintos sistemas se comuniquen entre sí de forma estructurada. En este caso, nuestra API actúa como un puente entre WHMCS y cualquier sistema externo que necesite acceder a los datos de clientes.</p>



<p>Para consumir esta API podés usar herramientas como <strong>Postman</strong> o <strong>Insomnia</strong>, ideales para testear y visualizar respuestas HTTP. Los pasos básicos para probarla son:</p>



<ol class="wp-block-list">
<li><strong>Crear una solicitud</strong> del tipo GET o POST (según cómo se haya implementado).</li>



<li><strong>Ingresar la URL del endpoint</strong> de la API.</li>



<li><strong>Agregar los parámetros de búsqueda</strong>, como el DNI, CUIT o ID.</li>



<li><strong>Autenticarse</strong>, si la API lo requiere (por ejemplo, mediante tokens o headers personalizados).</li>



<li><strong>Enviar la solicitud</strong> y observar la respuesta en formato JSON.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Documentación</h3>



<p>Toda la API fue documentada: se detallan los parámetros requeridos, los métodos disponibles, ejemplos de uso y consideraciones de autenticación. Si te interesa consultarla, podés encontrarla en mi repositorio de GitHub:</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://github.com/sergiorioscomar/getclientiddnicuit">Mi cuenta en GitHub</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusiones</h3>



<p>Desarrollar esta API fue una gran oportunidad para afianzar conceptos como:</p>



<ul class="wp-block-list">
<li>La estructura y seguridad en el diseño de APIs.</li>



<li>Cómo integrar WHMCS con sistemas externos.</li>



<li>La importancia de la documentación técnica clara para facilitar el uso de tus desarrollos.</li>
</ul>



<p>Aunque se trató de una funcionalidad puntual, este tipo de soluciones muestran cómo pequeñas integraciones pueden mejorar significativamente los procesos en entornos reales.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>📝Integración API WordPress para mostrar posts</title>
		<link>https://blog.sergiorios.com.ar/trabajo/consumir-api-wordpress-php-mostrar-posts/</link>
		
		<dc:creator><![CDATA[sergio]]></dc:creator>
		<pubDate>Wed, 07 Feb 2024 22:57:25 +0000</pubDate>
				<category><![CDATA[Experiencia]]></category>
		<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://blog.sergiorios.com.ar/?p=55</guid>

					<description><![CDATA[En esta publicación, quiero compartir una funcionalidad que recientemente me tocó agregar en el sitio web a una empresa, y que también he implementado en mi propia web. La idea es integrar la API de WordPress en tu sitio web o portafolio para mostrar las últimas publicaciones de tu blog. Es una funcionalidad interesante que &#8230; <a href="https://blog.sergiorios.com.ar/trabajo/consumir-api-wordpress-php-mostrar-posts/" class="more-link">Continuá leyendo <span class="screen-reader-text">📝Integración API WordPress para mostrar posts</span></a>]]></description>
										<content:encoded><![CDATA[
<p>En esta publicación, quiero compartir una funcionalidad que recientemente me tocó agregar en el sitio web a una empresa, y que también he implementado en mi propia web. La idea es integrar la API de WordPress en tu sitio web o portafolio para mostrar las últimas publicaciones de tu blog. Es una funcionalidad interesante que puede añadir valor a tu perfil profesional al mantenerlo actualizado con tu contenido más reciente.</p>



<p>Voy a explicar cómo lo hice utilizando Laravel, un framework de PHP que facilita mucho el desarrollo web. A continuación, les muestro el código que usé para obtener las publicaciones de un blog de WordPress y mostrarlas en la web.</p>



<h4 class="wp-block-heading">Paso 1: Obtener las Publicaciones del Blog</h4>



<p>Primero, creamos una función en Laravel para obtener las publicaciones. La API de WordPress ofrece un endpoint para obtener los posts, que es: <code>https://[URL DE TU BLOG]/wp-json/wp/v2/posts</code>. Vamos a solicitar las últimas 3 publicaciones, pero este número puede ajustarse según tus necesidades.</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-0828fdf7b77e7587caeb95015fa66083"><code>public function getBlogPosts()
{
    // URL para obtener las publicaciones
    $url = 'https://&#91;URL DE TU BLOG]/wp-json/wp/v2/posts?per_page=3';

    // Hacer la solicitud cURL para obtener las publicaciones
    $posts = $this->makeCurlRequest($url);

    // Si hubo un error en la solicitud
    if (!$posts) {
        return view('index', &#91;'publicaciones' => &#91;]]);
    }

    // Arreglo donde guardaremos las publicaciones con las imágenes
    $postsWithImages = &#91;];

    // Recorrer las publicaciones para obtener la imagen destacada
    foreach ($posts as $post) {
        $featuredMediaId = $post&#91;'featured_media'];

        // Si la publicación tiene imagen destacada, hacer otra solicitud para obtener los detalles de la imagen
        if ($featuredMediaId) {
            $mediaUrl = "https://&#91;URL DE TU BLOG]/wp-json/wp/v2/media/$featuredMediaId";
            $mediaDetails = $this->makeCurlRequest($mediaUrl);

            if ($mediaDetails &amp;&amp; isset($mediaDetails&#91;'media_details']&#91;'sizes']&#91;'full']&#91;'source_url'])) {
                $post&#91;'featured_image_url'] = $mediaDetails&#91;'media_details']&#91;'sizes']&#91;'full']&#91;'source_url'];
            } else {
                $post&#91;'featured_image_url'] = null;
            }
        } else {
            $post&#91;'featured_image_url'] = null;
        }

        // Agregar la publicación con su imagen al arreglo
        $postsWithImages&#91;] = $post;
    }

    // Pasar las publicaciones con las imágenes a la vista
    return view('index', &#91;
        'publicaciones' => $postsWithImages,
    ]);
}
</code></pre>



<h4 class="wp-block-heading">Paso 2: Configurar la Función <code>makeCurlRequest</code></h4>



<p>Para realizar las solicitudes a la API de WordPress, utilizamos una función llamada <code>makeCurlRequest</code>, que se encarga de hacer la solicitud cURL y devolver los datos obtenidos. Asegúrate de tenerla implementada en tu código:</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-d118943ed5e2b37ee3c619c9c5421869"><code>private function makeCurlRequest($url)
    {
        // Inicializar cURL
        $ch = curl_init();

        // Configurar opciones de cURL
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  

        // Ejecutar la solicitud
        $response = curl_exec($ch);

        // Manejar errores de cURL
        if (curl_errno($ch)) {
            curl_close($ch);
            return false;
        }

        // Cerrar cURL
        curl_close($ch);

        // Decodificar la respuesta JSON
        return json_decode($response, true);
    }
</code></pre>



<h4 class="wp-block-heading">Paso 3: Actualizar la Vista para Mostrar las Publicaciones</h4>



<p>Finalmente, debes actualizar la vista para mostrar las publicaciones con los títulos, extractos y, si es posible, las imágenes destacadas. El siguiente código es un ejemplo básico de cómo hacerlo en Blade, la plantilla de Laravel:</p>



<pre class="wp-block-code has-white-color has-dark-gray-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-72d267687ef49abf36bff3483505de05"><code>&lt;!-- blog dinamico wp --&gt;
        &lt;div class="container py-5"&gt;
            &lt;h1 class="text-center mb-4"&gt;Últimas Publicaciones de Mi Blog&lt;/h1&gt;

            @if(isset($publicaciones) &amp;&amp; count($publicaciones) &gt; 0)
                &lt;div class="row"&gt;
                    @foreach($publicaciones as $publicacion)
                        &lt;div class="col-md-4 mb-4"&gt;
                            &lt;div class="card shadow-sm h-100"&gt;
                                &lt;a href="#" target="_blank"&gt;
                                    @if (isset($publicacion&#91;'featured_image_url']))
                                        &lt;img src="{{ $publicacion&#91;'featured_image_url'] }}"
                                            class="card-img-top img-fluid"
                                            alt="Imagen destacada del post"
                                            style="max-height: 200px; object-fit: cover;"&gt;
                                    @else
                                        &lt;img src="/ruta/a/imagen/por_defecto.jpg"
                                            class="card-img-top img-fluid"
                                            alt="Imagen por defecto"
                                            style="max-height: 200px; object-fit: cover;"&gt;
                                    @endif
                                &lt;/a&gt;
                                &lt;div class="card-body"&gt;
                                    &lt;h5 class="card-title"&gt;
                                        &lt;a href="{{ $publicacion&#91;'link'] }}" target="_blank" class="text-dark text-decoration-none"&gt;{{ $publicacion&#91;'title']&#91;'rendered'] }}&lt;/a&gt;
                                    &lt;/h5&gt;
                                    &lt;p class="card-text"&gt;{{ Str::limit(strip_tags($publicacion&#91;'excerpt']&#91;'rendered']), 150) }}&lt;/p&gt;
                                &lt;/div&gt;
                                &lt;div class="card-footer bg-transparent text-end"&gt;
                                    &lt;a href="{{ $publicacion&#91;'link'] }}" class="btn btn-primary btn-sm" target="_blank"&gt;Leer más&lt;/a&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    @endforeach

                &lt;/div&gt;
            @else
                &lt;p class="text-center"&gt;No se encontraron publicaciones.&lt;/p&gt;
            @endif
        &lt;/div&gt;
        &lt;/section&gt;
</code></pre>



<h4 class="wp-block-heading">Consideraciones Adicionales</h4>



<ul class="wp-block-list">
<li><strong>Reemplaza <code>[URL DE TU BLOG]</code> por la URL real de tu blog.</strong></li>



<li>Si las publicaciones no tienen imágenes destacadas, la propiedad <code>featured_media</code> será <code>0</code>. Puedes manejar este caso mostrando una imagen predeterminada o simplemente omitiendo la imagen.</li>



<li>Puedes personalizar la cantidad de publicaciones a mostrar cambiando el parámetro <code>per_page</code> en la URL.</li>
</ul>



<p>Espero que esta guía te sea de utilidad si alguna vez necesitas integrar publicaciones de un blog de WordPress en tu sitio web. ¡No dudes en experimentar con la API de WordPress y adaptarla a tus necesidades!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
