{"id":28625,"date":"2021-06-15T15:36:00","date_gmt":"2021-06-15T12:36:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28625"},"modified":"2021-10-18T03:59:32","modified_gmt":"2021-10-18T00:59:32","slug":"como-usar-senhas-de-aplicativos-no-wordpress-para-autenticacao-da-api-rest","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-usar-senhas-de-aplicativos-no-wordpress-para-autenticacao-da-api-rest\/","title":{"rendered":"Como usar senhas de aplicativos no WordPress para autentica\u00e7\u00e3o da API REST"},"content":{"rendered":"<p>Como desenvolvedor WordPress, voc\u00ea deve estar ciente da API REST no WordPress. O WordPress fornece uma interface (API REST) \u200b\u200bpara interagir com o WordPress a partir do seu aplicativo. Esses aplicativos podem ser qualquer coisa no front-end, como React, Angular e outros aplicativos PHP.<\/p>\n<p>A intera\u00e7\u00e3o entre seu aplicativo e o WordPress se comunica por meio de solicita\u00e7\u00f5es HTTP. Voc\u00ea deve enviar uma solicita\u00e7\u00e3o HTTP para o endpoint do WordPress. E para proteger seus aplicativos, todas essas solicita\u00e7\u00f5es devem vir de recursos v\u00e1lidos. Ningu\u00e9m deve ligar publicamente para o endpoint do WordPress. Para proteger a chamada API, o WordPress aceita um <strong>token \u00fanico<\/strong> no cabe\u00e7alho de autoriza\u00e7\u00e3o. O WordPress valida esse token e processa a solicita\u00e7\u00e3o de acordo.<\/p>\n<p>O WordPress 5.6 introduziu um novo recurso &#8216;Senhas de aplicativos&#8217;. Basicamente, ele permite que voc\u00ea crie um token a partir do painel do WordPress que pode ser usado no cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/p>\n<p>Neste artigo, estudamos como usar senhas de aplicativos com a API REST do WordPress. Vamos escrever o c\u00f3digo de exemplo para a API REST em cURL, Guzzle e jQuery.<\/p>\n<h3>Gerar senhas de aplicativos no WordPress<\/h3>\n<p>O WordPress 5.6 por padr\u00e3o adiciona a se\u00e7\u00e3o &#8216;Senha do aplicativo&#8217; na p\u00e1gina <strong>Usu\u00e1rios-&gt; Perfil<\/strong>. Este recurso est\u00e1 dispon\u00edvel para todos os sites servidos por SSL \/ HTTPS. Se o seu site n\u00e3o estiver em HTTPS, voc\u00ea pode habilitar esse recurso usando o filtro abaixo.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>V\u00e1 para a p\u00e1gina <strong>Usu\u00e1rios-&gt; Perfil<\/strong> e gere a senha fornecendo um Nome de Aplicativo. Em seguida, o WordPress produz uma senha que voc\u00ea pode usar em seu aplicativo de front-end para solicita\u00e7\u00f5es HTTP. Embora o WordPress forne\u00e7a uma senha com espa\u00e7os, voc\u00ea pode usar essa senha com ou sem espa\u00e7os. O WordPress remove os espa\u00e7os em seu final.<\/p>\n<p>Voc\u00ea conseguiu a senha do seu aplicativo. Agora, voc\u00ea deve gerar um token v\u00e1lido para o cabe\u00e7alho de autoriza\u00e7\u00e3o. Um token v\u00e1lido \u00e9 uma combina\u00e7\u00e3o de seu nome de usu\u00e1rio do site WordPress e senha do aplicativo no formato codificado em base64. O usu\u00e1rio pode ger\u00e1-lo facilmente da seguinte maneira.<\/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>No c\u00f3digo acima, passei o nome de usu\u00e1rio &#8216;admin&#8217; e minha pr\u00f3pria senha de aplicativo. Ajuste esses valores de acordo com suas credenciais. Finalmente, voc\u00ea obter\u00e1 a vers\u00e3o codificada em base64 de um token v\u00e1lido. Agora, vamos ver como chamar a API REST do WordPress usando este token.<\/p>\n<h3>Chamando a API REST do WordPress<\/h3>\n<p>O WordPress fornece v\u00e1rios terminais que receber\u00e3o solicita\u00e7\u00f5es de API de seu aplicativo. V\u00e1 at\u00e9 a lista de <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">endpoints dispon\u00edveis no WordPress<\/a>. Al\u00e9m desses endpoints dispon\u00edveis, voc\u00ea tamb\u00e9m pode <a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-adicionar-endpoints-personalizados-a-api-wordpress\/\" title=\"adicionar seus pr\u00f3prios endpoints personalizados no WordPress\">adicionar seus pr\u00f3prios endpoints personalizados no WordPress<\/a>.<\/p>\n<p>Para o bem do tutorial, tomo um exemplo do ponto de extremidade de Postagens de cria\u00e7\u00e3o de uma postagem. Para criar uma postagem no WordPress, voc\u00ea deve enviar solicita\u00e7\u00f5es POST com par\u00e2metros neste endpoint <code>SITE_URL\/wp-json\/wp\/v2\/posts<\/code>.<\/p>\n<p>Agora, vamos ver como chamar esse endpoint usando cURL, Guzzle e jQuery. Com base em sua inscri\u00e7\u00e3o, voc\u00ea pode obter uma refer\u00eancia de qualquer uma das op\u00e7\u00f5es abaixo.<\/p>\n<h4>API REST do WordPress usando PHP cURL<\/h4>\n<p>Voc\u00ea pode construir seu aplicativo em PHP. O usu\u00e1rio pode interagir com o WordPress a partir de seu aplicativo PHP usando cURL e Guzzle. No caso de cURL, certifique-se de que a extens\u00e3o cURL esteja habilitada em seu servidor. Depois disso, voc\u00ea pode usar o c\u00f3digo abaixo que criar\u00e1 a postagem no 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>Certifique-se de substituir os valores de nome de usu\u00e1rio, senha do aplicativo e SITE_URL pelos seus valores reais. Execute este c\u00f3digo e sua postagem ser\u00e1 criada no painel do WordPress.<\/p>\n<h4>API REST do WordPress usando Guzzle em PHP<\/h4>\n<p><a href=\"https:\/\/docs.guzzlephp.org\/en\/stable\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> \u00e9 uma alternativa ao cURL. \u00c9 um cliente PHP HTTP que facilita o envio de solicita\u00e7\u00f5es HTTP e facilita a integra\u00e7\u00e3o com APIs REST. Instale a biblioteca Guzzle usando o comando:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>A seguir, seu c\u00f3digo para criar uma postagem usando a API REST do WordPress e o Guzzle ser\u00e1 o seguinte.<\/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>Aqui, estou usando a <code>base64_encode()<\/code>fun\u00e7\u00e3o do PHP para codificar a string. No caso de cURL, n\u00e3o precisamos fazer isso explicitamente. O cURL codifica a string por conta pr\u00f3pria.<\/p>\n<h4>API REST do WordPress usando jQuery<\/h4>\n<p>Quando se trata de jQuery, normalmente damos uma chamada de API quando um evento espec\u00edfico \u00e9 disparado. Este evento pode ser qualquer coisa como clicar, alterar, carregar, etc. N\u00e3o estou escrevendo sobre nenhum evento. Em vez disso, escrevo o c\u00f3digo diretamente que voc\u00ea pode encerrar em seus 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>No c\u00f3digo acima, estou usando o m\u00e9todo <code>btoa<\/code>. O <code>btoa()<\/code>m\u00e9todo codifica uma string em base 64. Voc\u00ea tamb\u00e9m pode ver a resposta da API no console do seu navegador.<\/p>\n<p>Espero que voc\u00ea aprenda a usar senhas de aplicativos no WordPress com seu aplicativo. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-adicionar-endpoints-personalizados-a-api-wordpress\/\" title=\"Como adicionar endpoints personalizados \u00e0 API WordPress\">Como adicionar endpoints personalizados \u00e0 API WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-o-guzzle-um-cliente-php-http-para-enviar-solicitacoes-http\/\" title=\"Como usar o Guzzle - um cliente PHP HTTP para enviar solicita\u00e7\u00f5es HTTP\">Como usar o Guzzle &#8211; um cliente PHP HTTP para enviar solicita\u00e7\u00f5es HTTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/login-com-numero-de-telefone-no-wordpress\/\" title=\"Login com n\u00famero de telefone no WordPress\">Login com n\u00famero de telefone no WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, estudamos como usar senhas de aplicativos no WordPress para autentica\u00e7\u00e3o da API REST. Voc\u00ea precisa usar a senha do aplicativo<\/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":[502,613],"tags":[848],"class_list":["post-28625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","category-uncategorized-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28625"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28625\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20206"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}