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 com Pagseguro - #13 Compra com dados dinâmicos

30/06/2018

No vídeo de hoje aprenderemos como finalizar a compra pelo PagueSeguro utilizando dados dinâmicos, ou seja, dados digitados pelo usuário e não dados prontos como fizemos na última aula.

Compra com dados dinâmicos no Pagseguro

Para fazer uma transação com envio de dados provenientes do usuário, precisamos primeiramente criar um formulário com os campos necessários a compra. Veja como foi feito no código abaixo:

<div class="FormularioBase">
    <form id="Form1" name="Form1" method="post" action="Controllers/ControllerPedido.php">
        <input type="hidden" id="TokenCard" name="TokenCard">
        <input type="hidden" id="HashCard" name="HashCard">

        <div class="FormularioBase">
            <strong>Dados do Comprador</strong><br>
            <div class="Formulario">
                Nome do comprador: <br>
                <input type="text" id="NomeComprador" name="NomeComprador">
            </div>

            <div class="Formulario">
                CPF do comprador: <br>
                <input type="text" id="CPFComprador" name="CPFComprador" maxlength="11">
            </div>

            <div class="Formulario">
                DDD: <br>
                <input type="text" id="DDDComprador" name="DDDComprador" maxlength="2">
            </div>

            <div class="Formulario">
                Telefone do comprador: <br>
                <input type="text" id="TelefoneComprador" name="TelefoneComprador" maxlength="9">
            </div>
        </div>

        <div class="FormularioBase"><hr></div>

        <div class="FormularioBase">
            <strong>Dados de Entrega:</strong><br>
            <div class="Formulario">
                CEP: <br>
                <input type="text" id="CEP" name="CEP" maxlength="8">
            </div>

            <div class="Formulario">
                Endereco: <br>
                <input type="text" id="Endereco" name="Endereco">
            </div>

            <div class="Formulario">
                Número: <br>
                <input type="text" id="Numero" name="Numero">
            </div>

            <div class="Formulario">
                Complemento: <br>
                <input type="text" id="Complemento" name="Complemento">
            </div>

            <div class="Formulario">
                Bairro: <br>
                <input type="text" id="Bairro" name="Bairro">
            </div>

            <div class="Formulario">
                Cidade: <br>
                <input type="text" id="Cidade" name="Cidade">
            </div>

            <div class="Formulario">
                UF: <br>
                <input type="text" id="UF" name="UF" maxlength="2">
            </div>
        </div>

        <div class="FormularioBase"><hr></div>

        <div class="FormularioBase">
            <strong>Dados do Cartão</strong><br>
            <div class="Formulario">
                Número do Cartão: <br>
                <input type="text" id="NumeroCartao" name="NumeroCartao">
                <input type="hidden" id="BandeiraCartao" name="BandeiraCartao">
                <div class="BandeiraCartao"></div>
            </div>

            <div class="Formulario">
                Nome: <br>
                <input type="text" id="NomeCartao" name="NomeCartao">
            </div>

            <div class="Formulario">
                Mês de Validade: <br>
                <input type="text" id="MesValidade" name="MesValidade" maxlength="2">
            </div>

            <div class="Formulario">
                Ano de Validade: <br>
                <input type="text" id="AnoValidade" name="AnoValidade" maxlength="4">
            </div>

            <div class="Formulario">
                CVV: <br>
                <input type="text" id="CVV" name="CVV" maxlength="3">
            </div>

            <div class="Formulario">
                Quantidade de Parcelas: <br>
                <select name="QtdParcelas" id="QtdParcelas">
                    <option value="">Selecione</option>
                </select>
                <input type="hidden" id="ValorParcelas" name="ValorParcelas">
            </div>

            <div class="Formulario">
                CPF do dono do Cartao: <br>
                <input type="text" id="CPFCartao" name="CPFCartao" maxlength="11">
            </div>
        </div>

        <div class="Formulario">
            <input id="BotaoComprar" name="BotaoComprar" type="submit" value="Comprar">
        </div>
    </form>
</div>

Fizemos também uma estilização básica no CSS:

.FormularioBase{float:left; width: 100%; font-size: 22px; margin-bottom: 15px; font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;}
.Formulario{float:left; width: 30.333333%; margin: 15px 1.5%;}
    .Formulario input[type='text'],.Formulario select{float:left; width: 80%; height: 40px; font-size: 18px;}
    .Formulario .BandeiraCartao{float:left; width: 20%;}

Como agora estamos recebendo dados vindos do usuário, precisamos alterar também nosso javascript para receber o token do cartão, afinal os dados virão de inputs text. Outro detalhe é que como o CVV normalmente é o último campo preenchido, quando ele perder o foco (blur), chamaremos a função getTokenCard(). O código ficará assim:

//Chamar a função de token
$('#CVV').on('blur',function(){
    getTokenCard();
});

//Obter o token do cartão de crédito
function getTokenCard()
{
    PagSeguroDirectPayment.createCardToken({
        cardNumber: $('#NumeroCartao').val(),
        brand: $('#BandeiraCartao').val(),
        cvv: $('#CVV').val(),
        expirationMonth: $('#MesValidade').val(),
        expirationYear: $('#AnoValidade').val(),
        success: function(response)
        {
           $('#TokenCard').val(response.card.token);
        }
    });
}

No backend receberemos as variáveis e atribuiremos ao nosso array que será enviado via cURL, conforme código abaixo:

include("../config/Config.php");

