como desenvolver uma loja com PagSeguro Da argila ao forte: Michael Granados - @dgmike
Então... você tem uma idéia, mas... Por onde começar?
Seja rápido Quanto mais tempo demorar para começar sua  startup  mais você estará jogando dinheiro fora! Inicie seu negóci...
Programador preguiçoso? O seu trabalho é deixar com que as pessoas façam menos esforços Inspire-se em você mesmo
Uma idéia! e-commerce
E-commerce pronto? <ul><li>Magento
Joomla + VirtueMart
WordPress + WP-shopping-cart
Django + Sathmo
Loja Locaweb
OsCommerce
PretaShop
... </li></ul>
O ambiente
O ambiente <ul><li>Sistema de controle de versão - Subversion
Linguagem forte e madura – PHP
Banco de dados – MySQL
Servidor – Apache </li></ul>
Controle de versão – existem vários <ul><li>Subversion
Bazaar
Git
Mercuial
CVS </li></ul>
Como funciona?
Como funciona? FTP
Como funciona? FTP Skywalker UPLOAD
Como funciona? FTP
Como funciona? FTP Corrige BUG online
Como funciona? FTP Darth Vader UPLOAD
Como funciona? REPOSITÓRIO
Como funciona? REPOSITÓRIO Skywalker Darth Vader 1
Como funciona? REPOSITÓRIO CHECKOUT 1 1 1
Como funciona? REPOSITÓRIO COMMIT 2 2 1
Como funciona? REPOSITÓRIO COMMIT 2 2 1
Como funciona? REPOSITÓRIO 2 2 1
Como funciona? REPOSITÓRIO UPDATE 2 2 2
Como funciona? REPOSITÓRIO COMMIT 2 3 3
Como funciona? REPOSITÓRIO SERVIDOR CHECKOUT / UPDATE COMMITS
Framework – vantagens <ul><li>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 </li></ul>
Framework – desvantagens <ul><li>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 </li></ul>
Frameworks - exemplos <ul><li>Zend Framework
CodeIgniter
CakePHP
Synphony
Spaghetti* </li></ul>
Proposta, um microframework <ul><li>Um nome: Ice-Baby
Organização: MVC – Model, View, Control
Gerenciamento de URLs </li></ul>
M de MVC – Model Iremos usar PDO (PHP Database Object) como base para o Model <ul><li>Suporte para vários bancos de dados
Nativo desde o PHP5.2
Extensível
Orientado a Objetos
Fácil de usar </li></ul>
Foco! O que o framework terá <ul><li>Manipular Banco de Dados
Métodos mágicos definidos por você
Reaproveitamento de código
URLs amigáveis
Segurança
Fácil de entender
Upcoming SlideShare
Loading in …5
×

Da argila ao forte: como desenvolver uma loja com PagSeguro

4,070 views

Published on

