mrprompt/Cielo

View on GitHub
src/Requisicao/SolicitacaoToken.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/**
 * Cielo
 *
 * Cliente para o Web Service da Cielo.
 *
 * O Web Service permite efetuar vendas com cartões de bandeira
 * VISA e Mastercard, tanto no débito quanto em compras a vista ou parceladas.
 *
 * Licença
 * Este código fonte está sob a licença GPL-3.0+
 *
 * @category   Library
 * @package    MrPrompt\Cielo
 * @subpackage Cliente
 * @copyright  Thiago Paes <mrprompt@gmail.com> (c) 2013
 * @license    GPL-3.0+
 */
declare(strict_types = 1);

namespace MrPrompt\Cielo\Requisicao;

use MrPrompt\Cielo\Cartao;
use MrPrompt\Cielo\Cliente;
use MrPrompt\Cielo\Transacao;
use MrPrompt\Cielo\Autorizacao;

/**
 * Requisição do token para um determinado cartão de crédito
 *
 * @author Thiago Paes <mrprompt@gmail.com>
 * @author Antonio Carlos Ribeiro <acr@antoniocarlosribeiro.com>
 */
class SolicitacaoToken extends Requisicao
{
    /**
     * Identificador de chamada do tipo transacao
     *
     * @const integer
     */
    const ID = 8;

    /**
     * Cartão a ser utilizado
     *
     * @var Cartao
     */
    private $cartao;

    /**
     * Inicializa o objeto
     *
     * @param Autorizacao $autorizacao
     * @param Transacao   $transacao
     * @param Cartao      $cartao
     */
    public function __construct(Autorizacao $autorizacao, Transacao $transacao, Cartao $cartao)
    {
        $this->cartao = $cartao;

        $this->setAdicionarTid(false);

        parent::__construct($autorizacao, $transacao);
    }

    /**
     * {@inheritdoc}
     */
    protected function getXmlInicial(): string
    {
        return sprintf(
            '<%s id="%d" versao="%s"></%s>',
            'requisicao-token',
            self::ID,
            Cliente::VERSAO,
            'requisicao-token'
        );
    }

    /**
     * {@inheritdoc}
     */
    protected function configuraEnvio()
    {
        $this->adicionaCartao();
    }

    /**
     * Adiciona os dados do cartão à requisição
     */
    protected function adicionaCartao()
    {
        $dadosCartao = $this->getEnvio()->addChild('dados-portador', '');

        $dadosCartao->addChild('numero', (string) $this->cartao->getCartao());
        $dadosCartao->addChild('validade', (string) $this->cartao->getValidade());
        $dadosCartao->addChild('nome-portador', (string) $this->cartao->getNomePortador());
    }
}