{"id":306,"date":"2012-03-27T15:27:25","date_gmt":"2012-03-27T18:27:25","guid":{"rendered":"http:\/\/thiagosantos.com\/blog\/?p=306"},"modified":"2012-04-09T10:53:27","modified_gmt":"2012-04-09T13:53:27","slug":"magento-login-automatico","status":"publish","type":"post","link":"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/","title":{"rendered":"Magento login autom\u00e1tico"},"content":{"rendered":"<p><span style=\"color: #3366ff;\"><strong>1. Introdu\u00e7\u00e3o<\/strong><\/span><\/p>\n<p>Construindo um modulo para carrinho abandonado no Magento me deparei com a seguinte situa\u00e7\u00e3o:<\/p>\n<ol>\n<li>O usu\u00e1rio recebe no email uma c\u00f3pia do carrinho que ele abandonou<\/li>\n<li>Ele se interessa novamente pelos produtos, clica no email<\/li>\n<li>\u00c9 ent\u00e3o direcionado para a p\u00e1gina de login do Magento<\/li>\n<li>Digita usu\u00e1rio e senha, e \u00e9 direcionado para a home, ou para a minha conta (varia de acordo com as configura\u00e7\u00f5es do admin)<\/li>\n<li>Depois o usu\u00e1rio tem que se dar ao trabalho de ir para o p\u00e1gina do carrinho (checkout\/cart)<\/li>\n<li>E dai ent\u00e3o continuar com o processo<\/li>\n<\/ol>\n<div>S\u00e3o 6 passos para que o cliente tem que seguir para continuar com a compra que ele havia abandonado uma vez.<\/div>\n<div>Achei tudo muito complicado. O usu\u00e1rio j\u00e1 se interessar pelo carrinho que ele abandonou j\u00e1 seria um grande lucro, ent\u00e3o vamos facilitar.<\/div>\n<div>Pensando nisso criei uma proposta para diminuir de 6 passos para apenas 4, removendo os passos mais entediantes logar e direcionar o usu\u00e1rio pro carrinho. A proposta \u00e9 que ap\u00f3s receber o carrinho abandonado por e-mail o cliente entre direto na p\u00e1gina do carrinho j\u00e1 logado. Os passos s\u00e3o descritos abaixo:<\/div>\n<div>\n<ol>\n<li>O usu\u00e1rio recebe no email uma c\u00f3pia do carrinho que ele abandonou<\/li>\n<li>Ele se interessa novamente pelo produtos, clica no email<\/li>\n<li>\u00c9 ent\u00e3o direcionado para uma p\u00e1gina onde seu usu\u00e1rio \u00e9 autenticado, e ent\u00e3o\u00a0automaticamente\u00a0redirecionado para para a p\u00e1gina do carrinho j\u00e1 logado.<\/li>\n<li>Se necess\u00e1rio modificar o carrinho e continuar com o processo<br \/>\n<!--more--><\/li>\n<\/ol>\n<div>[Um ponto que seria interessante de estudar \u00e9 a eficacia de direcionar o usu\u00e1rio para a p\u00e1gina do carrinho e para a p\u00e1gina de checkout, fica ai a dica para os curiosos.]<\/div>\n<\/div>\n<div><strong><span style=\"color: #3366ff;\">2. Criptografia<\/span><\/strong><\/div>\n<div>Tive que bolar um jeito de conseguir passar uma string com um identificador \u00fanico do usu\u00e1rio atrav\u00e9s dos parametro GET no email dele. O Magento disponibiliza o &#8220;core\/encryption&#8221; capaz de criptografar e descriptografar uma string qualquer. O legal disso \u00e9 a string que criptografar com a minha instala\u00e7\u00e3o ser\u00e1 diferente da sua, mesmo se passarmos exatamente os mesmos valores. Isso porque o Magento usa os dados do &#8220;crypt key&#8221; definida no momento da instala\u00e7\u00e3o.<\/div>\n<div>De forma pr\u00e1tica:<\/div>\n<pre lang=\"php\">$crypt = Mage::getModel('core\/encryption');\r\necho $crypt-&gt;encrypt(\"thiag\u00e3o_bolad\u00e3o\");<\/pre>\n<pre lang=\"php\">[retornos]\r\nMagento 1: tDxa5XdEj6easqHi2pglwF\/eQYKimNNJ\r\nMagento 2: 5skpZoWseMKdMgd\/aOMLrXSVhLebaMUa<\/pre>\n<p>Em duas instala\u00e7\u00f5es diferentes do Magento, obtive duas\u00a0sa\u00eddas\u00a0diferentes. Isso torna a criptografia mais segura, mas n\u00e3o a prova de quebras. Foco no login autom\u00e1tico!<\/p>\n<p><strong><span style=\"color: #3366ff;\">3. Decriptografia<\/span><\/strong><\/p>\n<p>Da mesma forma que criptografamos a informa\u00e7\u00e3o \u00e9 poss\u00edvel tamb\u00e9m descriptografar obtendo a mesma senten\u00e7a inicial da forma que se segue.<\/p>\n<pre lang=\"php\">$crypt = Mage::getModel('core\/encryption');\r\necho $crypt-&gt;decrypt(\"5skpZoWseMKdMgd\/aOMLrXSVhLebaMUa\");<\/pre>\n<pre lang=\"php\">[retornos]\r\nMagento 1: i\ufffd\ufffd\ufffd\f\ufffd\ufffd\ufffdo\ufffd\u01fa\ufffd\ufffd\f\u001ff2g\ufffd\u0003\r\nMagento 2: thiag\u00e3o_bolad\u00e3o<\/pre>\n<p><span style=\"color: #3366ff;\"><strong><br \/>\n4.\u00a0Cryptografando e montando a URL<\/strong><\/span><\/p>\n<p>O meu objetivo \u00e9 criar um link que \u00e9 enviado para o usu\u00e1rio contendo id do usu\u00e1rio como parametro, f\u00e1cil de identificar quando tivermos o retorno, seu email ( para checarmos a autenticidade do link) e uma data de expira\u00e7\u00e3o tudo criptografado em um link. oO<\/p>\n<p>Ao inv\u00e9s de o link ser ao do tipo:<br \/>\n<em>http:\/\/meumagento.com.br\/meucontroller\/loga\/?id=1&amp;email=5&amp;expira=2121214578<\/em> seria algo do tipo:<br \/>\n<em>http:\/\/meumagento.com.br\/meucontroller\/loga\/?c=5skpZoWseMKdMgd\/aOVhLebaUa .<\/em><\/p>\n<p>Pensei em concaternar os dados ao inv\u00e9s de cada dado ser um\u00a0par\u00e2metro diferente. Por tanto vou usar os dados concatenados separados por ponto e virgula (;). Assim no primeiro parametro fica o id, no segundo fica o email do usu\u00e1rio e no terceiro a data de validade do link:<\/p>\n<p>ID do usu\u00e1rio; email do usu\u00e1rio; data de expira\u00e7\u00e3o do link<\/p>\n<p>Passando isso pra c\u00f3digo seria algo assim:<\/p>\n<pre lang=\"php\">$crypt = Mage::getModel('core\/encryption');\r\n$customer = Mage::getModel('customer\/customer')-&gt;load(3);\r\n\/\/validade do link \u00e9 de 48 horas\r\n$timeout = time()+(60*60)*48;\r\n$_crypted = $crypt-&gt;encrypt(\r\n                            $customer-&gt;getId().\";\".\r\n                            $customer-&gt;getEmail().\";\".\r\n                            $timeout\r\n                           );\r\n\/\/link\r\necho Mage::getUrl('meucontroller\/loga', array('c' =&gt; $_crypted));<\/pre>\n<pre lang=\"php\">[deve ficar algo assim]\r\nhttp:\/\/meumagento.com.br\/meumodulo\/meucontroller\/loga\/index\/c\/XvCfxYRNKYI9OsYPil1FgsDoi7x52+RaUdj4QoLHAaw=\/<\/pre>\n<p>Bem legal n\u00e9?<br \/>\nS\u00f3 que se avaliarmos o nosso parametro c, vamos ver que h\u00e1 um &#8220;=&#8221; e um &#8220;+&#8221; na string, ent\u00e3o pra n\u00e3o corremos o risco de uma deforma\u00e7\u00e3o na nossa string antes de montar a url, vou colocar o url_encode. Ficando assim:<\/p>\n<p>&nbsp;<\/p>\n<pre lang=\"php\">$crypt = Mage::getModel('core\/encryption');\r\n$customer = Mage::getModel('customer\/customer')-&gt;load(3);\r\n\/\/validade do link \u00e9 de 48 horas\r\n$timeout = time()+(60*60)*48;\r\n$_crypted = $crypt-&gt;encrypt(\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $customer-&gt;getId().\";\".\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $customer-&gt;getEmail().\";\".\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $timeout\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0);\r\n\/\/link\r\necho Mage::getUrl('meucontroller\/loga',\r\n                   array('c' =&gt; url_encode($_crypted))\r\n                  );<\/pre>\n<pre lang=\"php\">[deve ficar algo assim]\r\nhttp:\/\/meumagento.com.br\/meumodulo\/meucontroller\/loga\/index\/c\/XvCfxYRNKYI9OsYPil1FgsDoi7x52%2BRavxAgdhTuSOI%3D\/<\/pre>\n<p>S\u00f3 n\u00e3o podemos deixar de decodificar depois &#8230; :)<br \/>\nBasicamente \u00e9 isso fechamos essa etapa, temos ao final uma url com 3 par\u00e2metros codificados e criptografados que ser\u00e1 enviado pro usu\u00e1rio.<\/p>\n<p><strong><span style=\"color: #3366ff;\">5. Controller e a volta<\/span><\/strong><\/p>\n<p>A volta \u00e9 bem simples, com os conceitos de criptografar e decriptografar descritos a cima fica facil daqui em diante. O cliente acabou de clicar sobre o link que foi enviado e em seguida ele \u00e9 direcionado para o seu controller &#8220;MeuController&#8221; no metodo &#8220;logaAction&#8221;. Esse post j\u00e1 est\u00e1 enorme, ent\u00e3o vou me limitar ao metodo.<\/p>\n<pre lang=\"php\">public function logaAction(){\r\n\r\n    $parametro = $this-&gt;getRequest()-&gt;getParam('c');\r\n    $session = Mage::getSingleton('customer\/session');\r\n\r\n    if (!isset($parametro\u00a0)) {\r\n        $session-&gt;addError('URL inv\u00e1lida ou usu\u00e1rio inexistente.');\r\n        $this-&gt;_redirect('\/');\r\n    }\r\n    \/\/0 - id \/\/1 - email \/\/2 - data de expiracao\r\n    $csv = Mage::helper('carrinhoabandonado')-&gt;decrypt($parametro\u00a0);\r\n    $_customerinfo = explode(';', $csv);\r\n\r\n    \/\/ID do usu\u00e1rio\r\n    $customerid = $_customerinfo[0];\r\n    \/\/email do usu\u00e1rio\r\n    $customermemail = $_customerinfo[1];\r\n    \/\/Data de expira\u00e7\u00e3o do link\r\n    $exp = $_customerinfo[2];\r\n\r\n    \/\/primeira coisa a ser feita aqui \u00e9 validar a data do link\r\n    if(time()&gt;$exp){\r\n        $session-&gt;addError('URL inv\u00e1lida ou usu\u00e1rio inexistente.');\r\n        $this-&gt;_redirect('\/');\r\n    }\r\n    \/\/Usu\u00e1rio existe?\r\n    $customer = Mage::getModel('customer\/customer')-&gt;load($customerid);\r\n    if(!$customer-&gt;getId()){\r\n        $session-&gt;addError('URL inv\u00e1lida ou usu\u00e1rio inexistente.');\r\n        $this-&gt;_redirect('\/');\r\n\r\n    }\r\n    \/\/Data ok, usu\u00e1rio existe, validar o email do banco com o do parametro\r\n    if($customer-&gt;getEmail() != $customeremail){\r\n        $session-&gt;addError('URL inv\u00e1lida ou usu\u00e1rio inexistente.');\r\n\u00a0 \u00a0 \u00a0 \u00a0 $this-&gt;_redirect('\/');\r\n   }\r\n\r\n   \/\/Tudo OK!\r\n   $session-&gt;logout();\r\n   \/\/Logando o usu\u00e1rio\r\n   $session-&gt;setCustomer($customer);\r\n\r\n   $this -&gt; _redirect('\/');\r\n}<\/pre>\n<p>Auto explicativo?<\/p>\n<p>Comentem e vamos fazer desde um post mais completo!<\/p>\n<p>Quem quiser dar uma olhada no meu modulo de carrinho abandonado, e quiser fazer alguns relat\u00f3rios :). Ele ta l\u00e1 no <a title=\"Carrinho Abandonado\" href=\"https:\/\/github.com\/thiagosantos\/Carrinho-Abandonado---Magento\">GitHub<\/a>\u00a0(<a href=\"https:\/\/github.com\/thiagosantos\/Carrinho-Abandonado---Magento\">https:\/\/github.com\/thiagosantos\/Carrinho-Abandonado&#8212;Magento<\/a>). Para esse post usei parte de c\u00f3digo do Carrinho Abandonado, mas a vers\u00e3o do post est\u00e1 bem explicado.<\/p>\n<p><em>atualizado:<\/em><br \/>\n<em>[29\/03\/2012 09:43]\u00a0<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O login autom\u00e1tico \u00e9 uma solu\u00e7\u00e3o para desenvolvedores, mantenedores e propriet\u00e1rios de ecommerce Magento que querem dar uma melhor experi\u00eancia para seus usu\u00e1rios. Vale a pena dar uma lida, e mais a pena ainda comentarem.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42,43,4],"tags":[137,138,182,139],"class_list":["post-306","post","type-post","status-publish","format-standard","hentry","category-ecommerce","category-magento","category-php","tag-ecommerce-2","tag-login-automatico","tag-magento","tag-magento-customer-login"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Magento login autom\u00e1tico - Pereira, Thiago Santos.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Magento login autom\u00e1tico - Pereira, Thiago Santos.\" \/>\n<meta property=\"og:description\" content=\"O login autom\u00e1tico \u00e9 uma solu\u00e7\u00e3o para desenvolvedores, mantenedores e propriet\u00e1rios de ecommerce Magento que querem dar uma melhor experi\u00eancia para seus usu\u00e1rios. Vale a pena dar uma lida, e mais a pena ainda comentarem.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/\" \/>\n<meta property=\"og:site_name\" content=\"Pereira, Thiago Santos.\" \/>\n<meta property=\"article:published_time\" content=\"2012-03-27T18:27:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-04-09T13:53:27+00:00\" \/>\n<meta name=\"author\" content=\"Pereira, Thiago Santos\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pereira, Thiago Santos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/\",\"url\":\"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/\",\"name\":\"Magento login autom\u00e1tico - Pereira, Thiago Santos.\",\"isPartOf\":{\"@id\":\"https:\/\/thiagosantos.com\/blog\/#website\"},\"datePublished\":\"2012-03-27T18:27:25+00:00\",\"dateModified\":\"2012-04-09T13:53:27+00:00\",\"author\":{\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#website\",\"url\":\"https:\/\/thiagosantos.com\/blog\/\",\"name\":\"Pereira, Thiago Santos.\",\"description\":\"the fun of code.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/thiagosantos.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d\",\"name\":\"Pereira, Thiago Santos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g\",\"caption\":\"Pereira, Thiago Santos\"},\"description\":\"Um cara que mora no Rio e n\u00e3o sabe nadar.\",\"sameAs\":[\"http:\/\/thiagosantos.com\"],\"url\":\"https:\/\/thiagosantos.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Magento login autom\u00e1tico - Pereira, Thiago Santos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/","og_locale":"pt_BR","og_type":"article","og_title":"Magento login autom\u00e1tico - Pereira, Thiago Santos.","og_description":"O login autom\u00e1tico \u00e9 uma solu\u00e7\u00e3o para desenvolvedores, mantenedores e propriet\u00e1rios de ecommerce Magento que querem dar uma melhor experi\u00eancia para seus usu\u00e1rios. Vale a pena dar uma lida, e mais a pena ainda comentarem.","og_url":"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/","og_site_name":"Pereira, Thiago Santos.","article_published_time":"2012-03-27T18:27:25+00:00","article_modified_time":"2012-04-09T13:53:27+00:00","author":"Pereira, Thiago Santos","twitter_misc":{"Escrito por":"Pereira, Thiago Santos","Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/","url":"https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/","name":"Magento login autom\u00e1tico - Pereira, Thiago Santos.","isPartOf":{"@id":"https:\/\/thiagosantos.com\/blog\/#website"},"datePublished":"2012-03-27T18:27:25+00:00","dateModified":"2012-04-09T13:53:27+00:00","author":{"@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagosantos.com\/blog\/306\/php\/magento-login-automatico\/"]}]},{"@type":"WebSite","@id":"https:\/\/thiagosantos.com\/blog\/#website","url":"https:\/\/thiagosantos.com\/blog\/","name":"Pereira, Thiago Santos.","description":"the fun of code.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagosantos.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d","name":"Pereira, Thiago Santos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g","caption":"Pereira, Thiago Santos"},"description":"Um cara que mora no Rio e n\u00e3o sabe nadar.","sameAs":["http:\/\/thiagosantos.com"],"url":"https:\/\/thiagosantos.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/comments?post=306"}],"version-history":[{"count":16,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":383,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions\/383"}],"wp:attachment":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/media?parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/categories?post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/tags?post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}