Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Vendas Online via API com Mercado Pago - #13 Status e Erro das Transações

23/04/2020

Neste 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

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

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.
Saiba mais!
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.
Saiba mais!
Mercado Pago
Neste curso aprenderemos como desenvolver pagamentos através do checkout transparente da API do Mercado Pago.
Saiba mais!