da argila ao forte: como desenvolver uma loja com pagseguro

Download Da argila ao forte: como desenvolver uma loja com PagSeguro

If you can't read please download the document

Upload: michael-castillo-granados

Post on 16-Apr-2017

4.069 views

Category:

Technology


0 download

TRANSCRIPT

como desenvolver uma loja com PagSeguro

Da argila ao forte:

Michael Granados - @dgmike

Ento... voc tem uma idia, mas...

Por onde comear?

Seja rpido

Quanto mais tempo demorar para comear sua startup mais voc estar jogando dinheiro fora!

Inicie seu negcio enquanto antes, seu lucro s vir depois que voc se lanar definitivamente

Desenvolvimento gil

Programador preguioso?

O seu trabalho deixar com que as pessoas faam menos esforos

Inspire-se em voc mesmo

Uma idia!

e-commerce

E-commerce pronto?

Magento

Joomla + VirtueMart

WordPress + WP-shopping-cart

Django + Sathmo

Loja Locaweb

OsCommerce

PretaShop

...

O ambiente

O ambiente

Sistema de controle de verso - Subversion

Linguagem forte e madura PHP

Banco de dados MySQL

Servidor Apache

Controle de verso existem vrios

Subversion

Bazaar

Git

Mercuial

CVS

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?

REPOSITRIO

Como funciona?

REPOSITRIO

Skywalker

Darth Vader

1

Como funciona?

REPOSITRIO

CHECKOUT

1

1

1

Como funciona?

REPOSITRIO

COMMIT

2

2

1

Como funciona?

REPOSITRIO

COMMIT

2

2

1

Como funciona?

REPOSITRIO

2

2

1

Como funciona?

REPOSITRIO

2

2

2

UPDATE

Como funciona?

REPOSITRIO

COMMIT

2

3

3

Como funciona?

REPOSITRIO

SERVIDOR

CHECKOUT /UPDATE

COMMITS

Framework vantagens

Mtodos mgicos que auxiliam no desenvolvimento

Regras que ajudam a manter a organizao dos arquivos geralmente MVC

Gama de interfaces para bancos de dados

Helpers que libertam-te de escrever cdigo

Scripts que geram boa parte do cdigo

Gerenciamento de cache deixando a aplicao mais rpida

Framework desvantagens

Voc precisa aprender uma nova lingua

O fato dos scripts gerarem boa parte do cdigo interfere em sua criao

Regras que nem sempre se aplicam a seu negcio

Criao de demasiados arquivos que nem sempre so necessrios

Frameworks - exemplos

Zend Framework

CodeIgniter

CakePHP

Synphony

Spaghetti*

Proposta, um microframework

Um nome: Ice-Baby

Organizao: MVC Model, View, Control

Gerenciamento de URLs

M de MVC Model

Iremos usar PDO (PHP Database Object) como base para o Model

Suporte para vrios bancos de dados

Nativo desde o PHP5.2

Extensvel

Orientado a Objetos

Fcil de usar

Foco! O que o framework ter

Manipular Banco de Dados

Mtodos mgicos definidos por voc

Reaproveitamento de cdigo

URLs amigveis

Segurana

Fcil de entender

Simples de fazer manuteno

M de MVC Model

Vrios bancos, apenas um objeto

new PDO(mysql:dbname=banco;host=localhost,usuario, senha);

new PDO(sqlite:/opt/database/mydb.sq3);

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);}

Mapeamento de URLs URLs amigveis

$urls = array( # 'Expresso regular' => Controller '^/?$' => 'Inicio', '^/categoria/(\d+)/?$' => 'Categoria', '^/produto/(\d+)/?$' => 'Produto',);

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

Abracadabra: a mgica!

$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();

O resultado!

class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional

}}

O resultado!

class Inicio { # controller function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional

}}

O resultado!

class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional

}}

O resultado!

class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional

}}

Template: aproveitando os mtodos mgicos

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')); }}

E-commerce pronto?!

Para que o e-commerce esteja pronto de fato, falta apenas um detalhe: o comprador deve comprar

Vamos por a mo na massa!!!

Formas de pagamento

Boleto bancrioCarto de crditoCartes de dbitoTransao entre contas...

... ou usar o PagSeguro

PagSeguro: como funciona?

PagSeguro: como funciona?

Pague com o PagSeguroPagSeguro: como funciona?

Pague com o PagSeguro

POSTPagSeguro: como funciona?

Usurio - POST

E o tal do retorno?

Usurio - POST

Usurio - GET

E o tal do retorno?

Usurio - POST

Usurio - GETRob POST

E o tal do retorno?

Usurio - POST

Usurio - GETRob POST

Bad GuyPOST?

E o tal do retorno?

Usurio - POST

Usurio - GETRob POST

POST TOKENVERIFICADO/FALSO

E o tal do retorno?

Bad GuyPOST?

Na ptica, use a biblioteca

A Visie possui uma tima biblioteca que gera o formulrio de forma simples

http://visie.com.br/pagseguro/php.php

#comofas?

require_once('pagseguro/pgs.php');$cod = uniqid(true);$pgs = new Pgs(array( 'email_cobranca' => '[email protected]', 'tipo' => 'CP', 'ref_transacao' => $cod,));

#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, ));}

Melhoria: brincando com JS

$pgs->mostra(array( 'open_form' => false, 'show_submit' => false));

document.forms[0].submit();

#comofas Retorno automtico

Use o cod_referencia

Passo final: Publicando!

Com o controle de verso e um servidor bom, tudo fica mais fcil!Faa o checkout do projeto no servidorImport do banco de dadosDivulgue!

Links

http://dgmike.com.br/lojasimpleshttp://dgmike.com.br/lojasimples-trachttp://slideshare.com/dgmike

Referncias

http://php.net/http://br.php.net/pdohttp://subversion.tigris.org/http://trac.edgewall.org/http://visie.com.br/pagsegurohttp://www.generatedata.com/http://tinyurl.com/mkmu58 (W3C: HTML5)

Perguntas?!

http://meadiciona.com/dgmike