Você está na página 1de 12

API DE INTEGRAÇÃO MERCADO PAGO

www.scriptmundo.com

SUMÁRIO

1. INTRODUÇÃO …………………………………………………………………… ​2

2. CHECKOUT ………………………………………………………………………. ​3

3. FUNÇÕES …………………………………………………………………………. ​4

4. REQUISIÇÃO ……………………………………………………………………… ​6

5. NOTIFICAÇÃO …………………………………………………………………….. ​9

Criado por Luan Alves - Script Mundo


Youtube: ​https://bit.ly/2UQBJ0O
Site: ​www.scriptmundo.com
E-mail: ​scriptmundo002@gmail.com

15 de Dezembro, 2018
1. Introdução
Olá, de imediato gostaria de pedir minhas sinceras desculpas, pois nunca tive que
criar um PDF neste modelo (com sumário). Continuando [...].

A utilização desta API é muito útil, pois além de ser uma ferramenta muito rápida faz
parte de uma plataforma com baixa taxa de impostos (quando cobrado).
Várias pessoas nas quais tem um negócio online, procuram desesperadamente
uma GateWay de pagamentos cuja seu funcionamento não exija uma conta
bancária para se utilizar.

O Mercado Pago, possui em sua plataforma o “Cartão pré-pago”, que pode ser
solicitado gratuitamente livre de impostos e com frete totalmente gratuito, isso é uma
das vantagens de se usar essa plataforma. Você recebe seus pagamentos pelo seu
site usando a API, e pode utilizar do dinheiro usando seu cartão
(INTERNACIONAL).
Nesta aula, não será necessário a utilização da documentação original da API; mas
caso seja de seu desejo aqui está (​https://bit.ly/2SzDA8y​).

Os downloads dos materiais a serem utilizados, podem ser baixados nos links
abaixo:

Mercadopago.php: Opção 1 ​https://bit.ly/2Qua3jT


Mercadopago.php: Opção 2 ​https://bit.ly/2Eskyht
2. CheckOut
O checkout será realizado totalmente em uma gateway externa, ou seja, o usuário
será redirecionado para o site do Mercado Pago, e em nosso site vamos gerar o
Token do checkout, e em seguida criaremos em nossa base de dados uma
solicitação de pagamento, ou uma fatura.

Após ser registrado a fatura, iremos buscar o ID dela, para ser passado como
parâmetro para o Mercado Pago nos notificar mais tarde, de qual fatura se trata.
Vamos utilizar óbviamente a biblioteca do mercado pago para que possamos gerar
o token do checkout.

Você pode baixar acessando os Links de Downloads.


Também será necessário suas ​Credenciais MercadoPago​ ​(Lembre-se de estar
logado em sua conta do MercadoPago/MercadoLivre).
3. Funções

Será usado apenas duas funções.


A primeira função será responsável por preparar nosso Token de checkout, e
também irá gerar o link do nosso CheckOut direto no site o Mercado Pago.
A segunda função será responsável por tratar os dados após o usuário realizar ou
não o pagamento, terá o trabalho também de notificar os responsáveis pela fatura e
fazer a atualização no banco de dados.
As duas funções irão iniciar as credenciais do mercado pago.

Função número 1, será chamada de ​PagarMP​​, terá como parâmetros:

● ID da fatura no banco de dados - Sua variável será chamada de ​$ref


● Nome do pagamento. (ex: PS4) - Sua variável será chamada de ​$nome 
● Valor do pagamento (​double​) - Sua variável será chamada de ​$valor 
● Url de retorno (Notificações) - Sua variável será chamada de ​$url 

public function ​PagarMP​​(​$ref​​ , ​$nome​​ , ​$valor​​ , ​$url​​){ 


// iniciando as credenciais do MP 
// Os valores de client_id e client_secret são informados 
// como atributos da classe 
$mp​​ = ​new ​MP​​(​$this​​->​​client_id​,
​ ​$this​​->​​client_secret​​); 

A segunda função terá o nome de ​Retorno ​, terá dois parâmetros:


● ID collection, O mercado pago te enviará para utilizar na busca da fatura
● Conexão, passaremos nossa variável ​$conn​ , para utilizarmos no Update
(Você pode trabalhar também com Orientação a Objetos, usarei este método
por quê o foco aqui é apenas ensinar a usar a API no seu sistema )

public function​​ ​Retorno​​(​$id​​ , ​$conn​​){ 


// iniciando as credenciais do MP 
$mp​​ = ​new ​MP​​(​$this​​->​​client_id​,
​ ​$this​​->​​client_secret​​); 
​/* Código… */ 

Estas duas funções vão fazer parte da mesma classe:

class ​PagamentoMP​​{ 
// vamos dar alguns atributos a esta class 
// como : 
 
// O botão que irá retornar da função PagarMP (string) 
public ​$btn_mp​​; 
 
// Definiremos o botão que irá retornar, se será uma lightbox 
// do mercado pago ou não, como padrão será false. o user será  
// redirecionado para o site do mercado pago 
private ​$lightbox​​ = ​false​​; 
 
// Esta variável recebe uma array com os dados da transação 
public ​$info​​ = ​array​​(); 
 
// Se for em modo de teste, esta variável recebe true, caso  
// contrário o sistema estará em modo de produção 
private ​$sandbox​​ = ​true​​; 
 
// Suas credenciais do mercado pago 
private ​$client_id​​ = ​“SEU CLIENT_ID”​​; 
private ​$client_secret ​= ​“SUA CLIENT_SECRET”​​; 
 
/* Em seguida as duas funções */ 
 

 
 
 
 
 
 
 
 
 
 
 
 
 

4. Requisição
A requisição ao mercado pago será feita na primeira função.
Para isso criaremos uma variável chamada ​$preference_data​​ para receber uma
array ​que conterá os valores necessários para a requisição:

I. items ​- (array)....................[ dados do produto para pagamento ]


II. back_urls ​- (array).............[ páginas de retorno ]
III. notification_url ​- (string)...[ página para receber notificações de pagamento ]
IV. external_reference​​ - (int)..[ referência do pedido dentro do site ]

$preference_data​​ = ​array​​( 
​“items”​​ => ​array​​(), 
​“back_urls”​​ => ​array​​(), 
“notification_url”​​ => ​“https://site.com/notificacao”​​, 
“external_reference” ​=> ​$ref​​, 
); 

Os valores a seguir serão passados na ​array​: ​items​​:


I. id​​: Este valor será o id do produto - Nível de importância (​Baixo​) ​required​.
II. title​​: Nome do produto a ser vendido - Nível de importância (​Alto​) ​required.​
III. currency_id​​: Moeda ser usada (BRL) - Nível de importância (​Alto​) ​required.​
IV. picture_url​​: Url da img do produto - Nível de importância (​Baixo​) ​required.​
V. description​​: Descrição do produto - Nível de importância (​Médio​) required.
VI. quantity​​: Quantidade de produtos - Nível de importância (​Médio​) ​required.​
VII. unit_price​​: Valor do produto (​double​) - Nível de importância (​Alto​) ​required​.

// Dados do produto  
“items”​​ => ​array​​( 
​array​​( 
“id”​​ => ​0001​​, 
​“title”​​ => ​“Notebook”​​, 
​“currency_id”​​ => ​“BRL”​​, 
​“picture_url”​​ => ​“https://site.com/produto/img/p.jpg”​​, 
​“description”​​ => ​“Notebook branco, Apple”​​, 
​“quantity”​​ => ​1​, 
​“unit_price”​​ => ​1200.00 

), 
 
 
Abaixo os dados da ​array​: ​back_urls​​:
I. success​​: Url de retorno caso o pagamento seja realizado pelo usuário
II. failure​​: Url de retorno caso o pagamento seja recusado pelo mercado pago
III. pending​​: Url de retorno caso o pagamento esteja em aprovação
 
 
// Urls de retorno, para onde o usuário será redirecionado  
// após sair do site do mercado pago  
“back_urls”​​ => ​array​​( 
​“success”​​ => ​“https://site.com/aprovado/”​​, 
​“failure”​​ => ​“https://site.com/falha_pay/”​​, 
​“pending”​​ => ​“https://site.com/pendente/” 
), 
Após nossa variável ​$preference_data ​possuir todos os dados necessários,
iremos fazer a requisição (lembre-se de incluir o arquivo ​mercadopago.php​​ que
está dentro da biblioteca).
Vamos colocar todos os dados da requisição em uma variável:

$preference​​ = ​$mp​​->​c
​ reate_preference​​(​$preference_data​​); 

Veja um exemplo na documentação oficial: ​Aqui


Agora nossa variável ​$preference ​está com uma ​array ​de dados;
O que iremos utilizar será o ​init_point ​, dentro de ​response ​.

Está requisição será efetuada ainda na primeira função, pois então nesta parte do
código, você deve verificar se está em produção ou em SandBox:

// Criar link para o botão de pagamento normal ou sandbox 


  if​​(​$this​​->​​sandbox​​): 
​//sandbox 
​$mp​​->​​sandbox_mode​​(​TRUE​​); 
​$link​​ = ​$preference​​[" ​ response"​​][​​"sandbox_init_point"​​]; 
​else​​: 
​// normal em produção 
​$mp​​->​​sandbox_mode​​(​FALSE​​); 
  $link​​ = ​$preference​​[​"response"​] ​ [​​"init_point"​​]; 
endif​​; 
 
$this​​->​​btn_mp​​ = ​‘<a id="btnMP" href="'.​​$link​​.'" ’​​; 
$this​​->​​btn_mp​​ ​.=​​ ‘name="MP-Checkout" >Pagar</a>’​​; 
 
   
Vamos verificar também se será em lightBox ou não

if​​(​$this​​->​​lightbox​​): 
​$this​​->​​btn_mp​​ .= ​' <script type="text/javascript" 
src="//secure.mlstatic.com/mptools/render.js"></script> '​​; 
endif​​; 
 
Por fim retornamos o botão desta função:

return $this​​->​​btn_mp​​; 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5. Notificação
A notificação que o mercado passada ao nosso sistema é realizada sempre que
houver alguma atualização da movimentação na sua conta referente a fatura.

Antes de tudo vamos obter a access_token da operação (isso na função ​Retorno​​)

// Dentro da função Retorno 


$params​​ = [​​"access_token"​​ => ​$mp​​->​​get_access_token​​()]; 
// params recebe o token 

Quando receber uma notificação na sua plataforma, o MercadoPago espera uma


resposta para validar que a recebeu corretamente. Para isso, deve devolver um
HTTP STATUS 200 ou 201.

I. 200 ​- ​OK
II. 201 ​- ​CREATED

Se a aplicação não estiver disponível ou demorar para responder, o MercadoPago


irá fazer tentativas de notificação nos seguintes intervalos:

1. Tentativa após 5 segundos.


2. Tentativa após 45 minutos.
3. Tentativa após 6 horas.
4. Tentativa após 2 dias

Lembre-se de que essa comunicação é exclusivamente entre os servidores do


MercadoPago e os seus servidores, no qual não haverá um usuário físico vendo
nenhum tipo de resultado.

Primeiro vamos verificar se o topic é igual a payment ou seja um pagamento, vamos


adicionar manualmente o valor deste ​topic ​pois não temos a necessidade de
receber por fora este valor, pois vamos trabalhar somente com este ​topic

$topic​​ = ​'payment'​​; 
 
 
 
 
 
 
Depois da verificação vamos já buscar os dados do pagamento, e repare que
teremos a variável ​$id​​ na requisição, pois se trata da referência do pagamento,
aliás ela é passada junto com a função, a Retorno.

Essa referência o mercado pago envia pra você no arquivo que você escolheu para
notificação, você recebe por duas maneiras, por isso devemos adicionar esta
referência a variável id em duas situações:

​ ​if​​(​isset​​(​$_GET​​[​'collection_id'​​])): 
​$id​​ = ​$_GET​​[​'collection_id'​​]; 
​elseif​​(​isset​​(​$_GET​[​ ​'id'​​])): 
​$id​​ = ​$_GET​​[​'id'​​]; 
​endif​​; 
​// Em seguida chame a função e passe o id 

if​​ (​​$topic​​ == ​'payment'​​){ 


 
$payment_info​​ = ​$mp​​->​​get​​(​"/collections/notifications/"​​ . ​$id​​, 
$params​​, ​false​​);   
   
$merchant_order_info​​ = ​$mp​​->​​get​​(​"/merchant_orders/"​​ . 
$payment_info​​[​"response"​​][​​"collection"​​][​​"merchant_order_id"​​], 
$params​​, ​false​​); 
   

 
 
Feito isso já possuímos os dados do pagamento como array na variável
$payment_info ​, pois então agora vamos trazer o status do mesmo:
Vamos criar um ​switch ​e jogar o status na variável ​$status​​ já formatado da nossa
maneira:

1. approved ​ - O pagamento foi aprovado e creditado


2. pending ​ - O usuário não concluiu o processo de pagamento
3. in_process ​ - O pagamento está sendo analisado
4. rejected ​ - O pagamento foi recusado. O usuário pode tentar novamente.
5. refunded ​ - O pagamento foi devolvido ao usuário
6. cancelled ​ - O pagamento foi cancelado por uma das partes
7. in_mediation ​- Foi iniciada uma disputa para o pagamento.

switch ​(​$payment_info​​[" ​ response"​​][​​"collection"​​][​​"status"​​]): 


 
​case ​"approved"​​ : ​$status​​ = ​"Aprovado"​​; 
break​​; 
​case ​"pending"​​ : ​$status​​ = ​"Pendente"​​; 
break​​; 
​case ​"in_process"​​ : ​$status​​ = ​"Análise"​​; 
break​​; 
​case ​"rejected"​​ : ​$status​​ = ​"Rejeitado"​​; 
break​​; 
​case ​"refunded"​​ : ​$status​​ = ​"Devolvido"​​; 
break​​; 
​case ​"cancelled"​​ : ​$status​​ = ​"Cancelado"​​; 
break​​; 
​case ​"in_mediation" ​: ​$status​​ = ​"Mediação"​​; 
break​​; 
endswitch​​; 
Agora Vamos pegar a forma de pagamento:

1. ticket - Boleto
2. account_money ​- Saldo em conta
3. credit_card ​ - Cartão de crédito

switch ​(​$payment_info​​[​"response"​​][​​"collection"​​][​​"payment_type"​​]): 
​case ​"ticket"​​ : ​$forma​​ = ​"Boleto"​​; 
​break​​; 
​case ​"account_money"​​ : $ ​ forma​​ = ​"Saldo MP"​​; 
​break​​; 
​case ​"credit_card"​​ : ​$forma​​ = ​"Cartão de Crédito"​​; 
​break​​; 
​default ​: ​$forma​​ = 
$payment_info​​[​"response"​​][​​"collection"​​][​​"payment_type"​​]; 
 
endswitch​​; 

Bom já temos os dados no qual queremos, em seguida basta fazer a atualização no


banco de dados com os novos dados de status e forma de pagamento, você deve
usar a referência externa do pagamento para atualizar:

$ref​​ = 
$payment_info​​[​"response"​​][​​"collection"​​][​​"external_reference"​​]; 
 
No mesmo arquivo no qual você receberá a notificação, você pode enviar um email
para um responsável pela fatura, ou até mesmo se possuir um sistema de
notificação no seu sistema pode utilizá-lo.

Muito obrigado por ler até aqui, e acompanhar as nossas videos aulas.
Se possuir dúvidas envie para meu email, irei responder todas:

scriptmundo002@gmail.com
www.scriptmundo.com

Caso queria compartilhar este PDF fique a vontade, mas dê os créditos ;) .

Canal no Youtube: ​https://bit.ly/2ElEuBD


PlayList das aulas: ​https://bit.ly/2rEN7Qe
Sobre as notificações do Mercado Pago: ​https://bit.ly/2rBJKcV
Download da biblioteca: ​https://bit.ly/2Eskyht

Você também pode gostar