$TokenCard=$_POST['TokenCard'];
$HashCard=$_POST['HashCard'];
$QtdParcelas=filter_input(INPUT_POST,'QtdParcelas',FILTER_SANITIZE_SPECIAL_CHARS);
$ValorParcelas=filter_input(INPUT_POST,'ValorParcelas',FILTER_SANITIZE_SPECIAL_CHARS);
$CPFCartao=filter_input(INPUT_POST,'CPFCartao',FILTER_SANITIZE_SPECIAL_CHARS);
$NomeComprador=filter_input(INPUT_POST,'NomeComprador',FILTER_SANITIZE_SPECIAL_CHARS);
$CPFComprador=filter_input(INPUT_POST,'CPFComprador',FILTER_SANITIZE_SPECIAL_CHARS);
$DDDComprador=filter_input(INPUT_POST,'DDDComprador',FILTER_SANITIZE_SPECIAL_CHARS);
$TelefoneComprador=filter_input(INPUT_POST,'TelefoneComprador',FILTER_SANITIZE_SPECIAL_CHARS);
$NomeCartao=filter_input(INPUT_POST,'NomeCartao',FILTER_SANITIZE_SPECIAL_CHARS);
$Endereco=filter_input(INPUT_POST,'Endereco',FILTER_SANITIZE_SPECIAL_CHARS);
$Numero=filter_input(INPUT_POST,'Numero',FILTER_SANITIZE_SPECIAL_CHARS);
$Complemento=filter_input(INPUT_POST,'Complemento',FILTER_SANITIZE_SPECIAL_CHARS);
$Bairro=filter_input(INPUT_POST,'Bairro',FILTER_SANITIZE_SPECIAL_CHARS);
$Cidade=filter_input(INPUT_POST,'Cidade',FILTER_SANITIZE_SPECIAL_CHARS);
$UF=filter_input(INPUT_POST,'UF',FILTER_SANITIZE_SPECIAL_CHARS);
$CEP=filter_input(INPUT_POST,'CEP',FILTER_SANITIZE_SPECIAL_CHARS);

$Data["email"]=EMAIL_PAGSEGURO;
$Data["token"]=TOKEN_SANDBOX;
$Data["paymentMode"]="default";
$Data["paymentMethod"]="creditCard";
$Data["receiverEmail"]=EMAIL_PAGSEGURO;
$Data["currency"]="BRL";
$Data["itemId1"] = 1;
$Data["itemDescription1"] = 'Website';
$Data["itemAmount1"] = '500.00';
$Data["itemQuantity1"] = 1;
$Data["notificationURL="]="https://www.meusite.com.br/notificacao.php";
$Data["reference"]="83783783737";
$Data["senderName"]=$NomeComprador;
$Data["senderCPF"]=$CPFComprador;
$Data["senderAreaCode"]=$DDDComprador;
$Data["senderPhone"]=$TelefoneComprador;
$Data["senderEmail"]="c51994292615446022931@sandbox.pagseguro.com.br";
$Data["senderHash"]=$HashCard;
$Data["shippingType"]="1";
$Data["shippingAddressStreet"]=$Endereco;
$Data["shippingAddressNumber"]=$Numero;
$Data["shippingAddressComplement"]=$Complemento;
$Data["shippingAddressDistrict"]=$Bairro;
$Data["shippingAddressPostalCode"]=$CEP;
$Data["shippingAddressCity"]=$Cidade;
$Data["shippingAddressState"]=$UF;
$Data["shippingAddressCountry"]="BRA";
$Data["shippingType"]="1";
$Data["shippingCost"]="0.00";
$Data["creditCardToken"]=$TokenCard;
$Data["installmentQuantity"]=$QtdParcelas;
$Data["installmentValue"]=$ValorParcelas;
$Data["noInterestInstallmentQuantity"]=2;
$Data["creditCardHolderName"]=$NomeCartao;
$Data["creditCardHolderCPF"]=$CPFCartao;
$Data["creditCardHolderBirthDate"]='27/10/1987';
$Data["creditCardHolderAreaCode"]=$DDDComprador;
$Data["creditCardHolderPhone"]=$TelefoneComprador;
$Data["billingAddressStreet"]=$Endereco;
$Data["billingAddressNumber"]=$Numero;
$Data["billingAddressComplement"]=$Complemento;
$Data["billingAddressDistrict"]=$Bairro;
$Data["billingAddressPostalCode"]=$CEP;
$Data["billingAddressCity"]=$Cidade;
$Data["billingAddressState"]=$UF;
$Data["billingAddressCountry"]="BRA";
$BuildQuery=http_build_query($Data);
$Url="https://ws.sandbox.pagseguro.uol.com.br/v2/transactions";
$Curl=curl_init($Url);
curl_setopt($Curl,CURLOPT_HTTPHEADER,Array("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"));
curl_setopt($Curl,CURLOPT_POST,true);
curl_setopt($Curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($Curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($Curl,CURLOPT_POSTFIELDS,$BuildQuery);
$Retorno=curl_exec($Curl);
curl_close($Curl);
$Xml=simplexml_load_string($Retorno);
var_dump($Xml);

Até a próxima ;)

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

Posts Relacionados

Vendas com Pagseguro - #12 Finalizando compra com cartão
Hoje finalizaremos nossa primeira compra através do checkout transparente do PagueSeguro pelo cartão de crédito.
Saiba mais!
Vendas com Pagseguro - #14 Compra com múltiplos produtos
Na vídeo-aula de hoje vamos aprender como fazer um pedido com vários produtos vindo do banco de dados e remeter a API do PagueSeguro.
Saiba mais!
Pagseguro
Nesse curso será abordado a temática de vendas online com pagseguro através do redirecionamento, lightbox e checkout transparente.
Saiba mais!