Ecommerce, mais simples do que parece

  • 1,498 views
Uploaded on

A criação de uma loja virtual não é uma tarefa realizada apenas por desenvolvedores experientes e com um currículo extenso. Michael, que desenvolve, junto com o UOL, pacotes e soluções para a …

A criação de uma loja virtual não é uma tarefa realizada apenas por desenvolvedores experientes e com um currículo extenso. Michael, que desenvolve, junto com o UOL, pacotes e soluções para a plataforma de pagamento digital PagSeguro vai mostrar isso ao vivo e a cores.

Palestra gratuita: E-commerce: mais fácil do que parece
Dia 12 de junho, das 10h às 13h
Local: Faculdade Impacta

More in: Technology , Design
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Muito boa apresentação.

    Salomão Filho
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
1,498
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
32
Comments
1
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. E-commerce mais simples do que parece Michael Granados - @dgmike
  • 2. Então... você tem uma idéia, mas... Por onde começar?
  • 3. Seja rápido Quanto mais tempo demorar para começar sua startup mais você estará jogando dinheiro fora! Inicie seu negócio enquanto antes, seu lucro só virá depois que você se lançar definitivamente Desenvolvimento ágil
  • 4. Programador preguiçoso? O seu trabalho é deixar com que as pessoas façam menos esforços Inspire-se em você mesmo
  • 5. Uma idéia! e-commerce
  • 6. E-commerce pronto? ● Magento ● Joomla + VirtueMart ● WordPress + WP-shopping-cart ● Django + Sathmo ● Loja Locaweb ● OsCommerce ● PretaShop ● ...
  • 7. O ambiente
  • 8. O ambiente ● Sistema de controle de versão - GIT ● Linguagem forte e madura – PHP ● Banco de dados – MySQL ● Servidor – Apache
  • 9. Controle de versão – existem vários ● Subversion ● Bazaar ● Git ● Mercuial ● CVS
  • 10. Como funciona?
  • 11. Como funciona? FTP
  • 12. Como funciona? FTP Skywalker UPLOAD
  • 13. Como funciona? FTP
  • 14. Como funciona? Corrige BUG online FTP
  • 15. Como funciona? FTP Darth Vader UPLOAD
  • 16. Como funciona? REPOSITÓRIO
  • 17. Como funciona? REPOSITÓRIO 1 Skywalker Darth Vader
  • 18. Como funciona? REPOSITÓRIO 1 clone 1 1
  • 19. Como funciona? REPOSITÓRIO 2 push 2 1
  • 20. Como funciona? REPOSITÓRIO 2 push 2 1
  • 21. Como funciona? REPOSITÓRIO 2 2 1
  • 22. Como funciona? REPOSITÓRIO 2 pull 2 2
  • 23. Como funciona? REPOSITÓRIO 3 push 2 3
  • 24. Como funciona? REPOSITÓRIO SERVIDOR clone/pull push
  • 25. Framework – vantagens ● Métodos mágicos que auxiliam no desenvolvimento ● Regras que ajudam a manter a organização dos arquivos – geralmente MVC ● Gama de interfaces para bancos de dados ● Helpers que libertam-te de escrever código ● Scripts que geram boa parte do código ● Gerenciamento de cache – deixando a aplicação mais rápida
  • 26. Framework – desvantagens ● Você precisa aprender uma nova lingua ● O fato dos scripts gerarem boa parte do código interfere em sua criação ● Regras que nem sempre se aplicam a seu negócio ● Criação de demasiados arquivos que nem sempre são necessários
  • 27. Frameworks - exemplos ● Zend Framework ● CodeIgniter ● CakePHP ● Synphony ● Spaghetti* ● VórticePHP
  • 28. Proposta, um microframework ● Público: github ● Organização: MVC – Model, View, Control ● Gerenciamento de URLs
  • 29. O que o framework terá ● Manipular Banco de Dados ● Métodos mágicos definidos por você ● Reaproveitamento de código ● URLs amigáveis ● Segurança ● Fácil de entender ● Simples de fazer manutenção
  • 30. M de MVC – Model Iremos usar PDO (PHP Database Object) como base para o Model ● Suporte para vários bancos de dados ● Nativo desde o PHP5.2 ● Extensível ● Orientado a Objetos ● Fácil de usar
  • 31. M de MVC – Model Vários bancos, apenas um objeto new PDO(‘mysql:dbname=banco;host=localhost’, ‘usuario’, ‘senha’); new PDO(‘sqlite:/opt/database/mydb.sq3’);
  • 32. Helper – pau pra toda obra! function error() { die('Internal Server Error.'); } function url($uri) { return BASE_URL.$uri; } function valor($numero) { return "R$ ".number_format($numero); }
  • 33. Mapeamento de URLs – URLs amigáveis $urls = array( # 'Expressão regular' => “Controller” '^/?$' => 'Inicio', '^/categoria/(d+)/?$' => 'Categoria', '^/produto/(d+)/?$' => 'Produto', );
  • 34. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 35. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 36. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 37. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 38. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 39. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 40. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 41. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class = new $class; call_user_func_array(array($class, $method), $atributos); die(); } } } error();
  • 42. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 43. O resultado! class Inicio { # controller function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 44. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 45. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 46. Template: aproveitando os métodos mágicos
  • 47. Adicionando um produto class Adiciona { public function get($id, $ajax = false) { $con =& get_con(); if (!$con->produto($id)) { error(); } if (isset($_SESSION['carrinho'][$id])) { $_SESSION['carrinho'][$id]++; } else { $_SESSION['carrinho'][$id] = 1; } header('Location: '.url('carrinho')); } }
  • 48. E-commerce pronto?! Para que o e-commerce esteja pronto de fato, falta apenas um detalhe: o comprador deve comprar Vamos por a mão na massa!!!
  • 49. Formas de pagamento Boleto bancário Cartão de crédito Cartões de débito Transação entre contas... ... ou usar o PagSeguro
  • 50. PagSeguro: como funciona?
  • 51. PagSeguro: como funciona?
  • 52. PagSeguro: como funciona? Pague com o PagSeguro
  • 53. PagSeguro: como funciona? Pague com o POST PagSeguro
  • 54. E o tal do retorno? Usuário - POST
  • 55. E o tal do retorno? Usuário - POST Usuário - GET
  • 56. E o tal do retorno? Usuário - POST Usuário - GET Robô POST
  • 57. E o tal do retorno? Usuário - POST Usuário - GET Bad Guy POST? Robô POST
  • 58. E o tal do retorno? Usuário - POST Usuário - GET POST – TOKEN Bad Guy POST? Robô POST VERIFICADO/FALSO
  • 59. Na pática, use a biblioteca A Visie possui uma ótima biblioteca que gera o formulário de forma simples http://visie.com.br/pagseguro/php.php http://github.com/pagseguro
  • 60. #comofas? require_once('pagseguro/pgs.php'); $cod = uniqid(true); $pgs = new Pgs(array( 'email_cobranca' => 'mike@visie.com.br', 'tipo' => 'CP', 'ref_transacao' => $cod, ));
  • 61. #comofas? foreach ($_SESSION['carrinho'] as $id => $qtd) { $produto = $con->produto($id); $pgs->adicionar(array( 'id' => $produto->id, 'descricao' => $produto->nome, 'valor' => $produto->valor, 'quantidade' => $qtd, )); }
  • 62. Melhoria: brincando com JS $pgs->mostra(array( 'open_form' => false, 'show_submit' => false )); document.forms[0].submit();
  • 63. #comofas Retorno automático Use o cod_referencia
  • 64. Passo final: Publicando! Com o controle de versão e um servidor bom, tudo fica mais fácil! Faça o clone do projeto no servidor Import do banco de dados Divulgue!
  • 65. Links http://dgmike.com.br/dgeco http://slideshare.com/dgmike http://github.com/dgmike/dgeco
  • 66. Referências http://php.net/ http://br.php.net/pdo http://github.com/ http://learn.github.com/ http://visie.com.br/pagseguro http://www.generatedata.com/ http://tinyurl.com/mkmu58 (W3C: HTML5)
  • 67. Perguntas?! http://meadiciona.com/dgmike http://formspring.me/dgmike @dgmike