Ecommerce, mais simples do que parece

67
mais simples do que parece mais simples do que parece E-commerce E-commerce Michael Granados - @dgmike Michael Granados - @dgmike

Transcript of Ecommerce, mais simples do que parece

Page 1: Ecommerce, mais simples do que parece

mais simples do que parecemais simples do que pareceE-commerceE-commerce

Michael Granados - @dgmikeMichael Granados - @dgmike

Page 2: Ecommerce, mais simples do que parece

Então... você tem uma idéia, mas...

Por onde começar?

Page 3: Ecommerce, mais simples do que parece

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

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

Uma idéia!

e-commerce

Page 6: Ecommerce, mais simples do que parece

E-commerce pronto?

● Magento● Joomla + VirtueMart● WordPress + WP-shopping-cart● Django + Sathmo● Loja Locaweb● OsCommerce● PretaShop● ...

Page 7: Ecommerce, mais simples do que parece

O ambienteO ambiente

Page 8: Ecommerce, mais simples do que parece

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

Controle de versão – existem vários

● Subversion● Bazaar● Git● Mercuial● CVS

Page 10: Ecommerce, mais simples do que parece

Como funciona?

Page 11: Ecommerce, mais simples do que parece

Como funciona?

FTPFTP

Page 12: Ecommerce, mais simples do que parece

Como funciona?

FTPFTPSkywalker

UPLOAD

Page 13: Ecommerce, mais simples do que parece

Como funciona?

FTPFTP

Page 14: Ecommerce, mais simples do que parece

Como funciona?

FTPFTP

Corrige BUG online

Page 15: Ecommerce, mais simples do que parece

Como funciona?

FTPFTP Darth Vader

UPLOAD

Page 16: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

Page 17: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

Skywalker Darth Vader

1

Page 18: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

clone

1

1 1

Page 19: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

push

2

2

1

Page 20: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

push2

2

1

Page 21: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

2

2

1

Page 22: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

2

2

2

pull

Page 23: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO

push2

3

3

Page 24: Ecommerce, mais simples do que parece

Como funciona?

REPOSITÓRIO SERVIDOR

clone/pull

push

Page 25: Ecommerce, mais simples do que parece

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

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

Frameworks - exemplos

● Zend Framework● CodeIgniter● CakePHP● Synphony● Spaghetti*● VórticePHP

Page 28: Ecommerce, mais simples do que parece

Proposta, um microframework

● Público: github● Organização: MVC – Model, View, Control● Gerenciamento de URLs

Page 29: Ecommerce, mais simples do que parece

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

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

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

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

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

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

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

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

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

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

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

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

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

O resultado!

class Inicio {

function get($attr1, $attr2, $attr3) {

// seu controller

}

function post() { // opcional

}

}

Page 43: Ecommerce, mais simples do que parece

O resultado!

class Inicio { # controller

function get($attr1, $attr2, $attr3) {

// seu controller

}

function post() { // opcional

}

}

Page 44: Ecommerce, mais simples do que parece

O resultado!

class Inicio {

function get($attr1, $attr2, $attr3) {

// seu controller

}

function post() { // opcional

}

}

Page 45: Ecommerce, mais simples do que parece

O resultado!

class Inicio {

function get($attr1, $attr2, $attr3) {

// seu controller

}

function post() { // opcional

}

}

Page 46: Ecommerce, mais simples do que parece

Template: aproveitando os métodos mágicos

Page 47: Ecommerce, mais simples do que parece

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

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

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

PagSeguro: como funciona?

Page 51: Ecommerce, mais simples do que parece

PagSeguro: como funciona?

Page 52: Ecommerce, mais simples do que parece

Pague com o PagSeguro

PagSeguro: como funciona?

Page 53: Ecommerce, mais simples do que parece

Pague com o PagSeguro

POST

PagSeguro: como funciona?

Page 54: Ecommerce, mais simples do que parece

Usuário - POST

E o tal do retorno?

Page 55: Ecommerce, mais simples do que parece

Usuário - POST

Usuário - GET

E o tal do retorno?

Page 56: Ecommerce, mais simples do que parece

Usuário - POST

Usuário - GET

Robô POST

E o tal do retorno?

Page 57: Ecommerce, mais simples do que parece

Usuário - POST

Usuário - GET

Robô POST

Bad GuyPOST?

E o tal do retorno?

Page 58: Ecommerce, mais simples do que parece

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

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

#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

#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

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

#comofas Retorno automático

Use o cod_referencia

Page 64: Ecommerce, mais simples do que parece

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

Links

http://dgmike.com.br/dgeco

http://slideshare.com/dgmike

http://github.com/dgmike/dgeco

Page 66: Ecommerce, mais simples do que parece

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

Perguntas?!

http://meadiciona.com/dgmike

http://formspring.me/dgmike

@dgmike