Pagamento Automбtico via PagSeguro (PHP+MySQL) -
CaioTJF - 10.05.2016
Neste tуpico irei ensinar como receber notificaзхes de pagamentos em uma pбgina PHP e enviar para um banco de dados MySQL, utilizando como exemplo o PagSeguro, pode nгo ser o melhor tutorial possнvel pois estou comeзando a estudar PHP agora, mas o importante й que funciona, se alguйm souber melhorias que eu posso fazer no cуdigo, basta postaR aqui que eu atualizarei.
Requisitos: Conta PagSeguro e uma hospedagem que tenha suporte para MySQL e PHP
Explicaзгo: Depois que vocк configura uma URL de retorno, toda vez que um pagamento tiver seu status alterado o PagSeguro envia dados informando no formato POST para a URL de retorno.
O que iremos fazer nesse tutorial й, criar uma pбgina de retorno e armazenar os dados enviados pelo PagSeguro em um banco de dados MySQL.
Entгo vamos lб! Primeiramente, entre no site do PagSeguro, Clique em "Painel", "Minha Conta" e depois vб em "Preferкncias" e "Integraзхes". Nessa pбgina, habilite a notificaзгo de transaзгo e gere um token. Se vocк souber como irб ficar sua URL, jб pode definir ela, exemplo:
http://www.meusite.com/pagseguro.php
Apуs isso, clique em "Confira informaзхes dessa funcionalidade." e ative a URL de retorno e novamente coloque uma URL, nesse tutorial a pбgina serб chamada de "pagseguro.php" como citei no exemplo acima.
Ps.: Anote o Token.
Agora crie um banco de dados no MySQL chamado "pagseguro", e rode o cуdigo abaixo:
Код:
CREATE TABLE `pagseguro`
(
`Code` VARCHAR(128) NOT NULL,
`Cash` INT(11) NOT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
Feito isso, iremos criar nossa pбgina que se chamarб "pagseguro.php", ela que irб receber a notificaзгo do PagSeguro e enviarб para o banco de dados:
http://pastebin.com/zGC1AzHv
Obs.: Altere os dados de conexгo ao MySQL e a definiзгo do TOKEN.
Em seguida, upe a pбgina "pagseguro.php" na hospedagem.
Com tudo isso feito, basta vocк gerar um link de pagamento, eu tenho este:
http://pastebin.com/WQf9sYdv
Obs.: Altere os campos e-mail e token.
Importante notar, o ID do item (produto) nesse caso й muito importante, й nele que o script classificarб o produto, por exemplo, nesse script, o produto nъmero 1 vale 1000 cash.
O ID do item й classificado no arquivo XML, na chave <id>. No pastebin do link de pagamento vocк irб encontrar.
Esse script tem uma ideia de que os players digitem o cуdigo de transaзгo dentro do jogo para receber seu cash. O resto й com vocк =P
Vocк pode encontrar todos os campos enviados pelo PagSeguro
aqui.
Crйditos:
CaioTJF
http://sounoob.com.br/
Respuesta: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
OverKiller - 10.05.2016
Boa, @UP
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
pWesley - 10.05.2016
Velho, eu te amo cara ... fazia um tempo que eu nгo mexia com PHP, tinha que revirar a mente pra poder tentar fazer isso mas ... tu me salvou agora cara. Muito obrigado por compartilhar.
@EDIT
Dб pra implementar informaзхes nгo dб, tipo adicionar mais informaзхes da compra pelo pagseguro?
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
CaioTJF - 10.05.2016
Quote:
Originally Posted by pWesley
Velho, eu te amo cara ... fazia um tempo que eu nгo mexia com PHP, tinha que revirar a mente pra poder tentar fazer isso mas ... tu me salvou agora cara. Muito obrigado por compartilhar.
@EDIT
Dб pra implementar informaзхes nгo dб, tipo adicionar mais informaзхes da compra pelo pagseguro?
|
Sim dб.
https://pagseguro.uol.com.br/v2/guia...tos.html#!rmcl
Nessa pбgina contйm todo tipo de informaзгo que pode ser enviada por vocк.
E aqui vocк pode vк todos os POST que o PagSeguro envia de volta:
https://pagseguro.uol.com.br/desenvo...de_dados.jhtml
Por exemplo, vocк deseja pegar o nome de quem comprou, basta getar no $_POST:
$_POST['CliNome'];
Algumas coisas vocк precisa enviar pelo XML, tipo a referencia, nгo testei todos.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
SkyneTSAMP - 10.05.2016
Obrigado Amigo
!
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
Dolby - 10.05.2016
Bom, vocк pediu para supor melhorias, entгo vamos lб:
PHP код:
if ($result == "VERIFICADO")
{
if($Status == "Aprovado")
{
if($Produto_ID == "1") $Cash = 1000;
SEMPRE que for comparar uma variбvel com uma string no PHP, use strict equals (===).
Certo, mas qual a diferenзa?
A equalidade do PHP (==) nгo leva em conta o tipo de dado. Ou seja, se vocк fizer
PHP код:
$nVar = 0;
if($nVar == "caio")
A condicional vai ser verdadeira. Porque o interpretador vai converter a string
caio para inteiro, entгo ela assume o valor neutro, 0. Jб atй mesmo fiz uma mega postagem aqui falando sobre isso.
O strict equals leva em consideraзгo o tipo de dado, logo a condiзгo abaixo serб falsa:
PHP код:
$nVar = 0;
if($nVar === "caio")
Aliбs,
$Produto_ID realmente й uma string?
Vocк usou mysqli_* e isto й уtimo! Mas seu cуdigo й vulnerбvel a Inject, posso entrar e me autenticar como pagante. Dк uma lida:
How to Prevent
No mais ficou bom.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
ipsLuan - 10.05.2016
Muito bom!
@
Dolby, a maioria aqui sу quer saber se baixar um GameMode pirata, ninguйm vai saber usar Inject. Mas, isso й uma falha grave, deveria ser counterada (gнria de LOL).
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) - Kamper - 10.05.2016
Quote:
Originally Posted by Dolby
Bom, vocк pediu para supor melhorias, entгo vamos lб:
PHP код:
if ($result == "VERIFICADO")
{
if($Status == "Aprovado")
{
if($Produto_ID == "1") $Cash = 1000;
SEMPRE que for comparar uma variбvel com uma string no PHP, use strict equals (===).
Certo, mas qual a diferenзa?
A equalidade do PHP (==) nгo leva em conta o tipo de dado. Ou seja, se vocк fizer
PHP код:
$nVar = 0;
if($nVar == "caio")
A condicional vai ser verdadeira. Porque o interpretador vai converter a string caio para inteiro, entгo ela assume o valor neutro, 0. Jб atй mesmo fiz uma mega postagem aqui falando sobre isso.
O strict equals leva em consideraзгo o tipo de dado, logo a condiзгo abaixo serб falsa:
PHP код:
$nVar = 0;
if($nVar === "caio")
Aliбs, $Produto_ID realmente й uma string?
Vocк usou mysqli_* e isto й уtimo! Mas seu cуdigo й vulnerбvel a Inject, posso entrar e me autenticar como pagante. Dк uma lida: How to Prevent
No mais ficou bom.
|
MySQLi por si jб escapa os caracteres. Nгo estб vulnerбvel a SQL Injection.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
CaioTJF - 10.05.2016
Thanks Dolby, vou dar um update.
Mas minha dъvida й, como ocorreria o SQL Injection nesse caso?
Todos os dados POST enviado pra page, o script envia para o site do PagSeguro e ele retorna se й verdadeiro ou nгo, eu sу envio pro MySQL.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
NegoEnsina - 10.05.2016
Quote:
Originally Posted by Dolby
Bom, vocк pediu para supor melhorias, entгo vamos lб:
PHP код:
if ($result == "VERIFICADO")
{
if($Status == "Aprovado")
{
if($Produto_ID == "1") $Cash = 1000;
SEMPRE que for comparar uma variбvel com uma string no PHP, use strict equals (===).
Certo, mas qual a diferenзa?
A equalidade do PHP (==) nгo leva em conta o tipo de dado. Ou seja, se vocк fizer
PHP код:
$nVar = 0;
if($nVar == "caio")
A condicional vai ser verdadeira. Porque o interpretador vai converter a string caio para inteiro, entгo ela assume o valor neutro, 0. Jб atй mesmo fiz uma mega postagem aqui falando sobre isso.
O strict equals leva em consideraзгo o tipo de dado, logo a condiзгo abaixo serб falsa:
PHP код:
$nVar = 0;
if($nVar === "caio")
Aliбs, $Produto_ID realmente й uma string?
Vocк usou mysqli_* e isto й уtimo! Mas seu cуdigo й vulnerбvel a Inject, posso entrar e me autenticar como pagante. Dк uma lida: How to Prevent
No mais ficou bom.
|
Tu nem sabe do que falas, filha da puta burro.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
_Play_ - 10.05.2016
Mt bom, faz anos que vбrias pessoas aqui do fуrum procuram um sistema desse tipo
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
Eiss - 11.05.2016
Quote:
Originally Posted by Kamper
MySQLi por si jб escapa os caracteres. Nгo estб vulnerбvel a SQL Injection.
|
Nгo й bem assim que funciona, usando
escape nos caracteres nгo quer dizer que esta 100% protegido contra Sql Injection, muito pelo contrбrio NГO estб, por isso digo e repito NUNCA, eu disse NUNCA use essas tйcnicas de escape nos caracteres.
Quote:
Originally Posted by CaioTJF
Thanks Dolby, vou dar um update.
Mas minha dъvida й, como ocorreria o SQL Injection nesse caso?
Todos os dados POST enviado pra page, o script envia para o site do PagSeguro e ele retorna se й verdadeiro ou nгo, eu sу envio pro MySQL.
|
Neste caso й mais
DIFНCIL que ocorra pois como vocк esta trabalhando com retorno automбtico a query sу sera executada quando receber as informaзхes retornadas pelo PagSeguro.
Mas leve em conta oque o
Dolby disse, Seu cуdigo й sim vulnerбvel a Inject. Uma das melhores maneiras de prevenir o Sql Injection й usando Prepared Statements.
Mas como assim?
Em consultas usando Prepared Statements os parвmetros nгo sгo enviados diretamente na consulta. Eles sгo enviados em um “pacote” separado ao
SGBD.
Alйm disso vocк pode configurar uma consulta uma vez e ter a capacidade de executб-lo vбrias vezes, ligando diferentes conjuntos de dados ao usar apenas uma consulta.
OBS: Usando Prepared Statements nгo й possнvel fazer a injeзгo de SQL convencional.
Se protegendo:
O PHP possui alguns drivers para conexгo com o banco de dados MySQL.
Recomendo a vocк
Mysqli e
PDO, porйm na maioria dos meus projetos faзo o uso do
PDO.
Mas isso й por gosto mesmo, escolha o que possui a sintaxe que mais lhe agrade.
Segue abaixo um exemplo do seu cуdigo, porйm usando Prepared Statements.
PHP код:
// Mysqli
function inserir($code, $cash) {
if($stmt = $conn->prepare("INSERT INTO pagseguro (Code, Cash) VALUES (?, ?)")) {
// Passando os valores para o parвmetro como inteiro
$stmt->bind_param("ii", $code, $cash);
// Executa a instruзгo
$stmt->execute();
// Fechando as instruзгo
$stmt->close();
}
}
Parabйns pela iniciativa, qualquer coisa estou por aн. Abrss.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
Hax0rlib - 11.05.2016
- sua lуgica, estб boa! mas lhe garanto que se fizer uso de PDO, vai estar mais seguro estude um pouco aqui ..
http://php.net/manual/pt_BR/book.pdo.php
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
Dolby - 11.05.2016
Eiss jб respondeu a todas as dъvidas referente a minha postagem. Incorporo as palavras dele.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
CaioTJF - 11.05.2016
Quote:
Originally Posted by Eiss
Nгo й bem assim que funciona, usando escape nos caracteres nгo quer dizer que esta 100% protegido contra Sql Injection, muito pelo contrбrio NГO estб, por isso digo e repito NUNCA, eu disse NUNCA use essas tйcnicas de escape nos caracteres.
Neste caso й mais DIFНCIL que ocorra pois como vocк esta trabalhando com retorno automбtico a query sу sera executada quando receber as informaзхes retornadas pelo PagSeguro.
Mas leve em conta oque o Dolby disse, Seu cуdigo й sim vulnerбvel a Inject. Uma das melhores maneiras de prevenir o Sql Injection й usando Prepared Statements.
Mas como assim?
Em consultas usando Prepared Statements os parвmetros nгo sгo enviados diretamente na consulta. Eles sгo enviados em um “pacote” separado ao SGBD.
Alйm disso vocк pode configurar uma consulta uma vez e ter a capacidade de executб-lo vбrias vezes, ligando diferentes conjuntos de dados ao usar apenas uma consulta.
OBS: Usando Prepared Statements nгo й possнvel fazer a injeзгo de SQL convencional.
Se protegendo:
O PHP possui alguns drivers para conexгo com o banco de dados MySQL.
Recomendo a vocк Mysqli e PDO, porйm na maioria dos meus projetos faзo o uso do PDO.
Mas isso й por gosto mesmo, escolha o que possui a sintaxe que mais lhe agrade.
Segue abaixo um exemplo do seu cуdigo, porйm usando Prepared Statements.
PHP код:
// Mysqli
function inserir($code, $cash) {
if($stmt = $conn->prepare("INSERT INTO pagseguro (Code, Cash) VALUES (?, ?)")) {
// Passando os valores para o parвmetro como inteiro
$stmt->bind_param("ii", $code, $cash);
// Executa a instruзгo
$stmt->execute();
// Fechando as instruзгo
$stmt->close();
}
}
Parabйns pela iniciativa, qualquer coisa estou por aн. Abrss.
|
Obrigado ^^
Atualizei o tуpico
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
GabrielCOP - 12.06.2016
Bom, falta ensinar como se usa com includes INI.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
YtZ - 18.06.2016
No nosso servidor usamos integraзгo automбtica com o PagSeguro e o Paypal desde janeiro desse ano e tem sido uma mгo na roda, jб que nгo hб necessidade nenhuma de interferкncia administrativa no processo.
Sobre o tutorial: muito boa a iniciativa e o tutorial ficou уtimo. Sу que eu acho que vocк podia ter detalhado um pouco mais, como por exemplo ter dado instruзхes de como usar o sandbox para testes. Mas enfim, muito bom tutorial.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
zSuYaNw - 18.06.2016
Sistema interessante, tente frizar nas observaзхes que o Dolby comentou.
Re: Pagamento Automбtico via PagSeguro (PHP+MySQL) -
pWesley - 27.07.2016
Deixa eu ver se entendi, o ID do produto (que no caso й opcional) serб usado para definir a quantidade de cash que serб adicionada ao banco de dados apуs a notificaзгo?