<?php



date_default_timezone_set('America/Sao_Paulo');



/**

 * Payment [ MODEL ]

 * Modelo responável pela chamada de pagamento!

 * 

 * @copyright (c) 2017, Welton Thierree TagPage

 */

class Payment {



    /** URL GATWAR */

    private $Url;

    private $Action;

    private $Email;

    private $Token;



    /** EMAIL DATA */

    private $Data;



    /** CONSTROLE */

    private $Error;

    private $Result;



    function __construct() {

        $this->Url = PAGSEGURO_API_URL;

        $this->Email = PAGSEGURO_EMAIL;

        $this->Token = PAGSEGURO_TOKEN;

    }



    function curlExec($action, $post = NULL, array $header = array()) {

        $url = $this->Url . $action;



        $ch = curl_init($url);



        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);



        if (count($header) > 0) {

            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

        }

        if ($post !== null) {

            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post, '', '&'));

        }



        //Ignore SSL

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);



        $data = curl_exec($ch);

        curl_close($ch);



        if ($data):

            $this->Result = $data;

            $this->Error = false;

        else:

            $this->Result = false;

            $this->Error = ['Erro no pagamento, verifique os paramentros.', WS_ERROR];

        endif;

    }



    /**

     * <b>Verificar Envio:</b> Executando um getResult é possível verificar se foi ou não efetuado 

     * o envio do e-mail. Para mensagens execute o getError();

     * @return BOOL $Result = TRUE or FALSE

     */

    public function getResult() {

        return $this->Result;

    }



    /**

     * <b>Obter Erro:</b> Retorna um array associativo com o erro e o tipo de erro.

     * @return ARRAY $Error = Array associatico com o erro

     */

    public function getError() {

        return $this->Error;

    }



    public function getTransaction($code) {

        $this->Action = "/v2/transactions/notifications/{$code}";

        $this->get();

    }



    /*

     * ***************************************

     * **********  PRIVATE METHODS  **********

     * ***************************************

     */



    private function get() {

        $url = $this->Url . $this->Action . "?email={$this->Email}&token={$this->Token}";

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $this->Result = simplexml_load_string(curl_exec($ch));

        $this->Error = $url;

        curl_close($ch);

    }



    //Limpa código e espaços!

    private function Clear() {

        array_map('strip_tags', $this->Data);

        array_map('trim', $this->Data);

    }



}