Download - Ecommerce, mais simples do que parece
![Page 1: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/1.jpg)
mais simples do que parecemais simples do que pareceE-commerceE-commerce
Michael Granados - @dgmikeMichael Granados - @dgmike
![Page 2: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/2.jpg)
Então... você tem uma idéia, mas...
Por onde começar?
![Page 3: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/3.jpg)
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
![Page 4: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/4.jpg)
Programador preguiçoso?
O seu trabalho é deixar com que as pessoas façam menos esforços
Inspire-se em você mesmo
![Page 5: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/5.jpg)
Uma idéia!
e-commerce
![Page 6: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/6.jpg)
E-commerce pronto?
● Magento● Joomla + VirtueMart● WordPress + WP-shopping-cart● Django + Sathmo● Loja Locaweb● OsCommerce● PretaShop● ...
![Page 7: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/7.jpg)
O ambienteO ambiente
![Page 8: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/8.jpg)
O ambiente
● Sistema de controle de versão - GIT● Linguagem forte e madura – PHP● Banco de dados – MySQL● Servidor – Apache
![Page 9: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/9.jpg)
Controle de versão – existem vários
● Subversion● Bazaar● Git● Mercuial● CVS
![Page 10: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/10.jpg)
Como funciona?
![Page 11: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/11.jpg)
Como funciona?
FTPFTP
![Page 12: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/12.jpg)
Como funciona?
FTPFTPSkywalker
UPLOAD
![Page 13: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/13.jpg)
Como funciona?
FTPFTP
![Page 14: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/14.jpg)
Como funciona?
FTPFTP
Corrige BUG online
![Page 15: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/15.jpg)
Como funciona?
FTPFTP Darth Vader
UPLOAD
![Page 16: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/16.jpg)
Como funciona?
REPOSITÓRIO
![Page 17: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/17.jpg)
Como funciona?
REPOSITÓRIO
Skywalker Darth Vader
1
![Page 18: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/18.jpg)
Como funciona?
REPOSITÓRIO
clone
1
1 1
![Page 19: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/19.jpg)
Como funciona?
REPOSITÓRIO
push
2
2
1
![Page 20: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/20.jpg)
Como funciona?
REPOSITÓRIO
push2
2
1
![Page 21: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/21.jpg)
Como funciona?
REPOSITÓRIO
2
2
1
![Page 22: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/22.jpg)
Como funciona?
REPOSITÓRIO
2
2
2
pull
![Page 23: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/23.jpg)
Como funciona?
REPOSITÓRIO
push2
3
3
![Page 24: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/24.jpg)
Como funciona?
REPOSITÓRIO SERVIDOR
clone/pull
push
![Page 25: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/25.jpg)
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
![Page 26: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/26.jpg)
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
![Page 27: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/27.jpg)
Frameworks - exemplos
● Zend Framework● CodeIgniter● CakePHP● Synphony● Spaghetti*● VórticePHP
![Page 28: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/28.jpg)
Proposta, um microframework
● Público: github● Organização: MVC – Model, View, Control● Gerenciamento de URLs
![Page 29: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/29.jpg)
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
![Page 30: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/30.jpg)
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
![Page 31: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/31.jpg)
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’);
![Page 32: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/32.jpg)
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);
}
![Page 33: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/33.jpg)
Mapeamento de URLs – URLs amigáveis
$urls = array(
# 'Expressão regular' => “Controller”
'^/?$' => 'Inicio',
'^/categoria/(\d+)/?$' => 'Categoria',
'^/produto/(\d+)/?$' => 'Produto',
);
![Page 34: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/34.jpg)
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();
![Page 35: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/35.jpg)
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();
![Page 36: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/36.jpg)
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();
![Page 37: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/37.jpg)
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();
![Page 38: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/38.jpg)
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();
![Page 39: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/39.jpg)
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();
![Page 40: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/40.jpg)
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();
![Page 41: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/41.jpg)
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();
![Page 42: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/42.jpg)
O resultado!
class Inicio {
function get($attr1, $attr2, $attr3) {
// seu controller
}
function post() { // opcional
}
}
![Page 43: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/43.jpg)
O resultado!
class Inicio { # controller
function get($attr1, $attr2, $attr3) {
// seu controller
}
function post() { // opcional
}
}
![Page 44: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/44.jpg)
O resultado!
class Inicio {
function get($attr1, $attr2, $attr3) {
// seu controller
}
function post() { // opcional
}
}
![Page 45: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/45.jpg)
O resultado!
class Inicio {
function get($attr1, $attr2, $attr3) {
// seu controller
}
function post() { // opcional
}
}
![Page 46: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/46.jpg)
Template: aproveitando os métodos mágicos
![Page 47: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/47.jpg)
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'));
}
}
![Page 48: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/48.jpg)
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!!!
![Page 49: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/49.jpg)
Formas de pagamento
Boleto bancário
Cartão de crédito
Cartões de débito
Transação entre contas...
... ou usar o PagSeguro
![Page 50: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/50.jpg)
PagSeguro: como funciona?
![Page 51: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/51.jpg)
PagSeguro: como funciona?
![Page 52: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/52.jpg)
Pague com o PagSeguro
PagSeguro: como funciona?
![Page 53: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/53.jpg)
Pague com o PagSeguro
POST
PagSeguro: como funciona?
![Page 54: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/54.jpg)
Usuário - POST
E o tal do retorno?
![Page 55: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/55.jpg)
Usuário - POST
Usuário - GET
E o tal do retorno?
![Page 56: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/56.jpg)
Usuário - POST
Usuário - GET
Robô POST
E o tal do retorno?
![Page 57: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/57.jpg)
Usuário - POST
Usuário - GET
Robô POST
Bad GuyPOST?
E o tal do retorno?
![Page 58: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/58.jpg)
Usuário - POST
Usuário - GET
Robô POST
POST – TOKEN
VERIFICADO/FALSO
E o tal do retorno?
Bad GuyPOST?
![Page 59: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/59.jpg)
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
![Page 60: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/60.jpg)
#comofas?
require_once('pagseguro/pgs.php');
$cod = uniqid(true);
$pgs = new Pgs(array(
'email_cobranca' => '[email protected]',
'tipo' => 'CP',
'ref_transacao' => $cod,
));
![Page 61: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/61.jpg)
#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,
));
}
![Page 62: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/62.jpg)
Melhoria: brincando com JS
$pgs->mostra(array(
'open_form' => false,
'show_submit' => false
));
document.forms[0].submit();
![Page 63: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/63.jpg)
#comofas Retorno automático
Use o cod_referencia
![Page 64: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/64.jpg)
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!
![Page 65: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/65.jpg)
Links
http://dgmike.com.br/dgeco
http://slideshare.com/dgmike
http://github.com/dgmike/dgeco
![Page 66: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/66.jpg)
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)
![Page 67: Ecommerce, mais simples do que parece](https://reader035.vdocuments.mx/reader035/viewer/2022062419/5590b0ce1a28abef058b460d/html5/thumbnails/67.jpg)
Perguntas?!
http://meadiciona.com/dgmike
http://formspring.me/dgmike
@dgmike