{"id":29416,"date":"2021-06-15T16:01:00","date_gmt":"2021-06-15T13:01:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29416"},"modified":"2021-10-17T16:16:58","modified_gmt":"2021-10-17T13:16:58","slug":"como-usar-contrasenas-de-aplicaciones-en-wordpress-para-la-autenticacion-de-api-rest","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-usar-contrasenas-de-aplicaciones-en-wordpress-para-la-autenticacion-de-api-rest\/","title":{"rendered":"C\u00f3mo usar contrase\u00f1as de aplicaciones en WordPress para la autenticaci\u00f3n de API REST"},"content":{"rendered":"<p>Como desarrollador de WordPress, debe conocer la API REST en WordPress. WordPress proporciona una interfaz (API REST) \u200b\u200bpara interactuar con WordPress desde su aplicaci\u00f3n. Estas aplicaciones pueden ser cualquier cosa en la interfaz como React, Angular, otras aplicaciones PHP.<\/p>\n<p>La interacci\u00f3n entre su aplicaci\u00f3n y WordPress se comunica a trav\u00e9s de solicitudes HTTP. Debe enviar una solicitud HTTP al punto final de WordPress. Y para proteger sus aplicaciones, todas estas solicitudes deben provenir de recursos v\u00e1lidos. Nadie deber\u00eda llamar p\u00fablicamente al punto final de WordPress. Para proteger la llamada a la API, WordPress acepta un <strong>token \u00fanico<\/strong> en el encabezado de autorizaci\u00f3n. WordPress valida este token y procesa la solicitud en consecuencia.<\/p>\n<p>WordPress 5.6 introdujo una nueva funci\u00f3n &#8216;Contrase\u00f1as de aplicaciones&#8217;. B\u00e1sicamente, le permite crear un token desde el panel de WordPress que luego se puede usar en el encabezado de autorizaci\u00f3n.<\/p>\n<p>En este art\u00edculo, estudiamos c\u00f3mo usar contrase\u00f1as de aplicaciones con la API REST de WordPress. Escribiremos el c\u00f3digo de ejemplo para la API REST en cURL, Guzzle y jQuery.<\/p>\n<h3>Generar contrase\u00f1as de aplicaciones en WordPress<\/h3>\n<p>WordPress 5.6 agrega de forma predeterminada la secci\u00f3n &#8216;Contrase\u00f1a de la aplicaci\u00f3n&#8217; en la p\u00e1gina <strong>Usuarios-&gt; Perfil<\/strong>. Esta funci\u00f3n est\u00e1 disponible para todos los sitios servidos a trav\u00e9s de SSL \/ HTTPS. Si su sitio no est\u00e1 en HTTPS, puede habilitar esta funci\u00f3n utilizando el filtro a continuaci\u00f3n.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Dir\u00edgete a la p\u00e1gina <strong>Usuarios-&gt; Perfil<\/strong> y genera la contrase\u00f1a proporcionando un Nombre de la aplicaci\u00f3n. WordPress luego produce una contrase\u00f1a que puede usar en su aplicaci\u00f3n frontend para solicitudes HTTP. Aunque WordPress le da una contrase\u00f1a con espacios, puede usar esta contrase\u00f1a con o sin espacios. WordPress elimina los espacios al final.<\/p>\n<p>Obtuviste la contrase\u00f1a de tu aplicaci\u00f3n. Ahora, debe generar un token v\u00e1lido para el encabezado de autorizaci\u00f3n. Un token v\u00e1lido es una combinaci\u00f3n del nombre de usuario de su sitio de WordPress y la contrase\u00f1a de la aplicaci\u00f3n en formato codificado en base64. El usuario puede generarlo f\u00e1cilmente de la siguiente manera.<\/p>\n<pre><code>&lt;?php\n$username = 'admin'; \/\/ site username\n$application_password = 'Ho9c 9vGs AOBG nXb0 FPpr W5vO';\n\u00a0\u00a0\necho base64_encode($username.':'.$application_password);<\/code><\/pre>\n<p>En el c\u00f3digo anterior, pas\u00e9 el nombre de usuario &#8216;admin&#8217; y mi propia contrase\u00f1a de aplicaci\u00f3n. Ajuste estos valores seg\u00fan sus credenciales. Finalmente, obtendr\u00e1 la versi\u00f3n codificada en base64 de un token v\u00e1lido. Ahora, veamos c\u00f3mo llamar a la API REST de WordPress usando este token.<\/p>\n<h3>Llamar a la API REST de WordPress<\/h3>\n<p>WordPress ofrece varios puntos finales que recibir\u00e1n solicitudes de API de su aplicaci\u00f3n. Revise la lista de <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">puntos finales disponibles en WordPress<\/a>. Adem\u00e1s de estos puntos finales disponibles, tambi\u00e9n puede <a href=\"https:\/\/themewp.inform.click\/es\/como-agregar-puntos-finales-personalizados-a-la-api-de-wordpress\/\" title=\"agregar sus propios puntos finales personalizados en WordPress\">agregar sus propios puntos finales personalizados en WordPress<\/a>.<\/p>\n<p>Por el bien del tutorial, tomo un ejemplo del punto final de Publicaciones para crear una publicaci\u00f3n. Para crear una publicaci\u00f3n en WordPress, debe enviar solicitudes POST con par\u00e1metros en este punto final <code>SITE_URL\/wp-json\/wp\/v2\/posts<\/code>.<\/p>\n<p>Ahora, veamos c\u00f3mo llamar a este punto final usando cURL, Guzzle y jQuery. Sobre la base de su solicitud, puede tomar una referencia de cualquiera de las opciones siguientes.<\/p>\n<h4>API REST de WordPress usando PHP cURL<\/h4>\n<p>Puede crear su aplicaci\u00f3n en PHP. El usuario puede interactuar con WordPress desde su aplicaci\u00f3n PHP usando cURL y Guzzle. En el caso de cURL, aseg\u00farese de que la extensi\u00f3n cURL est\u00e9 habilitada en su servidor. Despu\u00e9s de esto, puede usar el siguiente c\u00f3digo que crear\u00e1 la publicaci\u00f3n en WordPress.<\/p>\n<pre><code>&lt;?php\n$username = 'admin';\n$application_password = 'MGOw EG9V 04xo sUZ0 60wo J2OG';\n\u00a0\n$url = 'SITE_URL\/wp-json\/wp\/v2\/posts';\n\u00a0\u00a0\n$json = json_encode([\n\u00a0\u00a0\u00a0\u00a0'title' =&gt; 'Post using REST API',\n\u00a0\u00a0\u00a0\u00a0'content' =&gt; 'Post content using REST API',\n\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'publish',\n]);\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$ch = curl_init($url);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$application_password);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application\/json']);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_TIMEOUT, 10);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_POST, 1);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n\u00a0\u00a0\u00a0\u00a0curl_setopt($ch, CURLOPT_POSTFIELDS, $json);\n\u00a0\u00a0\u00a0\u00a0$result = curl_exec($ch);\n\u00a0\u00a0\u00a0\u00a0$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n\u00a0\u00a0\u00a0\u00a0curl_close($ch);\n\u00a0\u00a0\u00a0\u00a0print_r(json_decode($result));\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<p>Aseg\u00farese de reemplazar los valores de nombre de usuario, contrase\u00f1a de la aplicaci\u00f3n y SITE_URL con sus valores reales. Ejecute este c\u00f3digo y su publicaci\u00f3n se crear\u00e1 en el panel de WordPress.<\/p>\n<h4>API REST de WordPress usando Guzzle en PHP<\/h4>\n<p><a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> es una alternativa a cURL. Es un cliente HTTP de PHP que facilita el env\u00edo de solicitudes HTTP y simplifica la integraci\u00f3n con las API REST. Instale la biblioteca Guzzle usando el comando:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>A continuaci\u00f3n, su c\u00f3digo para crear una publicaci\u00f3n utilizando la API REST de WordPress y Guzzle ser\u00e1 el siguiente.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$username = 'admin';\n$application_password = 'MGOw EG9V 04xo sUZ0 60wo J2OG';\n\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'SITE_URL',\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/wp-json\/wp\/v2\/posts', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'json' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title' =&gt; 'Post using REST API',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'content' =&gt; 'Post content using REST API',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"headers\" =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Basic \". base64_encode($username.':'.$application_password)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$body = $response-&gt;getBody();\n\u00a0\u00a0\u00a0\u00a0$arr_body = json_decode($body);\n\u00a0\u00a0\u00a0\u00a0print_r($arr_body);\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<p>Aqu\u00ed, estoy usando la <code>base64_encode()<\/code>funci\u00f3n de PHP para codificar la cadena. En el caso de cURL, no necesitamos hacerlo expl\u00edcitamente. El cURL codifica la cadena por s\u00ed solo.<\/p>\n<h4>API REST de WordPress usando jQuery<\/h4>\n<p>Cuando se trata de jQuery, normalmente hacemos una llamada a la API cuando se activa un evento espec\u00edfico. Este evento puede ser cualquier cosa como hacer clic, cambiar, cargar, etc. No estoy escribiendo sobre ning\u00fan evento. En su lugar, escribo el c\u00f3digo directamente que puede envolver dentro de sus eventos.<\/p>\n<pre><code>&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.5.1\/jquery.min.js\" integrity=\"sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx\/qtq\/1itJ0C2ejDxltZVFg==\" crossorigin=\"anonymous\"&gt;&lt;\/script&gt;\n&lt;script&gt;\njQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0var username = 'admin';\n\u00a0\u00a0\u00a0\u00a0var application_password = 'MGOw EG9V 04xo sUZ0 60wo J2OG';\n\u00a0\u00a0\u00a0\u00a0$.ajax({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0url: 'SITE_URL\/wp-json\/wp\/v2\/posts',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0beforeSend: function(xhr) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0token = btoa(username + ':' + application_password)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xhr.setRequestHeader('Authorization', 'Basic ' + token);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title': 'Post using REST API',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'content': 'Post content using REST API',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status': 'publish'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0success:function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0});\n});\n&lt;\/script&gt;<\/code><\/pre>\n<p>En el c\u00f3digo anterior, estoy usando el m\u00e9todo <code>btoa<\/code>. El <code>btoa()<\/code>m\u00e9todo codifica una cadena en base 64. Tambi\u00e9n puede ver la respuesta de la API en la consola de su navegador.<\/p>\n<p>Espero que pueda aprender a usar contrase\u00f1as de aplicaciones en WordPress con su aplicaci\u00f3n. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-agregar-puntos-finales-personalizados-a-la-api-de-wordpress\/\" title=\"C\u00f3mo agregar puntos finales personalizados a la API de WordPress\">C\u00f3mo agregar puntos finales personalizados a la API de WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-utilizar-guzzle-un-cliente-http-php-para-enviar-solicitudes-http\/\" title=\"C\u00f3mo utilizar Guzzle: un cliente HTTP PHP para enviar solicitudes HTTP\">C\u00f3mo utilizar Guzzle: un cliente HTTP PHP para enviar solicitudes HTTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/iniciar-sesion-con-numero-de-telefono-en-wordpress\/\" title=\"Iniciar sesi\u00f3n con n\u00famero de tel\u00e9fono en WordPress\">Iniciar sesi\u00f3n con n\u00famero de tel\u00e9fono en WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo, estudiamos c\u00f3mo usar contrase\u00f1as de aplicaciones en WordPress para la autenticaci\u00f3n de API REST. Necesita usar la contrase\u00f1a de la aplicaci\u00f3n<\/p>\n","protected":false},"author":1,"featured_media":20206,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[495,606],"tags":[849],"class_list":["post-29416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","category-uncategorized-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29416"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29416\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/20206"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}