A partir de um arquivo em branco é possível escrever algumas linhas de código e criar uma loja virtual completa. Com 500 linhas de código em PHP foi desenvolvido um e-commerce com gateway de pagamento em menos de um dia.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,070
On SlideShare
0
From Embeds
0
Number of Embeds
2,087
Actions
Shares
0
Downloads
66
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Da argila ao forte: como desenvolver uma loja com PagSeguro

  1. 1. como desenvolver uma loja com PagSeguro Da argila ao forte: Michael Granados - @dgmike
  2. 2. Então... você tem uma idéia, mas... Por onde começar?
  3. 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. 4. Programador preguiçoso? O seu trabalho é deixar com que as pessoas façam menos esforços Inspire-se em você mesmo
  5. 5. Uma idéia! e-commerce
  6. 6. E-commerce pronto? <ul><li>Magento
  7. 7. Joomla + VirtueMart
  8. 8. WordPress + WP-shopping-cart
  9. 9. Django + Sathmo
  10. 10. Loja Locaweb
  11. 11. OsCommerce
  12. 12. PretaShop
  13. 13. ... </li></ul>
  14. 14. O ambiente
  15. 15. O ambiente <ul><li>Sistema de controle de versão - Subversion
  16. 16. Linguagem forte e madura – PHP
  17. 17. Banco de dados – MySQL
  18. 18. Servidor – Apache </li></ul>
  19. 19. Controle de versão – existem vários <ul><li>Subversion
  20. 20. Bazaar
  21. 21. Git
  22. 22. Mercuial
  23. 23. CVS </li></ul>
  24. 24. Como funciona?
  25. 25. Como funciona? FTP
  26. 26. Como funciona? FTP Skywalker UPLOAD
  27. 27. Como funciona? FTP
  28. 28. Como funciona? FTP Corrige BUG online
  29. 29. Como funciona? FTP Darth Vader UPLOAD
  30. 30. Como funciona? REPOSITÓRIO
  31. 31. Como funciona? REPOSITÓRIO Skywalker Darth Vader 1
  32. 32. Como funciona? REPOSITÓRIO CHECKOUT 1 1 1
  33. 33. Como funciona? REPOSITÓRIO COMMIT 2 2 1
  34. 34. Como funciona? REPOSITÓRIO COMMIT 2 2 1
  35. 35. Como funciona? REPOSITÓRIO 2 2 1
  36. 36. Como funciona? REPOSITÓRIO UPDATE 2 2 2
  37. 37. Como funciona? REPOSITÓRIO COMMIT 2 3 3
  38. 38. Como funciona? REPOSITÓRIO SERVIDOR CHECKOUT / UPDATE COMMITS
  39. 39. Framework – vantagens <ul><li>Métodos mágicos que auxiliam no desenvolvimento
  40. 40. Regras que ajudam a manter a organização dos arquivos – geralmente MVC
  41. 41. Gama de interfaces para bancos de dados
  42. 42. Helpers que libertam-te de escrever código
  43. 43. Scripts que geram boa parte do código
  44. 44. Gerenciamento de cache – deixando a aplicação mais rápida </li></ul>
  45. 45. Framework – desvantagens <ul><li>Você precisa aprender uma nova lingua
  46. 46. O fato dos scripts gerarem boa parte do código interfere em sua criação
  47. 47. Regras que nem sempre se aplicam a seu negócio
  48. 48. Criação de demasiados arquivos que nem sempre são necessários </li></ul>
  49. 49. Frameworks - exemplos <ul><li>Zend Framework
  50. 50. CodeIgniter
  51. 51. CakePHP
  52. 52. Synphony
  53. 53. Spaghetti* </li></ul>
  54. 54. Proposta, um microframework <ul><li>Um nome: Ice-Baby
  55. 55. Organização: MVC – Model, View, Control
  56. 56. Gerenciamento de URLs </li></ul>
  57. 57. M de MVC – Model Iremos usar PDO (PHP Database Object) como base para o Model <ul><li>Suporte para vários bancos de dados
  58. 58. Nativo desde o PHP5.2
  59. 59. Extensível
  60. 60. Orientado a Objetos
  61. 61. Fácil de usar </li></ul>
  62. 62. Foco! O que o framework terá <ul><li>Manipular Banco de Dados
  63. 63. Métodos mágicos definidos por você
  64. 64. Reaproveitamento de código
  65. 65. URLs amigáveis
  66. 66. Segurança
  67. 67. Fácil de entender
  68. 68. Simples de fazer manutenção </li></ul>
  69. 69. 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’);
  70. 70. Helper – pau pra toda obra! function error() { die('Internal Server Error.'); } function url($uri) { return BASE_URL.$uri; } function valor($numero) { return &quot;R$ &quot;.number_format($numero); }
  71. 71. Mapeamento de URLs – URLs amigáveis $urls = array( # 'Expressão regular' => “Controller” '^/?$' => 'Inicio', '^/categoria/(d+)/?$' => 'Categoria', '^/produto/(d+)/?$' => 'Produto', );
  72. 72. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  73. 73. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ( $urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  74. 74. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@ $regexp @&quot;, $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();
  75. 75. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  76. 76. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  77. 77. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class ) { if (preg_match(&quot;@$regexp@&quot;, $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();
  78. 78. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  79. 79. Abracadabra: a mágica! $url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match(&quot;@$regexp@&quot;, $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();
  80. 80. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  81. 81. O resultado! class Inicio { # controller function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  82. 82. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  83. 83. O resultado! class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  84. 84. Template: aproveitando os métodos mágicos
  85. 85. 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')); } }
  86. 86. 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!!!
  87. 87. Formas de pagamento Boleto bancário Cartão de crédito Cartões de débito Transação entre contas... ... ou usar o PagSeguro
  88. 88. PagSeguro: como funciona?
  89. 89. PagSeguro: como funciona?
  90. 90. Pague com o PagSeguro PagSeguro: como funciona?
  91. 91. Pague com o PagSeguro PagSeguro: como funciona? POST
  92. 92. E o tal do retorno? Usuário - POST
  93. 93. E o tal do retorno? Usuário - POST Usuário - GET
  94. 94. E o tal do retorno? Usuário - POST Usuário - GET Robô POST
  95. 95. E o tal do retorno? Usuário - POST Usuário - GET Robô POST Bad Guy POST?
  96. 96. E o tal do retorno? VERIFICADO/FALSO Usuário - POST Usuário - GET Robô POST POST – TOKEN Bad Guy POST?
  97. 97. 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
  98. 98. #comofas? require_once('pagseguro/pgs.php'); $cod = uniqid(true); $pgs = new Pgs(array( 'email_cobranca' => 'mike@visie.com.br', 'tipo' => 'CP', 'ref_transacao' => $cod, ));
  99. 99. #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, )); }
  100. 100. Melhoria: brincando com JS $pgs->mostra(array( 'open_form' => false, 'show_submit' => false )); document.forms[0].submit();
  101. 101. #comofas Retorno automático Use o cod_referencia
  102. 102. Passo final: Publicando! Com o controle de versão e um servidor bom, tudo fica mais fácil! Faça o checkout do projeto no servidor Import do banco de dados Divulgue!
  103. 103. Links http://dgmike.com.br/lojasimples http://dgmike.com.br/lojasimples-trac http://slideshare.com/dgmike
  104. 104. Referências http://php.net/ http://br.php.net/pdo http://subversion.tigris.org/ http://trac.edgewall.org/ http://visie.com.br/pagseguro http://www.generatedata.com/ http://tinyurl.com/mkmu58 (W3C: HTML5)
  105. 105. Perguntas?! http://meadiciona.com/dgmike

×