{"id":231792,"date":"2022-12-29T10:16:00","date_gmt":"2022-12-29T07:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231792"},"modified":"2022-12-29T10:16:47","modified_gmt":"2022-12-29T07:16:47","slug":"enviando-cabecalhos-de-autorizacao-com-o-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/enviando-cabecalhos-de-autorizacao-com-o-wordpress\/","title":{"rendered":"Enviando cabe\u00e7alhos de autoriza\u00e7\u00e3o com o WordPress"},"content":{"rendered":"<p>Sempre que estivermos fazendo solicita\u00e7\u00f5es remotas com o WordPress, provavelmente usaremos uma das seguintes fun\u00e7\u00f5es:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_post\/https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_remote_post<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_safe_remote_post<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_remote_get\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_remote_get<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/solicitacoes-remotas-com-wp_safe_remote_get\/\" title=\"wp_safe_remote_get\">wp_safe_remote_get<\/a><\/li>\n<\/ul>\n<p>E, sim, \u00e0s vezes usaremos <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/a-diferenca-em-solicitacoes-curl-e-wordpress\/\" title=\"cURL\">cURL<\/a> dependendo da natureza do projeto, mas isso est\u00e1 fora do conte\u00fado deste post.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159539-61e6f74b66e53.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159539-61e6f74b66e53.png\" alt=\"Enviando cabe\u00e7alhos de autoriza\u00e7\u00e3o com o WordPress\"><\/a><\/p>\n<p>Para este artigo, quero falar especificamente sobre como fazer solicita\u00e7\u00f5es remotas e especificar cabe\u00e7alhos em uma API de terceiros.<\/p>\n<h2>Cabe\u00e7alhos de autoriza\u00e7\u00e3o com WordPress<\/h2>\n<p>Sempre que se trata de fazer solicita\u00e7\u00f5es ass\u00edncronas com o WordPress, o processo geralmente \u00e9 assim:<\/p>\n<ol>\n<li>Configure a fun\u00e7\u00e3o JavaScript para fazer uma chamada para o lado do servidor (com um <a href=\"https:\/\/codex.wordpress.org\/WordPress_Nonces\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nonce<\/a> seguro, \u00e9 claro),<\/li>\n<li>Fa\u00e7a com que o lado do servidor execute a solicita\u00e7\u00e3o usando uma das fun\u00e7\u00f5es acima mencionadas,<\/li>\n<li>Retornar a resposta na forma de uma mensagem de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_send_json_success\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sucesso<\/a> ou de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_send_json_error\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">erro ,<\/a><\/li>\n<li>Fa\u00e7a com que o JavaScript do lado do cliente lide com a resposta da maneira que parecer adequada com base na resposta.<\/li>\n<\/ol>\n<p>Mas e se a solicita\u00e7\u00e3o de API que voc\u00ea precisa fazer do servidor exigir algo mais do que um endpoint b\u00e1sico com alguns par\u00e2metros?<\/p>\n<p>Mais especificamente, e se o que voc\u00ea est\u00e1 escrevendo exige que voc\u00ea forne\u00e7a algum tipo de autoriza\u00e7\u00e3o para o seu trabalho? Felizmente, o WordPress nos permite definir cabe\u00e7alhos que resolvem exatamente isso.<\/p>\n<p>Se voc\u00ea quiser implementar algo assim, vou assumir que o tipo de conte\u00fado ser\u00e1 JSON e que a autoriza\u00e7\u00e3o ser\u00e1 algum tipo de token (no entanto, sua implementa\u00e7\u00e3o pode variar de acordo com o sistema com o qual voc\u00ea est\u00e1 trabalhando).<\/p>\n<p>Nesse caso, meu token ser\u00e1 simplesmente identificado como <strong>$token.<\/strong> E aqui est\u00e1 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/b0050a06f124f9884b22426b1bd51989\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">um exemplo simples:<\/a><\/p>\n<pre><code>&lt;?php\n\n$response = wp_safe_remote_post(\n    $url,\n    [\n        'headers'     =&gt; [\n            'Content-Type'  =&gt; 'application\/json',\n            'Authorization' =&gt; $token\n        ],\n        'body'        =&gt; wp_json_encode($args),\n        'method'      =&gt; 'POST',\n        'data_format' =&gt; 'body',\n    ]\n);<\/code><\/pre>\n<h2>Algo digno de nota<\/h2>\n<p>Se o seu host estiver rodando no Apache e esse tipo de solicita\u00e7\u00e3o n\u00e3o funcionar, voc\u00ea provavelmente precisar\u00e1 atualizar seu <code>htaccess<\/code>arquivo para que ele inclua a seguinte regra: <code>SetEnvIf Authorization \"(.*)\" HTTP_AUTHORIZATION=$1<\/code>.<\/p>\n<p>Adere\u00e7os para <a href=\"https:\/\/ggwi.cz\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">George<\/a> por me ligar com isso.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um exemplo de como enviar autoriza\u00e7\u00e3o com o WordPress, suas APIs integradas e quaisquer ajustes no servidor web que voc\u00ea possa precisar fazer.<\/p>\n","protected":false},"author":1,"featured_media":237098,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,920,846,867],"tags":[1170],"class_list":["post-231792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-outro","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231792"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/237098"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}