Vendas Online via API com Mercado Pago - #13 Status e Erro das Transações
23/04/2020Neste tutorial trabalharemos com o status da nossa transação e com possíveis erros encontrados durante o pagamento, exibindo uma resposta ao usuário.
Status e Erros no Mercado Pago
Primeiramente criaremos os arquivos views/result.php e class/ClassException.php
result.php
<?php
require("../lib/vendor/autoload.php");
$carrinho=new \Classes\ClassCarrinho();
$exception=new \Classes\ClassException();
?>
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Pagamento via API - Mercado Pago</title>
<link rel="stylesheet" href="https://www.webdesignemfoco.com/mp/lib/css/style.css?v=2">
</head>
<body>
<div class="banner">
<img src="https://www.webdesignemfoco.com/mp/img/banner-mercado-pago-l.jpg" alt="Mercado Pago">
</div>
<div class="carrinho">
Você tem <?php echo $carrinho->getQuantity(); ?> produtos no carrinho. <a href="https://www.webdesignemfoco.com/mp/controllers/CarrinhoController.php?action=clear">Esvaziar Carrinho</a>
</div>
<div class="result">
<?php $exception->setPayment($_SESSION['payment']); ?>
<div class="<?php echo $exception->verifyTransaction()['class']; ?>">
<?php echo $exception->verifyTransaction()['message']; ?>
</div>
</div>
</body>
</html>
ClassException.php
<?php
namespace Classes;
class ClassException{
private $payment;
#Setters and Getters
public function setPayment($payment){$this->payment=$payment;}
public function getPayment(){return $this->payment;}
#Verify transaction
public function verifyTransaction()
{
if($this->getPayment()->error == ""){
if($this->getPayment()->status_detail == 'accredited'){
$html=[
'class'=>'success',
'message'=>$this->getStatus()
];
}else{
$html=[
'class'=>'alert',
'message'=>$this->getStatus()
];
}
}else{
$html=[
'class'=>'error',
'message'=>$this->getErrors()
];
}
return $html;
}
#Get Status
public function getStatus()
{
$status=[
'accredited'=>'Pronto, seu pagamento foi aprovado! Você verá o nome '.$this->getPayment()->statement_descriptor.' na sua fatura de cartão de crédito. Entraremos em contato com você!',
'pending_contingency'=>'Estamos processando o pagamento. Em até 2 dias úteis informaremos por e-mail o resultado.',
'pending_review_manual'=>'Estamos processando o pagamento. Em até 2 dias úteis informaremos por e-mail se foi aprovado ou se precisamos de mais informações.',
'cc_rejected_bad_filled_card_number'=>'Confira o número do cartão.',
'cc_rejected_bad_filled_date'=>'Confira a data de validade.',
'cc_rejected_bad_filled_other'=>'Confira os dados.',
'cc_rejected_bad_filled_security_code'=>'Confira o código de segurança.',
'cc_rejected_blacklist'=>'Não conseguimos processar seu pagamento.',
'cc_rejected_call_for_authorize'=>'Você deve autorizar o pagamento do valor ao Mercado Pago.',
'cc_rejected_card_error'=>'Não conseguimos processar seu pagamento.',
'cc_rejected_duplicated_payment'=>'Você já efetuou um pagamento com esse valor. Caso precise pagar novamente, utilize outro cartão ou outra forma de pagamento.',
'cc_rejected_high_risk'=>'Seu pagamento foi recusado. Escolha outra forma de pagamento. Recomendamos meios de pagamento em dinheiro.',
'cc_rejected_insufficient_amount'=>'O cartão possui saldo insuficiente.',
'cc_rejected_invalid_installments'=>'O cartão não processa pagamentos parcelados.',
'cc_rejected_max_attempts'=>'Você atingiu o limite de tentativas permitido. Escolha outro cartão ou outra forma de pagamento.',
'cc_rejected_other_reason'=>'O cartão não processou seu pagamento'
];
if(array_key_exists($this->getPayment()->status_detail,$status)){
return $status[$this->getPayment()->status_detail];
}else{
return "Houve um problema na sua requisição. Tente novamente!";
}
}
#Get Error
public function getErrors()
{
$error=[
'205'=>'Digite o número do seu cartão.',
'208'=>'Escolha um mês.',
'209'=>'Escolha um ano.',
'212'=>'Informe seu documento.',
'213'=>'Informe seu documento.',
'214'=>'Informe seu documento.',
'220'=>'Informe seu banco emissor.',
'221'=>'Informe seu sobrenome.',
'224'=>'Digite o código de segurança.',
'E301'=>'Há algo de errado com esse número. Digite novamente.',
'E302'=>'Confira o código de segurança.',
'316'=>'Por favor, digite um nome válido.',
'322'=>'Confira seu documento.',
'323'=>'Confira seu documento.',
'324'=>'Confira seu documento.',
'325'=>'Confira a data.',
'326'=>'Confira a data.'
];
if(array_key_exists($this->getPayment()->error->causes[0]->code,$error)){
return $error[$this->getPayment()->error->causes[0]->code];
}else{
return "Houve um problema na sua requisição. Tente novamente!";
}
}
}
Dentro do arquivo controllers/PaymentController.php iremos iniciar a sessão e criar a SESSION payment:
PaymentController.php
session_start();
$_SESSION['payment']=$payment;
header("location: http://localhost/views/result.php");
Por hoje é só. Sucesso nos códigos e na vida!
Contrate nosso suporte premium: webdesignemfoco@gmail.com
Posts Relacionados
Vendas Online via API com Mercado Pago - #12 Carrinho de Compras III
No tutorial de hoje iremos terminar o nosso carrinho de compras interligado ao Mercado Livre já exibindo os dados dos produtos no checkout.
Vendas Online via API com Mercado Pago - #14 Preparando para vendas reais I
Nessa vídeoaula vamos preparar o nosso projeto para produção, ou seja, para realizar vendas reais pela API do Mercado Pago.