Larry Ullman
Novatec
Authorized translation from the English language edition, entitled EFFORTLESS E-COMMERCE WITH PHP AND MYSQL, 2nd Edition, 0321949366 by ULLMAN, LARRY, published by Pearson Education, Inc, publishing as New Riders, Copyright © 2014 by Pearson Education. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. PORTUGUESE language edition published by NOVATEC EDITORA LTDA., Copyright © 2014. Tradução autorizada da edição original em inglês, intitulada EFFORTLESS E-COMMERCE WITH PHP AND MYSQL, 2nd Edition, 0321949366 por ULLMAN, LARRY, publicada pela Pearson Education, Inc, publicando como New Riders, Copyright © 2014 pela Pearson Education. Todos os direitos reservados. Nenhuma parte deste livro pode ser reproduzida ou transmitida por qualquer forma ou meio, eletrônica ou mecânica, incluindo fotocópia, gravação ou qualquer sistema de armazenamento de informação, sem a permissão da Pearson Education, Inc. Edição em Português publicada pela NOVATEC EDITORA LTDA., Copyright © 2014. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora.
Editor: Rubens Prates Tradução: Lúcia Kinoshita Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-397-0 Histórico de impressões: Novembro/2014
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec PR20141110
capítulo 1
Introdução ao e-commerce
Assim como não se começa a construção de uma casa com um martelo, não se inicia a criação de um site de e-commerce com o seu computador. Bem, provavelmente você usará o seu computador para fazer pesquisas, mas a codificação é um passo que ocorrerá muito tempo depois. Neste capítulo, você aprenderá a dar início ao desenvolvimento de seu site de e-commerce. O objetivo do capítulo é explicar dois aspectos: • os passos que devem ser executados; • o ponto de vista deste livro em relação ao e-commerce. Embora o propósito deste livro seja oferecer respostas concretas e códigos que possam ser utilizados, haverá alguns assuntos, especialmente nas próximas páginas, em relação aos quais não poderei dizer o que você deve fazer. Nesses casos, tentarei identificar quais são as perguntas que devem ser respondidas e como você deve proceder para isso. No nível mais profundo, o sucesso de qualquer site, não importa se o seu objetivo é gerar lucros, depende de sua usabilidade, de sua confiabilidade e de seu desempenho. Se as pessoas estiverem tentando usar o site, elas poderão fazê-lo? Neste capítulo, você verá muitas decisões que devem ser tomadas e que causarão impactos na disponibilidade de seu site. As escolhas que você fizer não serão permanentes, porém, como ocorre em relação à maioria das tarefas, é preferível não ter de efetuar grandes mudanças no futuro. O sucesso de um site de e-commerce também depende da segurança. Este capítulo menciona alguns problemas de segurança, porém esse assunto será abordado com mais detalhes no próximo capítulo e, em seguida, no restante do livro. O último aspecto a observar é que você pode criar um site de e-commerce em um de dois cenários: para si mesmo ou para outras pessoas. Ao criar um site para si mesmo, você terá de tomar a maioria das decisões. Ao criar um site para 25
26
E-Commerce com PHP e MySQL
outras pessoas, são elas que tomarão a maior parte das decisões, e o seu papel nesse processo, no melhor dos casos, será dar conselhos. Considere, por exemplo, os objetivos do negócio...
Identificando os objetivos de seu negócio Antes de realizar qualquer tarefa, qualquer tarefa mesmo – criar o esboço de um design web, identificar o seu web host ou até mesmo comprar o nome do domínio –, é necessário identificar os objetivos de seu negócio. Para um site de e-commerce, o objetivo será ganhar dinheiro, o que pode ser feito de maneiras diferentes: • por meio da venda direta de produtos ou de serviços; • por meio de propagandas no site; • por meio da promoção de produtos ou de serviços que podem ser comprados em outro lugar. Neste livro, usarei o termo e-commerce para me referir a sites que aceitem dinheiro diretamente dos usuários finais. Limitei-me a esse escopo porque lidar diretamente com dinheiro exige um nível de segurança muito além do que é exigido por outros tipos de site. Suponha que você queira criar um site de avaliações de músicas: todo o conteúdo poderá ser disponibilizado gratuitamente, porém você espera ganhar dinheiro por meio da divulgação de propagandas em seu site e/ou por meio de links afiliados a outros sites que realmente vendem as músicas. Qualquer que seja o caso, os problemas de segurança que você teria não seriam piores do que os problemas que a maioria dos demais sites que não sejam de e-commerce teria. Para dar outro exemplo, o meu blog em http://www.LarryUllman.com dá suporte e complementa os livros que escrevo, o que teoricamente aumentaria suas vendas; no entanto o blog por si só não recebe dinheiro diretamente. O objetivo deste livro consiste em criar sites que vendam produtos ou serviços diretamente aos consumidores. Dica: Uma boa maneira de fazer com que as pessoas acessem o seu site é oferecer algo, o que quer que seja, gratuitamente!
Atingir os objetivos de um negócio envolve muitos componentes. O foco deste livro restringe-se ao desenvolvimento da experiência online; você estará por conta própria em relação aos demais aspectos envolvidos na condução de um negócio, tais como:
Capítulo 1 ■ Introdução ao e-commerce
27
• criar uma entidade legal para o empreendimento; • lidar de modo adequado com os impostos que recaiam sobre o negócio; • fazer a contabilidade da empresa; • efetuar a articulação com os fornecedores; • fazer o marketing de seu empreendimento. • administrar os funcionários e a folha de pagamentos; • administrar o estoque físico; • administrar os envios e as devoluções de produtos. Em suma, criar o site não representa tudo o que você deve fazer. Mais importante ainda, saiba desde já que mesmo que você crie um site fantástico de e-commerce, somente isso não será uma garantia de sucesso nos negócios. Portanto pare de ler agora mesmo e liste quais são os objetivos de seu negócio. O que você espera alcançar? Quais são as suas metas de curto prazo? Quais são as suas metas de longo prazo? Procure ser realista em relação a essas metas. Dica: Dê um motivo para as pessoas visitarem o seu site, mesmo quando elas não estiverem fazendo compras, para que elas possam comprar algo por impulso ou para que pensem em seu site em primeiro lugar quando quiserem fazer uma compra.
A seguir, anote (em uma folha de papel grande!) tudo o que você achar que será necessário fazer e ter em ordem para atingir essas metas. Quanto dinheiro você poderá investir inicialmente? Quanto tempo? Quem ajudará você? De que modo as pessoas que o ajudarem serão recompensadas? Onde você conseguirá mais dinheiro se precisar de mais repentinamente? Quem vai lidar com a contabilidade? Como você fará para que as pessoas visitem o seu site? Se estiver vendendo produtos físicos, em que local eles serão armazenados? Como você enviará as mercadorias? Está claro que há muitas perguntas a serem respondidas, até mesmo quando se trata dos objetivos mais básicos. Mas há uma pergunta básica que eu posso responder para você: como criar um site bom e seguro de e-commerce? A resposta: leia este livro!
28
E-Commerce com PHP e MySQL
Fazendo pesquisas sobre questões legais Sempre que estiver lidando com o dinheiro de outras pessoas, e sempre que estiver criando o seu próprio negócio, é necessário considerar as questões legais. Essa é uma área extensa, na qual sou de pouca ajuda: não sou advogado e não sei em que país, estado, província, território ou cidade você mora. Porém isso não significa que eu não possa apontar o caminho certo a você.
Leis nacionais e internacionais As questões legais envolvidas serão diferentes caso o site seja usado para o seu próprio negócio ou se você estiver criando-o para um cliente. Ao trabalhar para um cliente, você deve ter um contrato de caráter legal bem sólido. Em particular, o contrato deve limitar a sua responsabilidade pessoal no caso de algo dar errado. Como regra geral, bons contratos limitam a sua responsabilidade ao lucro que você obtiver com o projeto se você for o culpado. Além disso, você deve definir um processo para lidar com solicitações de alterações. Uma abordagem consiste em oferecer o atendimento a uma rodada de solicitações após a conclusão da versão inicial do site. Solicitações secundárias ou qualquer acréscimo além do escopo original do contrato que não sejam razoáveis devem ser renegociados. Se você tiver o seu próprio negócio e não houver um cliente, continuarão restando várias questões legais diferentes para investigar e que não têm nada a ver com o site de e-commerce propriamente dito. Para essas questões, comece entrando em contato com todos os departamentos governamentais cabíveis a fim de verificar o que você deve saber e o que deve fazer. Muitas cidades e estados possuem repartições para pequenos negócios, cuja finalidade é ajudar pessoas como você a transitar pelos meandros das exigências legais. Qualquer que seja o caso, você deve ter ciência das questões legais que envolvam especificamente o comércio online. Novamente, seus governos locais e nacionais devem ser capazes de fornecer esses tipos de informação. As particularidades serão bastante diferentes de um país para outro. Elas podem depender até mesmo do local em que você estiver, em que o cliente estiver, em que os consumidores estiverem, em que o site estiver fisicamente hospedado, em que o banco associado se encontrar, e assim por diante. Nos Estados Unidos, o FTC (Federal Trade Commission) cuida de vários aspectos ligados ao e-commerce. No site do FTC (www.ftc.gov), você encontrará diretrizes excelentes relacionadas a e-commerce, vendas internacionais, segurança e muito mais.
Capítulo 1 ■ Introdução ao e-commerce
29
Como exemplo adicional, no Reino Unido, o governo determina requisitos claros a respeito de quais informações devem estar disponíveis no site, bem como em formulários de pedidos e em emails. Essas informações incluem: • o endereço físico da empresa; • o número de registro da empresa; • qualquer parceria comercial; • o número do VAT (Value Added Tax). Como você irá armazenar informações dos clientes, outras leis estarão envolvidas. A União Europeia possui regulamentações específicas sobre o modo como os dados pessoais devem ser armazenados e utilizados. Os Estados Unidos também possuem regras precisas sobre o uso de endereços de email dos clientes para fins de propaganda, para envio de emails promocionais e para o tratamento em caso de haver divulgação. Todas essas leis aplicam-se a informações pessoais básicas; se você armazenar dados de cartões de crédito (e você realmente não deveria fazer isso), haverá mais leis ainda a serem aplicadas. Você também deve saber se as vendas pela Internet estão sujeitas a impostos e, em caso afirmativo, quais são as taxas. Nos Estados Unidos, esse assunto ainda está sendo debatido e varia de estado para estado. E se você despachar produtos físicos, existem regras sobre quando se pode cobrar do cliente de acordo com o momento em que o pedido for enviado. Se apenas uma parte do pedido for enviada, você poderá cobrar do cliente somente uma parte do total do pedido nesse momento. Caso o pior aconteça – digamos que o seu sistema tenha sido invadido e os dados tenham vazado –, as leis serão igualmente aplicadas. O estado da Califórnia, por exemplo, possui leis rigorosas sobre o que você deve fazer ao descobrir uma violação de segurança. Parte do planejamento – uma boa parte dele – consiste em se preparar caso o pior aconteça, de modo que você não tenha de ficar lutando para encontrar respostas em meio a uma crise. Dica: Deixando de lado todas as leis, trate os seus clientes e as suas informações pessoais da forma como você espera que os sites tratem você e as suas informações.
Eu compreendo que a quantidade e a complexidade das leis que se aplicam podem ser avassaladoras, porém encare-as como um indício da importância de cuidar dessas questões da forma mais abrangente possível. Se você estiver criando
30
E-Commerce com PHP e MySQL
um negócio e estiver tentando ganhar dinheiro com o e-commerce, estar em total conformidade com todas as leis será a única opção.
Conformidade com o PCI Outra questão legal em relação à qual você deve ser extremamente versado diz respeito ao PCI DSS, sigla para Payment Card Industry Data Security Standard (www.pcisecuritystandards.org). O PCI DSS é um conjunto específico de regras que visam a garantir o tratamento seguro e adequado dos cartões de crédito por todos os que lidam com o comércio. Qualquer empresa que processe, armazene ou transmita informações de cartões de crédito deve seguir essas diretrizes, estando, desse modo, em conformidade com o PCI (PCI compliant). Ao acompanhar o código presente neste livro, você não armazenará nem processará nenhum cartão de crédito por conta própria, o que será muito melhor. Realmente, você não deve armazenar informações dos cartões de crédito dos usuários! Sim, existem empresas que fazem isso, mas esse é o seu único trabalho e elas têm o conhecimento, os recursos e o dinheiro para fazê-lo adequadamente. Apesar disso, até mesmo para receber informações de cartões de crédito em seu site e passá-las a outra empresa você deve estar em conformidade com o PCI. Os requisitos específicos diferem de acordo com o que é feito com os cartões de crédito e a quantidade de transações processadas por ano. Abordarei esses requisitos no próximo capítulo. Dica: Muitos gateways de pagamento permitem pagamentos recorrentes, o que significa que você pode cobrar várias parcelas de um consumidor sem que você mesmo tenha de armazenar as informações relativas ao pagamento.
Se o seu site não estiver em conformidade com o PCI e houver uma violação de segurança, muitas coisas ruins poderão acontecer (além dos próprios efeitos da própria violação). Em primeiro lugar, as empresas de cartões de crédito provavelmente irão aumentar o nível de seus requisitos de segurança, por exemplo, exigindo verificações de segurança externas sobre o seu sistema. Isso significa que você terá mais trabalho e mais gastos. Em segundo lugar, as empresas de cartões de crédito que criaram o PCI DSS – como Visa, MasterCard, American Express, Discover e JCB (Japan Credit Bureau) – poderiam fazer você pagar qualquer prejuízo que elas tiverem em consequência de sua violação de segurança. Elas poderiam até mesmo multá-lo. Em terceiro lugar, essas mesmas empresas podem impedir que você tenha a opção de aceitar seus cartões de crédito, o que certamente levaria o seu negócio à falência.
Capítulo 1 ■ Introdução ao e-commerce
31
Dica: As empresas de cartões de crédito – a Visa em particular – possuem um grande volume de documentação em seus sites, relacionado ao tratamento seguro de cartões de crédito, como o que fazer se o seu sistema for comprometido, além de outros assuntos.
Tecnicamente, o PCI DSS não é uma lei, mas algumas partes dessa especificação também podem corresponder a leis que se apliquem em seu país, em seu estado, em sua província ou em seu território. E as penalidades possíveis impostas pelas empresas de cartões de crédito podem ser simplesmente tão assustadoras quanto qualquer consequência de caráter legal.
Selecionando as tecnologias web Nos últimos 20 anos, a web mudou em relação a diversos aspectos. Ela mudou significativamente apenas nos últimos cinco anos! Porém alguns aspectos permanecem iguais. Para começar, há o HTML (HyperText Markup Language, ou Linguagem de Marcação de Hipertexto). Não importa o que mais tenha mudado – sejam os tipos de imagens, as opções de vídeos e as tecnologias usadas do lado do servidor que você utiliza –, o usuário final inicialmente interage com o HTML. Este livro não pode nem irá ensinar o HTML. Se precisar de mais informações sobre o HTML, escolha um livro sobre esse assunto, por exemplo, HTML and CSS: Visual QuickStart Guide, 8th Edition (Peachpit Press, 2013) de Elizabeth Castro e Bruce Hyslop, que é um padrão de fato. Nota: Este livro não ensina HTML, CSS, JavaScript, PHP, SQL ou MySQL; em vez disso, ele demonstra a aplicação dessas tecnologias no mundo real.
Com os navegadores web modernos, a maior parte do layout e do design de um site resulta do CSS (Cascading Style Sheets, ou Folhas de estilo em cascata). O CSS também será usado neste livro e, assim como no caso do HTML, não irei explicá-lo com muitos detalhes. Entretanto não usarei o CSS de nenhuma maneira muito sofisticada, portanto você não deverá ter problemas para acompanhar. Quando comecei a fazer desenvolvimentos web no final dos anos 90, havia essa pequena coisa irritante chamada JavaScript. Naquela época, o JavaScript era usado principalmente para fazer pequenos truques bonitinhos. Em suma, o JavaScript era quase totalmente desnecessário. Hoje em dia, graças ao Ajax, à Web 2.0 e a
32
E-Commerce com PHP e MySQL
outros termos do mercado que as pessoas usam por aí, a situação é bem diferente. Atualmente, o JavaScript melhora bastante a experiência do usuário quando é usado de forma adequada. Muitos recursos apreciados pelas pessoas em um site, como a capacidade de apresentar bastante conteúdo em um espaço limitado, a capacidade de adicionar algo em um carrinho de compras sem sair da página, e assim por diante, exigem o JavaScript. Embora seja valioso, o JavaScript realmente é um “extra”. Com isso em mente, este livro usará o JavaScript para implementar alguns extras. Se você ainda não se sente à vontade com o JavaScript, permita-me recomendar de forma egoísta o meu próprio livro, Modern JavaScript: Develop and Design (Peachpit Press, 2012). Do lado do servidor na equação, de modo diferente do que ocorre do lado do cliente, há uma ampla variedade de tecnologias web a serem consideradas. Este livro utiliza o PHP como a linguagem de programação escolhida e o MySQL como a aplicação para o banco de dados. Eles estão entre as minhas tecnologias prediletas do lado do servidor, e se você está lendo este livro, vou supor que concorda comigo. Porém, se você ainda não for muito bem versado em PHP e em MySQL, você terá algumas dificuldades com parte dos códigos deste livro. Considere a leitura do livro PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide, Fourth Edition (Peachpit Press, 2011) para aprender mais sobre essas tecnologias. Nota: Após este capítulo, prometo que vou parar de recomendar a compra de outros livros!
Alternativas para facilitar o e-commerce Neste livro, você aprenderá a desenvolver uma aplicação de e-commerce desde o início usando uma combinação de HTML, CSS, JavaScript, PHP, SQL e MySQL. No entanto existem abordagens mais rápidas e menos personalizadas que podem ser adotadas. Se quiser somente ter um site online de e-commerce rapidamente, ou se você não conhece nenhuma das tecnologias listadas, é possível usar sites "turnkey" para e-commerce, disponibilizados pelo Yahoo, pelo Google e por outros. Ao responder a algumas perguntas e usar a interface da empresa escolhida, você poderá criar um site básico de e-commerce em um dia. O site será até mesmo associado automaticamente a um sistema de pagamentos. Porém não se engane: embora tudo fique pronto imediatamente, o resultado final será bastante amador e muito limitado. Uma solução intermediária entre usar um sistema totalmente terceirizado e criar o seu próprio site consiste em usar um pacote pronto para e-commerce como o
Capítulo 1 ■ Introdução ao e-commerce
33
ZenCart (www.zen-cart.com), o FoxyCart (www.foxycart.com) ou o osCommerce (www.oscommerce.com). Esses pacotes oferecem todas as funcionalidades, da criação de um catálogo ou de um carrinho de compras até a administração, que pode ser associada a um dos diversos sistemas de pagamento. Essas ferramentas estão no mercado há anos; são bastante sólidas, além de oferecerem um bom suporte, porém continuam a apresentar algumas limitações quando comparadas ao desenvolvimento de seu próprio site de e-commerce, especialmente quando chegar o momento de acrescentar recursos que serão exclusivamente seus. Ao mesmo tempo, esses pacotes estão repletos de recursos que possivelmente nunca serão usados.
Selecionando um web host Recomendo enfaticamente que você desenvolva todo o seu site usando somente o seu computador pessoal ou outro ambiente de desenvolvimento que já esteja prontamente disponível. Todas as ferramentas necessárias podem ser instaladas – um servidor web, o PHP e o MySQL – em seu próprio computador; em seguida, você poderá desenvolver o banco de dados, escrever o código, testá-lo e assim por diante. Fazer o desenvolvimento em seu computador pessoal é mais rápido (porque não será preciso fazer o upload dos arquivos), mais barato (porque você não estará pagando pela hospedagem do site durante esse período) e mais seguro (porque um código incompleto e possivelmente não seguro não estará online). Dica: Pode ser que você precise colocar o seu site em um servidor hospedado para testá-lo com um gateway de pagamento.
Após ter o projeto quase concluído, será necessário transferi-lo para o seu web host. Vamos dar uma olhada em como selecionar um.
Opções de hospedagem No que se refere à hospedagem do site, em geral podemos dizer que você terá aquilo pelo qual pagar, e digo isso como uma pessoa que tem a tendência de optar pelo caminho mais barato sempre que possível. Ao longo dos anos, já usei provavelmente cinco ou seis hosts para os meus próprios sites e já lidei com vários outros para os clientes. Há um velho ditado que diz que você deve gastar dinheiro para ganhar dinheiro; selecionar um host barato é uma péssima maneira de ganhar dinheiro.
34
E-Commerce com PHP e MySQL
Os planos de hospedagem de sites variam de acordo com: • o preço; • os recursos; • o desempenho; • o nível de controle. O preço está diretamente relacionado à qualidade dos outros três atributos. Se você gastar mais, terá mais. Para ser franco, os recursos realmente não importam. Bem, alguns importam e muitos não. A maioria dos planos de hospedagem oferece uns 56 recursos, dos quais você precisará de 10. Isso vale também para limites quanto ao espaço em disco e à largura de banda: os planos de hospedagem oferecerão muito mais desses recursos do que você jamais precisará, tentando conquistá-lo com trivialidades. Os recursos minimamente necessários são o PHP, o MySQL, um servidor de emails (para enviar e receber emails) e softwares de segurança como um firewall, um antivírus e assim por diante. Além do mais, outros recursos vantajosos incluem backups regulares e um suporte excelente – realmente excelente – ao cliente. Quando chegar o momento de comparar uma opção de hospedagem com outra, decida de acordo com o que realmente é importante – por exemplo, uptime, backups, segurança e serviço de suporte ao cliente – e ignore o resto. O desempenho de um servidor depende do tipo de hospedagem envolvida e do hardware específico do servidor – a quantidade de RAM, os tipos de disco, os tipos de processadores, a quantidade de processadores e a conexão de rede do servidor. Como mencionei anteriormente, o desempenho do site é muito importante, porém, infelizmente, é algo que não pode ser facilmente determinado previamente. O nível de controle que você terá sobre o servidor depende do tipo de hospedagem. Diferentes empresas de web hosting oferecem planos diferentes, porém as opções básicas de hospedagem são: • gratuita; • compartilhada; • VPS (Virtual Private Server, ou servidor privado virtual); • dedicada ou em colocation (colo).
Capítulo 1 ■ Introdução ao e-commerce
35
Dica: Em algum momento, você se arrependerá de usar um plano de hospedagem gratuita ou muito barata para o seu site, portanto evite essa dor de cabeça!
Planos de hospedagem gratuita são mais difíceis de encontrar atualmente do que costumavam ser, mas você não deve sequer considerá-los para um site de e-commerce. Pode ser que você tenha a possibilidade de ter um site gratuito por meio de alguma conta que tiver, ou por intermédio de seu ISP, porém é provável que você não possa nem mesmo usar o seu nome de domínio nesses sites. Os planos de hospedagem compartilhada são os mais comuns e os mais baratos (entre as opções pagas). A hospedagem compartilhada envolve a colocação de dezenas de clientes e, possivelmente, de centenas de sites em um único servidor. A hospedagem compartilhada não é cara – os planos decentes variam de 10 dólares a 20 dólares (todos os preços no livro estão em dólares americanos) por mês e podem ser uma maneira razoável de começar. No entanto, como há vários usuários em cada servidor, o seu site será somente tão seguro quanto o elo de segurança mais fraco de qualquer site que estiver no servidor. O desempenho do site também sofrerá, pois haverá muito mais demanda. Por fim, você terá pouquíssimo controle, ou não terá controle nenhum, sobre o modo como o servidor executará. Você não poderá usar uma versão em particular do PHP, não poderá habilitar determinadas configurações ou recursos do PHP nem poderá ajustar o modo como o MySQL será executado. Hosts compartilhados provavelmente não farão nenhuma mudança que possa exercer impactos negativos em outros clientes que estejam no mesmo servidor. Apesar disso, a hospedagem compartilhada pode ser apropriada para sites menores e menos exigentes, que não tenham tantas preocupações com segurança. Um boa solução intermediária entre a hospedagem compartilhada e a hospedagem dedicada é o VPS (Virtual Private Server), que tenho pessoalmente usado há vários anos. Em vez de ter várias dezenas de clientes em um único servidor, pode haver somente alguns, e cada cliente executará o seu próprio sistema operacional virtual. Embora todo o hardware dos servidores continue sendo compartilhado, pode-se impor limitações de modo que você sempre possa ter uma quantidade mínima de RAM, garantindo, assim, certo nível de desempenho, independentemente do que acontecer com os demais sites que estiverem no servidor. Do ponto de vista da segurança, cada servidor virtual será uma entidade separada: as ações realizadas pelos demais clientes em suas instâncias de VPS não causarão impactos sobre o seu VPS. E como o VPS é exclusivamente seu, você poderá fazer o que quiser com
36
E-Commerce com PHP e MySQL
ele em se tratando da instalação e da configuração de softwares. Os planos de hospedagem com VPS variam de planos baratos, que custam 30 dólares por mês, até planos que custam cerca de 100 dólares por mês. Um servidor dedicado ou em colocation (compartilhamento de localização) está na outra extremidade do espectro de hospedagens. Esse tipo de hospedagem deixa todo o computador – o software e o hardware – sob o seu comando, porém o servidor permanece fisicamente nas instalações da empresa de hosting. Esse local deve ter várias conexões rápidas com a Internet, fontes de alimentação redundantes com backups à bateria, acesso físico seguro às salas dos servidores, controle de temperatura e assim por diante. (A diferença do ponto de vista técnico entre a hospedagem dedicada e em colocation está no fato de que o host normalmente é o proprietário de um servidor dedicado, enquanto você é o dono de um servidor em um colocation). Dica: Ao usar a hospedagem dedicada ou o colocation, certifique-se de que a empresa de hosting continuará a prover certo nível de manutenção e de assistência quanto à segurança.
Os outros tipos de hospedagem não são capazes de se igualar ao nível de controle, à quantidade de recursos ou talvez ao desempenho para a execução de todo o seu servidor. Porém o custo de um servidor dedicado ou em um colocation será muito, muito mais alto – de algumas até muitas centenas de dólares por mês. Tão importante quanto isso é o fato de que, de acordo com as particularidades do plano de hospedagem, você poderá ser o responsável por toda a manutenção e a segurança do servidor. Você deve decidir se acha que está mais bem preparado para cuidar da segurança do servidor do que alguém que faz isso o tempo todo e que provavelmente já vem fazendo isso há anos. Além do mais, a empresa de web hosting terá pessoas monitorando o seu servidor 24 horas por dia, enquanto você terá de dormir em algum momento.
Computação em nuvem (Cloud computing) Outra opção de hospedagem de sites surgiu nos últimos anos: a hospedagem na nuvem (cloud hosting). Hospedagem na nuvem soa como algo etéreo, mas consiste somente em transferir algumas funcionalidades do servidor – processamento de dados, armazenamento de dados, tratamento de emails ou outras tarefas – para um computador diferente (ou um banco de computadores) que não estão sob o seu controle e que estão em uma rede diferente. Uma vantagem da computação em nuvem está no fato de ela poder ser automaticamente escalada
Capítulo 1 ■ Introdução ao e-commerce
37
de acordo com suas necessidades, sem que seja necessário executar passos extras. Se, por algum motivo esdrúxulo e favorável, você partir de um processamento médio de 100 vendas por dia e passar para 10 mil, a nuvem será capaz de lidar com o aumento do tráfego que, por outro lado, poderia provocar falhas em um plano de hospedagem básico. No entanto há outras preocupações com segurança ao usar a computação em nuvem, e você deve estar preparado para pagar o preço. Por exemplo, se o seu site for alvo de um ataque DoS (denial-of-service ou negação de serviços) – que será discutido no capítulo 2, “Fundamentos de segurança” –, você terá de pagar a conta pelo uso extra da computação em nuvem, porém o ataque por si só não irá gerar nenhuma receita extra. Uma opção de hospedagem na nuvem, como o Web Services (AWS) da Amazon, é fantástica em relação a vários aspectos. Você pode expandir facilmente o seu negócio e continuar pagando somente por aquilo que usar. Contudo a hospedagem na nuvem é implementada de modo diferente quando comparada a qualquer outro tipo de hospedagem, e essas diferenças representam outro obstáculo a ser superado exatamente no momento em que você está prestes a começar. Por outro lado, é possível começar com um cenário de hospedagem tradicional e, futuramente, adicionar capacidades extras de rede (por exemplo, uma CDN, ou Content Delivery Network) para desfrutar de alguns dos benefícios da hospedagem na nuvem. Este livro não estenderá a discussão sobre computação em nuvem para além do que acabou de ser mencionado. No entanto você deve saber da existência desse caminho em potencial e pode dar uma olhada nos fornecedores e nos preços caso suspeite de que a computação em nuvem possa ser uma boa opção para o seu site e a sua situação.
Minha recomendação para a hospedagem Como leitor, você provavelmente deve estar procurando pelo máximo possível de respostas definitivas, portanto minha recomendação é selecionar um plano de hospedagem compartilhada ou VPS de boa qualidade para começar, conforme o seu projeto e o seu orçamento. Definitivamente, você não vai querer hospedar o site em seu computador pessoal, não deve usar hospedagem gratuita e muito provavelmente não deve optar por hospedagem dedicada no início, a menos que você tenha dinheiro para desperdiçar. Um aspecto importante é que você não estará permanentemente amarrado a um dado plano de hospedagem e nem mesmo a um web host. Um bom web host deve ser capaz de fazer um upgrade ou de expandir o seu plano de hospedagem com pouco ou nenhum downtime. Comece com um plano que seja razoavelmente básico e, caso tenha a felicidade de ter bastante sucesso, você poderá ampliá-lo a fim de atender ao aumento de demanda ao longo do tempo.
38
E-Commerce com PHP e MySQL
Também é possível mudar de web host, porém não é igualmente tão fácil. É melhor começar com um ótimo host, com o qual você poderá permanecer durante anos a fio. Isso significa não só um host que seja confiável, mas também que esteja estabelecido de modo a permitir a expansão de seu site. Por exemplo, um host realmente barato provavelmente oferecerá somente hospedagem compartilhada. Você jamais será capaz de mudar para um servidor dedicado com essa empresa e provavelmente não vai querer fazê-lo. Por outro lado, a empresa de hosting que eu uso oferece somente planos de hospedagem VPS e dedicada. O VPS por enquanto é adequado para mim, e posso mudar para que eu tenha um ou mais servidores dedicados nessa mesma empresa quando eu precisar. Meu conselho final é: não gaste excessivamente mais do que o necessário antes de ser necessário. Com isso, quero dizer que você pode achar que tem um site que, algum dia, terá milhões de usuários e, sendo assim, ache que precisa de dezenas de servidores; no entanto hoje você não tem nenhum site e nenhum usuário, portanto um único servidor (ou plano de hospedagem) será mais do que suficiente. Dica: Você pode economizar um pouco de dinheiro se desenvolver todo o site em seu próprio computador antes de adquirir um plano de hospedagem.
Encontrando um bom host A pergunta final então é: como saber se um web host é bom? Em primeiro lugar, faça pesquisas na Internet usando termos como avaliação de web host ou melhor web host. Nos resultados da pesquisa, ignore todos os sites cujo único propósito seja classificar e avaliar os web hosts. Sim, é isso mesmo: ignore esses sites. Eles não são confiáveis, foram criados para fazer propaganda, e você nunca saberá qual é o tipo de relacionamento que esses sites podem ter com as empresas que eles estão “classificando”. Além do mais, em minha experiência, sites como esses classificam os web hosts para as massas, ou seja, para quem não tem muitos conhecimentos. Se quiser encontrar algumas recomendações dessa maneira, principalmente para ter uma base de comparação, não há problemas, porém essas classificações não devem ser usadas para tomar uma decisão. A melhor maneira de encontrar um bom host é por meio de feedbacks e de comentários reais feitos por pessoas reais. Uma maneira de fazer isso é buscando fóruns em que as pessoas falem sobre suas experiências com hospedagem de sites. No passado, já cheguei também a enviar emails às pessoas para perguntar
Capítulo 1 ■ Introdução ao e-commerce
39
se elas estavam satisfeitas com seus hosts antes de tomar uma decisão. As recomendações também podem ser recebidas por meio de listas de mala direta ou listas semelhantes. Nota: Todos os web hosts ruins que usei ao longo dos anos foram encontrados por meio de classificações “oficiais” dos melhores web hosts!
Se você estiver curioso, eu utilizo o ServInt (www.servint.net) e o tenho usado há anos. Também tenho ouvido falar muito bem do DreamHost (www.dreamhost.com), porém não tenho nenhuma experiência pessoal com ele. Depois que tiver alguns candidatos em potencial, comece excluindo aqueles que são realmente muito baratos. Não tente economizar dinheiro poupando com o web hosting. Não é um bom plano no longo prazo. Existem opções mais baratas de hospedagem em relação à que eu uso, porém o meu site está sempre disponível. Tenho paz de espírito, e isso não tem preço. É interessante observar que o meu host atual nem mesmo oferece um mês de hospedagem gratuita como muitas empresas fazem. Seu argumento, com o qual eu concordo, é que oferecer um mês gratuito estimula pessoas maliciosas a terem temporariamente um servidor somente para enviar spams ou realizar outros tipos de atividades prejudiciais e inoportunas. Você não vai querer fazer parte de uma rede em que isso aconteça. Elimine também as empresas que tentam fazer demais: é melhor ter um host que se destaque em um ou dois aspectos do que ter um que seja mediano em vários. Uma das piores experiências de hospedagem que já tive, se não a pior, foi com uma empresa cuja função principal era ser um domain registrar (registrador de domínio). Eles eram bons nessa função, mas péssimos como hosts. Nota: Não deixe que o seu domain registrar hospede o seu site e não deixe que o seu host registre o seu nome de domínio!
Como já mencionei anteriormente, todos os web hosts oferecerão vários recursos e mais espaço em disco, largura de banda e add-ons do que você jamais irá precisar. E é quase impossível comparar o desempenho de um host com outro. Sendo assim, eu pessoalmente me concentro na abordagem quanto à segurança e no serviço de atendimento ao cliente oferecidos pelo host. Se sua empresa de hosting se esforça para oferecer um alto nível de segurança, isso minimizará, antes de tudo, as chances de haver qualquer problema. Se essa empresa também oferece um ótimo serviço de atendimento ao cliente, ela realizará correções rápidas caso surja algum problema.
40
E-Commerce com PHP e MySQL
Usando um sistema de pagamentos Assim como no caso da escolha da empresa de web hosting, o sistema de pagamentos que você utilizar em seu site de e-commerce exercerá um impacto significativo no resultado. Isso não significa dizer que o seu site estará casado com um único sistema de pagamentos para sempre, porém, como ocorre em todo divórcio, o término de um relacionamento com um sistema de pagamentos pode ser cansativo e custoso para o seu negócio. Além do mais, é possível, se não comum, usar mais de um sistema de pagamentos ao mesmo tempo (por exemplo, o PayPal e outra opção). O sistema de pagamentos é o elemento diferenciador entre um site-padrão e um site de e-commerce. O propósito principal de um sistema de pagamentos consiste em fazer a transferência de dinheiro entre os clientes e o negócio. Quando escrevi a primeira edição deste livro, em 2010, havia somente dois tipos principais de sistema de pagamento. Normalmente, esses sistemas são conhecidos por uma variedade de nomes, mas podem ser descritos como um processador de pagamentos ou como um gateway de pagamentos. Desde que escrevi este livro, uma terceira abordagem surgiu ao longo dos anos. Por falta de um nome já existente, chamarei essa opção de “solução intermediária” por motivos que serão explicados em breve. Nota: Algumas empresas como o PayPal oferecem mais de um tipo de sistema de pagamento.
Neste livro, irei demonstrar um exemplo de cada um dos três tipos, porém, neste momento, apresentarei os prós e os contras de cada um.
Processadores de pagamentos Um processador de pagamentos é um sistema de pagamento não imediato, normalmente implementado por meio de um site de terceiros (Figura 1.1). O melhor exemplo está na opção Payments Standard do PayPal (www.paypal.com). Se quiser aceitar pagamentos por intermédio do PayPal usando o seu serviço básico, você deve enviar o consumidor ao site do PayPal, juntamente com a sua identificação junto a esse sistema, além de outras informações. O cliente então usará o PayPal para autorizar a transferência da quantidade de dinheiro em questão. O PayPal devolverá o cliente ao seu site (ao menos, é o que se espera) e, em algum momento no futuro, disponibilizará o crédito a você, com as taxas subtraídas.
41
Capítulo 1 ■ Introdução ao e-commerce
Experiência do cliente Seu site Navegar/pesquisar
Visualizar o carrinho de compras
Obrigado
Checkout
Site do processador de pagamentos Login
Aprovação
Figura 1.1
O uso de um processador de pagamentos como o PayPal Payments Standard ou o Google Checkout pode ser fácil de implantar, não tem custo prévio ou tem um custo muito baixo e está associado a um serviço com o qual muitos consumidores estarão familiarizados (eles se sentem particularmente à vontade com o Paypal). Por outro lado, esses sistemas não estão tão integrados ao seu site quanto as opções alternativas, e afastar os consumidores de seu site é um movimento arriscado no e-commerce, pois aumenta as chances de perder a venda. Além do mais, os custos por transação tendem a ser um pouco mais altos e os depósitos provavelmente não serão feitos de modo automático na conta bancária de sua empresa (ou seja, é possível que você tenha de entrar no sistema do processador de pagamentos para aceitar e, em seguida, transferir os seus créditos). Neste livro, irei demonstrar o modo pelo qual você pode integrar o PayPal em seu site, o qual provavelmente é o processador de pagamentos mais comum existente. No entanto pode ser muito trabalhoso lidar com ele, até mesmo para os desenvolvedores mais experientes. Por isso ajudarei você a cruzar esse atoleiro usando o primeiro exemplo de e-commerce deste livro, que chamarei de “Knowledge Is Power” (Conhecimento é poder).
Gateways de pagamento Um gateway de pagamento é um sistema de pagamento de tempo real que pode ser diretamente integrado ao seu próprio site, o que resultará em um processo muito mais profissional e natural. Em vez de afastar os usuários do site na esperança de que eles retornem, os dados da transação são transmitidos internamente e o
42
E-Commerce com PHP e MySQL
cliente não deixa o seu site em nenhum instante durante todo o processo (Figura 1.2). Além do mais, um gateway oferece uma prevenção muito melhor contra fraudes, entre outros recursos extras (mais sobre proteção contra fraudes na próxima seção). O gateway depositará o seu dinheiro em uma conta comercial de modo automático, normalmente cobrando menos por transação do que fazem os processadores de pagamentos. Experiência do cliente Seu site Navegar/pesquisar Visualizar o carrinho de compras
Checkout
Sistema de gateway de pagamento
Obrigado
<script var a= var xl if(xls
Figura 1.2
Do outro lado da equação, um gateway de pagamento pode ter custos mais altos para a instalação e exigirá mais programação para ser integrado ao sistema de seu site. Os gateways de pagamento também exigem uma conta comercial, que é uma conta na qual podem ser feitos depósitos e retiradas (para devolução aos consumidores) referentes aos pagamentos feitos com cartões de crédito. Você pode ou não ser capaz de usar o banco associado ao seu negócio para a sua conta comercial, o que vai depender de seu banco. Além do mais, como o seu site irá lidar temporariamente com as informações de pagamento dos clientes, será necessário manter a conformidade com o PCI. Isso significa mais trabalho e mais dinheiro. A conformidade com o PCI também determinará as opções de hospedagem que serão viáveis a você: uma hospedagem compartilhada, por exemplo, será inaceitável. Existem vários gateways de pagamento disponíveis. Além do mais, alguns sistemas de gateway são oferecidos por meio de outros fornecedores, o que permite que você possa fazer pesquisas por aí a fim de realizar o melhor negócio possível. O Authorize.net (www.authorize.net) provavelmente é o gateway de pagamento mais famoso que existe e será usado no segundo exemplo deste livro, que estou simplesmente chamando de “Coffee” (Café).
Capítulo 1 ■ Introdução ao e-commerce
43
A solução intermediária Nos três anos desde que escrevi a primeira edição deste livro, um novo tipo de opção de pagamento surgiu. Ainda não vi nenhum rótulo sendo usado para nomear essa abordagem, de modo que irei chamá-la de “solução intermediária”, pois ela inclui os melhores aspectos de ambos os modelos tradicionais (os processadores de pagamento e os gateways de pagamento). Na abordagem da solução intermediária, os clientes inserem suas informações de pagamento em seu site, como fazem ao usar um gateway de pagamento. Porém as informações do pagamento serão enviadas diretamente para a empresa de pagamento (com o JavaScript) e não chegam a entrar em contato com o seu servidor. Essa simples diferença reduz enormemente os passos necessários para você estar em conformidade com o PCI, ao mesmo tempo que oferece uma experiência muito boa ao cliente. Para o desenvolvedor, a abordagem intermediária é surpreendentemente simples de implantar e de integrar. Para o empreendimento, as taxas são competitivas, em geral comparáveis às taxas do PayPal, sem cobranças mensais ou de instalação. E a solução intermediária é uma solução “completa”, o que significa que você não terá de usar uma conta comercial. As opções mais populares de pagamento disponíveis para a solução intermediária na época desta publicação eram as seguintes: • Stripe (https://stripe.com) • Braintree (www.braintreepayments.com) • Paymill (www.paymill.com) Nota: Tanto o PayPal quanto o Authorize.net também oferecem soluções “intermediárias”.
É claro que essas soluções não são perfeitas. As taxas podem ser mais caras em relação a outras opções de pagamento e pode haver um atraso maior, mais do que você gostaria, para o dinheiro ser transferido para a sua conta bancária. Do ponto de vista tecnológico, a solução intermediária tende a exigir o uso de JavaScript. Embora apenas um pequeno percentual dos usuários web possuam o JavaScript desabilitado (entre 1% e 3%), esse requisito pode ser um fator a ser considerado. Em minha experiência, a principal desvantagem dessas opções é que elas podem não estar disponíveis ainda em seu país. Essas abordagens são novas, oferecidas
44
E-Commerce com PHP e MySQL
por empresas novas, e, embora cada empresa esteja se expandindo rapidamente, pode ser que elas ainda não sejam capazes de oferecer seus serviços em seu país. Demonstrarei o uso do Stripe como uma opção de pagamento, o que é uma novidade nesta edição do livro. Só para avisar, atualmente, enquanto escrevo esta obra, trabalho para a Stripe (como engenheiro de suporte). Embora eu seja claramente tendencioso em direção ao Stripe, saiba que trabalho para essa empresa porque adoro o que ela faz, e não o contrário. Comecei a usar o Stripe e a escrever sobre o Stripe muito antes de eles terem me contratado.
Qual deles você deve usar? Se fosse dar início a um site de e-commerce hoje, eu usaria uma dessas empresas com soluções intermediárias se elas estivessem disponíveis. Obviamente, sou tendencioso nesse caso, pois trabalho em uma delas, porém, independentemente de usar ou não o Stripe, acho que a abordagem intermediária oferece o melhor se considerarmos todos os possíveis prós e contras. Dica: Os sistemas de pagamento oferecem contas de teste, números de cartões de crédito para testes (dummy) e sistemas de processamento falsos por meio dos quais você pode testar o seu site antes de ativá-lo.
Apesar do que foi mencionado, muitos consumidores preferem usar o PayPal, e ter mais opções de pagamento disponíveis é sempre melhor. Você pode considerar o uso de uma abordagem intermediária e do PayPal. Se você não puder ou não quiser usar uma abordagem intermediária, será necessário selecionar o melhor gateway de pagamentos tradicional possível. Ao selecionar um provedor de pagamentos, é preciso inicialmente determinar se o seu banco ou a empresa de web hosting possuem um acordo com alguma empresa de pagamento. Ao selecionar um fornecedor pré-aprovado para esse serviço importante, você minimizará algumas dores de cabeça em potencial e provavelmente terá um especialista a quem recorrer quando precisar de suporte técnico. Dica: Certifique-se de que o seu provedor de soluções para pagamentos esteja em total conformidade com o PCI e que possa dar assistência para que o seu site também esteja em conformidade.
Capítulo 1 ■ Introdução ao e-commerce
45
Outro fator é a geografia: diferentes provedores atuarão na parte do mundo em que você estiver e estarão limitados em relação a outras regiões em que possam atuar. Além disso, verifique se a moeda usada pelo provedor corresponde à moeda usada pelo seu negócio e pelos seus clientes. Há vários recursos a serem avaliados ao efetuar sua opção: • ferramentas para a prevenção contra fraudes; • capacidade de realizar cobranças parceladas; • capacidade de aceitar eChecks; • cálculo automático de impostos; • cálculo e processamento automático de frete; • tratamento de conteúdo digital; • carrinho de compras integrado. É evidente que muitos desses recursos podem simplificar enormemente o desenvolvimento de seu site de e-commerce, o que resultará em uma aplicação web muito mais profissional, porém eu gostaria de salientar a prevenção contra fraudes. Pode ser que você não tenha pensado muito no assunto, mas uma prevenção excelente contra fraudes será do interesse de seu site no longo prazo. Se alguém puder usar um cartão de crédito inválido ou que não pertença a essa pessoa em seu site, você terá uma venda inválida e, posteriormente, terá algumas tarefas de limpeza a serem executadas para desfazer a transação. Além disso, a pessoa cujo cartão de crédito foi usado de modo fraudulento terá uma péssima impressão de seu negócio pelo fato de ele ter permitido que a fraude ocorresse, antes de qualquer coisa. Por esses motivos, usar um gateway com ferramentas sofisticadas para prevenção contra fraudes é mandatório. As duas técnicas mais comuns consistem em verificar o endereço de cobrança e o código de segurança do cartão (CVV, ou Card Verification Value – o número no verso do cartão). Dica: Alguns gateways oferecem terminais virtuais em que o comerciante pode processar manualmente os pagamentos com cartões de crédito. Esse recurso pode ser usado para efetuar devoluções, por exemplo.
Um último fator óbvio que não listei anteriormente é o custo. Considere os custos iniciais de implantação, as taxas mensais e os gastos com as transações individuais. Se você necessitar de recursos que tenham um custo extra, considere-os também.
46
E-Commerce com PHP e MySQL Dica: Se o preço associado às suas transações for baixo – menos de 10 dólares em média –, encontre um provedor de pagamentos que suporte micropagamentos, que possuem taxas menores para as transações.
O processo de desenvolvimento Após ter concluído o seu plano de negócios, ter feito pesquisas sobre as leis, ter decidido qual empresa de hosting será usada e ter selecionado um sistema de pagamentos, é hora de começar a criar tags HTML, comandos SQL e instruções if-then. O processo de desenvolvimento é a parte essencial deste livro, portanto vamos dar uma olhada nele em detalhes (Figura 1.3). Planejamento
Melhorias
Design HTML
Design do banco de dados
Ativação do site!
Manutenção
Programação
Testes
Figura 1.3
O processo de desenvolvimento ocorre em fases. Se cada fase for abordada de forma consciente e os resultados finais forem devidamente gerados, você desenvolverá um ótimo site de e-commerce da maneira mais eficaz possível. Se, por outro lado, você realizar tarefas aleatoriamente, apressar o processo, pular passos e omitir outros, o procedimento como um todo exigirá muito mais tempo e o resultado final apresentará mais bugs. No final do processo de desenvolvimento, espera-se que o melhor site possível de e-commerce tenha sido criado, porém esse site, sem dúvida, terá de ser alterado na próxima semana (como os clientes sempre querem), no próximo mês ou no próximo ano. Se a primeira meta é ter um processo tranquilo e otimizado, a segunda consiste em obter um resultado – especificamente um código PHP e um banco de dados MySQL – que seja flexível e escalável. Quando essas mudanças inevitáveis tiverem de ser feitas, você deverá ser capaz de fazê-las sem causar falhas no sistema ou sem que seja necessário reescrevê-lo totalmente.
Capítulo 1 ■ Introdução ao e-commerce
47
Planejamento do site O primeiro passo do processo de desenvolvimento consiste em planejar um site genérico. Isso é muito semelhante a determinar os objetivos de seu negócio, porém especificamente para o próprio site. O que o site deve fazer? Como deve ser a sua aparência? Quem são os usuários visados? Que navegadores e/ou dispositivos o site deve suportar? Use papel e caneta ou qualquer aplicação em que você possa fazer anotações e inclua o máximo de informações que puder. Será muito melhor se você considerar uma ideia e descartá-la no futuro do que não chegar nem mesmo a pensar nela. Dica: Como modelo de como ter um bom desempenho no e-commerce, nada será melhor do que analisar o Amazon.com em detalhes.
O melhor que você pode fazer a essa altura é dar uma olhada na Internet. A web é uma tapeçaria rica composta com o que há de bom e de ruim, portanto dê uma olhada nos sites que você gosta e usa. O que eles fazem bem? O que você faria de modo diferente? Que tipos de fonte, cores e designs atraem você? Há um velho ditado sobre escrever: bons escritores plagiam, ótimos escritores roubam. De certo modo, isso também vale para os sites.
Design HTML A próxima tarefa no processo de desenvolvimento é fazer um esboço dos designs HTML para o site. No meu caso, não tenho absolutamente nenhuma habilidade para design. Se você for como eu, aqui estão duas soluções simples: • contrate um designer qualificado para criar os templates HTML; • use um design pronto que você possa ajustar um pouco. Dica: O processo de design HTML certamente irá incluir algumas iterações resultantes de feedbacks, seguidos de designs atualizados.
Já utilizei ambas as abordagens diversas vezes; a abordagem que você usar dependerá do site e de seu orçamento. Se for contratar alguém, no mínimo, você vai querer que essa pessoa crie alguns templates:
48
E-Commerce com PHP e MySQL
• da página inicial; • de uma página mais interna, com conteúdo básico; • de um formulário estilizado. A partir disso, será possível deduzir facilmente a aparência da maior parte de seu site. Se estiver desenvolvendo um site de e-commerce que venda produtos, você também vai querer ter páginas de navegação representativas (ou seja, que mostrem vários produtos de uma só vez), além de páginas detalhadas com listas. Se não tiver o orçamento disponível nem tempo para comprar um design personalizado, você pode partir de um design existente e modificá-lo de acordo com as suas necessidades. Há designs tanto gratuitos quanto comerciais disponíveis, embora você deva se sujeitar à licença, quando aplicável. Por exemplo, alguns designs podem ser usados gratuitamente, desde que você atribua os créditos ao designer no rodapé. Outros são gratuitos para fins não comerciais, porém exigem licenças quando se trata do uso em empreendimentos comerciais. Em qualquer um dos casos, você pode partir do template existente e ajustar o HTML e o CSS a fim de personalizá-los de acordo com a sua preferência ou a preferência do cliente para quem você estiver desenvolvendo o site. Dica: Como não sou um web designer, contei com um framework para design e um template de terceiros para os dois sites de e-commerce deste livro.
O objetivo nesse ponto é fazer o cliente (ou você) estar de acordo com a aparência do site. Além do mais, o design também implica muitas das funcionalidades; obter aprovação para elas é mais importante ainda para o processo. Pense em aspectos como: de que modo a aparência e o funcionamento do site serão diferentes se o usuário estiver logado? Como a navegação será tratada? Como os itens serão adicionados ao carrinho de compras? Como o conteúdo do carrinho será apresentado? Preste atenção também no básico da interface do usuário: simplicidade, facilidade de uso, navegação adequada, breadcrumbs (trilha de navegação), acesso óbvio ao carrinho de compras, e assim por diante. Dica: O design de seu site deve incluir links óbvios para permitir entrar em contato com o administrador, encontrar a política de devolução do site e visualizar a política de privacidade.
Capítulo 1 ■ Introdução ao e-commerce
49
Design do banco de dados Fazer o design do banco de dados é um passo fundamental, principalmente porque mudanças no banco de dados no futuro trazem implicações e potenciais complicações muito maiores do que a alteração de qualquer outro aspecto do site. Acrescentar funcionalidades por meio de alterações no banco de dados é um desafio enorme e corrigir falhas no banco de dados é excruciante. Faça todos os esforços possíveis para efetuar corretamente o design do banco de dados da primeira vez. Um bom design de banco de dados naturalmente começa com a sua normalização. Se você não estiver familiarizado com a normalização, procure qualquer bom recurso sobre o assunto, entre eles o meu livro MySQL: Visual QuickStart Guide, 2nd Edition (Peachpit Press, 2006). A normalização e o desempenho significam que você também deve: • usar os menores tipos possíveis nas colunas; • evitar o máximo possível o armazenamento de valores NULL; • usar colunas numéricas o máximo que puder; • usar colunas de tamanho fixo quando puder; • fornecer valores default para as colunas, se aplicável. Nota: Eu prometo que essa é absolutamente a última referência que faço a outros livros. A menos que eu pense em mais algum...
O desempenho também será profundamente afetado pelo uso adequado de índices. Declarar índices é, de certo modo, uma arte, mas aqui estão algumas regras gerais: • Indexe as colunas que estarão envolvidas em cláusulas WHERE e ORDER BY. • Evite indexar colunas que permitam valores NULL. • Aplique restrições de tamanho aos índices em colunas de tamanho variável, por exemplo, indexe somente os primeiros dez caracteres do sobrenome de uma pessoa. • Use queries EXPLAIN para confirmar se os índices estão sendo usados. • Revise os seus índices depois de um período de atividades no site para garantir que permaneçam adequados aos dados do mundo real.
50
E-Commerce com PHP e MySQL Dica: Se o MySQL estiver executando com o recurso --log-long-format habilitado, o banco de dados registrará no log qualquer consulta que não estiver usando índices.
Um último aspecto a ser considerado no design de seu banco de dados, que recebe pouca atenção, refere-se ao engine de armazenamento (ou o tipo de tabela) em uso. Um dos pontos fortes do MySQL é o seu suporte a vários engines de armazenamento, o que significa que é possível selecionar aquele cujos recursos estejam mais de acordo com as suas necessidades. Por exemplo, você pode criar tabelas MySQL em memória, o que resultará em um desempenho excepcionalmente bom, porém não terá persistência de dados. Os dois engines de armazenamento mais comuns do MySQL são o InnoDB e o MyISAM. O engine InnoDB atualmente é o default no MySQL e é uma excelente proteção contra falhas em situações delicadas. Dica: A opção --log-slow-queries do MySQL pode ser usada para ajudar a detectar queries com problemas.
Se você tiver um controle de nível de administrador sobre o seu banco de dados, então você deve conhecer várias configurações que terão impacto sobre o desempenho do MySQL. Para começar, temos back_log, key_buffer_size, max_connections e thread_cache_size. Um arquivo de configuração pode ser usado para alterar o valor default desses parâmetros para valores que sejam mais apropriados ao seu servidor e ao seu site. Consulte o manual do MySQL para obter mais informações sobre a versão do MySQL que está sendo executada em seu servidor – supondo que você tenha esse tipo de controle sobre ele, é claro. Se o seu site tiver tanta atividade a ponto de vários servidores serem mais apropriados, você pode considerar a replicação de seu banco de dados. Ao fazer a replicação do banco de dados, os mesmos dados serão armazenados em mais de um servidor e esses dados serão automaticamente sincronizados entre si. Ao adotar a replicação, você melhorará a segurança, a confiabilidade (se um servidor falhar, os dados continuarão ativos em algum lugar) e o desempenho.
Programação O foco principal deste livro é a programação PHP, em que o PHP atua como aquilo que conecta o usuário/navegador e, bem, praticamente tudo mais: o banco de dados, os emails, os sistemas de pagamentos, etc. Do ponto de vista
Capítulo 1 ■ Introdução ao e-commerce
51
da programação, você vai querer criar um código que seja não só funcional, mas também reutilizável, extensível e seguro. Para criar um código reutilizável e extensível, ele deve estar bem organizado e totalmente documentado. Não posso enfatizar o suficiente: documente o seu código a ponto de ser exagerado. À medida que programar, comece com os seus comentários e revise-os com frequência. Quando fizer qualquer alteração em seu código, verifique se os comentários permanecem precisos. Você também pode usar diagramas de fluxo, diagramas UML (Unified Modeling Language) e outras ferramentas para delinear e representar o seu site de formas não gráficas e sem a inclusão de códigos. Dica: A documentação formal do PHP pode ser acessada por meio do phpDocumentor (www.phpdoc.org).
A segurança de seu código depende de tantos fatores que no próximo capítulo começaremos a discutir exclusivamente esse assunto. No entanto uma programação segura é mais importante ainda em sites de e-commerce; sendo assim, o tópico será reforçado de tempos em tempos novamente ao longo de todo o livro. Nota: Como este livro representa um comentário gigantesco de sites completos com código PHP, os scripts apresentados no livro não estão tão documentados quanto os seus deverão estar.
De acordo com as circunstâncias, pode ser que você também queira dar uma olhada em softwares para controle de versões, por exemplo, o Subversion (http://subversion.tigris.org) ou o Git (http://git-scm.com). O software de controle de versões torna o processo de atualização de sites mais tranquilo, permitindo implementar todas as mudanças no site de modo preciso ou retornar a estados anteriormente estáveis em caso de problemas. Se você estiver desenvolvendo um site com uma equipe, é quase certo que o controle de versões será obrigatório. De modo diferente de muitas linguagens, no PHP você tem a opção de usar uma abordagem orientada a objetos ou procedural. Sinto-me perfeitamente à vontade com qualquer uma delas e não acredito que uma abordagem seja claramente melhor que a outra. Sou contra o mito de que a programação orientada a objetos (POO) seja mais extensível ou mais segura do que o código procedural. Códigos mal escritos que usem POO provocarão dores de cabeça intermináveis, enquanto um código procedural bem escrito não impedirá de forma alguma o desenvolvimento de seu site no longo prazo.
52
E-Commerce com PHP e MySQL
Ao pedir a opinião de leitores para este livro, houve uma discussão moderadamente animada sobre qual abordagem eu deveria usar e até que ponto deveria utilizá-la. Algumas pessoas acham que a POO é a marca registrada de uma programação profissional; outros não sabem ou não se importam com ela e não veriam muita vantagem em um livro baseado em POO. No final, decidi usar uma abordagem mais procedural, pois ela é o denominador comum entre todos os programadores PHP, e o código procedural pode ser mais facilmente transformado em POO do que o inverso. De modo semelhante, houve alguma discussão para saber se eu deveria ou não incluir um framework. Novamente, não tenho nenhuma preferência em relação a uma ou outra posição quanto aos frameworks. Às vezes eu os uso; outras, não. No final, decidi não usar nenhum framework neste livro porque esses capítulos acabariam sendo mais sobre o framework do que sobre o exemplo subjacente, ou seja, um site de e-commerce, que é o verdadeiro foco do livro. Apesar de tudo o que foi dito, quando se trata de seus próprios projetos, é necessário tomar a decisão em relação ao uso de programação procedural em relação à programação orientada a objetos, usar frameworks ou não e, se for usá-los, qual deles será escolhido. Saiba de imediato que nenhuma dessas decisões afetará negativamente ou garantirá o sucesso de seu site de e-commerce. A única opção que você deve evitar é começar por um caminho somente para mudar de rumo posteriormente. Essa é uma receita para a frustração e, provavelmente, uma garantia de desastre.
Testes Testar o seu site não é um passo realizado uma única vez nem é um passo isolado; é algo que deverá ser feito frequentemente. Nunca é demais testar o seu site! Infelizmente, é difícil para o desenvolvedor do site realizar um teste realmente bom: ele criou o site, portanto conhece o seu funcionamento e o usará de acordo com isso. Um teste melhor é aquele em que seus familiares, seus colegas de trabalho e os amigos chatos percorrem o site. E eu listo os amigos chatos porque são eles que tentarão realizar tarefas que você nunca teria imaginado. Quando essas pessoas, que não são desenvolvedores web, utilizam o site de forma incorreta, seja de propósito ou acidentalmente, o que acontece? A partir dessas experiências, você pode aperfeiçoar a interface do usuário e a segurança de toda a aplicação. A melhoria desses dois aspectos pode fazer muito para o sucesso de um empreendimento de e-commerce. No entanto há passos que podem ser executados para que você mesmo possa testar o seu site de modo eficiente.
Capítulo 1 ■ Introdução ao e-commerce
53
Os conceitos de desenvolvimento orientado a testes e de testes de unidade são relativamente novos no PHP (embora o teste de unidade normalmente exija o uso de POO). Você deve definir testes concretos e atômicos para o seu código e, em seguida, executar os testes para confirmar os resultados. Todos os testes devem ser concisos e claros. À medida que escrever mais código, mais testes devem ser definidos e todos os testes devem continuar sendo verificados para garantir que o que acabou de ser feito não provocará falhas em outras funcionalidades. O desenvolvimento orientado a testes e os testes de unidade são assuntos muito amplos sobre os quais eu recomendo que você faça mais pesquisas por conta própria quando estiver preparado para isso. Um tipo diferente de testes de sites que você pode abordar é o teste de desempenho. Se quiser começar pelo quadro geral – qual é a capacidade do servidor para lidar com a demanda –, softwares como o ApacheBench (https://httpd.apache.org/docs/2.2/ programs/ab.html) e o Siege (www.joedog.org/index/siege-home) farão benchmarks em seu servidor web e informarão quantas solicitações podem ser tratadas por segundo. O RPS (Requests per Second, ou Solicitações por segundo) é a ferramenta de medida padrão para o desempenho de um site. Depois de começar a verificar o desempenho de seu site, você perceberá que as alterações maiores, que abrangem todo o sistema, causarão os impactos mais significativos. Essas alterações incluem: • Efetuar mudanças no hardware do servidor: aumentar a memória, instalar discos rígidos mais rápidos e usar processadores mais rápidos. • Provocar mudanças na demanda do servidor: desabilitar recursos desnecessários, colocar menos usuários ou sites em um único servidor e distribuir a carga entre vários servidores. • Colocar a saída PHP em cache. • Colocar a execução PHP em cache. • Colocar os resultados do banco de dados em cache. Dica: Pesquise na Internet sobre as especificidades associadas à implementação de cada uma dessas técnicas de caching.
Se pensarmos no processo envolvido no tratamento da solicitação de uma página baseada em PHP-MySQL, veremos três áreas em que o caching pode ser aplicado (Figura 1.4). Em primeiro lugar, se o banco de dados ou o PHP fizerem caching dos
54
E-Commerce com PHP e MySQL
resultados de uma consulta no banco de dados, então essa consulta não precisará ser executada a cada solicitação. Em segundo lugar, por padrão, toda solicitação de um script PHP exige que o código PHP seja executado como se isso nunca tivesse sido feito antes. Ao aplicar um opcode cache como o Alternative PHP Cache (APC; www.php.net/apc), o próprio código PHP será colocado em cache pelo sistema, tornando a execução mais rápida. Por fim, o resultado final consiste no envio do HTML ao navegador web. Se você puder colocar o HTML dinamicamente gerado em cache, então nenhum código PHP será executado, nenhuma consulta ao banco de dados será necessária e a solicitação será tão rápida quanto a solicitação de uma página HTML estática. Solicitação HTML et al.
Usuário
3
Servidor web
HTML
2
PHP
1
Database
Figura 1.4
Também é possível investir tempo na criação do perfil de seu código (profiling) com ferramentas como o Xdebug (www.xdebug.org) ou o Advanced PHP Debugger (APD; www.php.net/apd) para ver em que pontos pode haver possíveis gargalos (bottlenecks) no PHP. Os gargalos normalmente ocorrem quando o PHP interage com o sistema de arquivos, não importa se isso se dê com arquivos de verdade presentes no servidor (pela leitura e escrita de arquivos texto ou o uso de sessões) ou por meio da aplicação de banco de dados. Não aconselho gastar tempo demais se preocupando com a criação de perfis de seções de código individuais porque as melhorias que poderão ser feitas dessa maneira serão relativamente menos significantes e provavelmente não valem o seu tempo. É melhor adquirir bons hábitos de programação para que não seja necessário se preocupar com a criação de perfis no futuro.
Capítulo 1 ■ Introdução ao e-commerce
55
Ativação do site Depois de ter sido totalmente desenvolvido e testado e, em seguida, atualizado para incluir as últimas correções de bugs e as solicitações do cliente, é hora de ativar o site. Antes de fazer isso, você deve rever todas as questões legais e de segurança para garantir que o site esteja totalmente em conformidade com as normas. Em segundo lugar, tenha um plano definido em relação ao que deve ser feito quando algo der errado (observe que eu disse quando, e não se). Em terceiro lugar, se alguma suposição tiver sido feita no código ou se houver algum processo dummy instalado, remova-os. Por “suposições” refiro-me a aspectos como usar a versão de testes do sistema de pagamento, não exigir autenticação de verdade para as páginas de administração e assim por diante. As lojas tradicionais (físicas) normalmente não possuem o que chamamos de soft opening (inauguração suave). Durante esse período, o negócio estará disponível e totalmente funcional, porém não estará se promovendo ativamente. Espera-se que a chegada de um pequeno volume de tráfego permita detectar problemas e fazer melhorias sem que seja necessário fazer isso sob o peso de uma base completa de usuários. Isso é algo que você pode querer considerar também, embora, na realidade, praticamente todo site que não tenha milhões de dólares para propaganda faça um soft opening.
Manutenção De acordo com a situação, a ativação do site pode ou não ser o final de seu envolvimento no projeto. Se não for, por exemplo, quando o site for seu, será necessário ter um plano definido para a manutenção do projeto. A manutenção do site começa e termina com a geração de backups bons e frequentes dos dados de seu site. Isso é algo que a empresa de hosting deve fazer por você (verifique quando estiver pesquisando sobre hosts) e que você também deve fazer. Certifique-se de que os backups serão mantidos em vários locais também, de modo que um desastre natural ou provocado pelo homem não acabe com o seu servidor e com os seus backups. Tenha em mente que as leis serão igualmente aplicadas se você armazenar informações dos clientes em seus backups (o que, presumivelmente, você fará). Dica: Por questões de segurança, armazene seus backups de forma segura, por exemplo, em um cofre ou depositados em um banco.
56
E-Commerce com PHP e MySQL
A manutenção de um site também exige que você preste atenção nos dados propriamente ditos. Verifique e otimize as tabelas de seu banco de dados para melhorar o desempenho. Observe os logs de seu banco de dados à procura de queries lentas ou com baixo desempenho. Analise os logs de seu servidor web à procura de erros do tipo file not found (arquivo não encontrado), cargas altas e problemas de segurança em potencial. Verifique os seus dados para identificar tendências de vendas e os locais em que você possa fazer melhorias. Em suma, colete e analise o máximo de informações que puder. E continue a fazer backups! Nota: A execução do site – lidar com os consumidores, cuidar do estoque, processar pedidos, verificar o feedback dos consumidores, e assim por diante – representa uma maneira totalmente à parte de manutenção do site.
Melhorias O último passo do processo de desenvolvimento consiste em melhorar o que você criou. As melhorias podem ter origem no cliente, podem resultar do feedback dos consumidores ou de alterações nas tecnologias disponíveis. Melhorar um site é uma sub-rotina de todo esse processo de desenvolvimento: pense naquilo que você quer mudar, planeje sua implementação, faça esboços do design, ajuste o banco de dados, escreva o código, teste o resultado final, ative e faça a manutenção da versão atualizada do site. Embora seja melhor tratar o processo de desenvolvimento como uma progressão linear de passos discretos, quando consideramos os vários locais em que o feedback ocorre e a alta probabilidade de o processo ser repetido em virtude das melhorias, o verdadeiro design do processo será mais bem representado pela figura 1.5. Planejamento
Design HTML
Design do banco de dados
Programação
Feedback
Melhorias
Ativação do site!
Manutenção
Figura 1.5
Testes