Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

poteitow

Fatal error: Cannot redeclare class

Recommended Posts

Ola, a todos!

 

Estou com este erro que esta gerando um erro com uma Blank Page.

 

Fatal error: Cannot redeclare class mpAuth in /home/artgolde/hostgolden.net/central/modules/gateways/mercadopago/lib.php on line 68

 

<?php 

class mpAuth extends mpCall
{
    public $client_id = NULL;
    public $client_secret = NULL;
    public $refresh = NULL;
    public $newrefresh = null;
    public $accesstoken = NULL;
    public $error = NULL;
    protected $date = NULL;
    protected $expired = NULL;
    protected $b2b2c = false;

    public function GeAuthCore($url)
    {
        $link = "https://auth.mercadolibre.com.ar/authorization?client_id=" . $this->client_id . "&response_type=code&platform_id=mp&redirect_uri=" . $url;
        return $link;
    }

    public function GetRefreshToken($auth, $redict_url)
    {
        $url = "https://api.mercadolibre.com/oauth/token";
        $header = array( "Accept: application/json" );
        $post = array( "grant_type" => "authorization_code", "client_id" => $this->client_id, "client_secret" => $this->client_secret, "code" => $auth, "redirect_uri" => $redict_url );
        $dados = $this->DoPost($post, $url, $header, "200", "post", "post");
        return $dados;
    }

    public function getAccessToken()
    {
        $data = getdate();
        $time = $data[0];
        if( isset($this->accesstoken) && isset($this->date) ) 
        {
            $timedifference = $time - $this->date;
            if( $timedifference < $this->expired ) 
            {
                return $this->accesstoken;
            }

        }

        if( $this->refresh != null ) 
        {
            $post = array( "client_id" => $this->client_id, "client_secret" => $this->client_secret, "grant_type" => "refresh_token", "refresh_token" => $this->refresh );
            $this->b2b2c = true;
            $header = array( "Accept: application/json", "Content-Type: application/x-www-form-urlencoded" );
            $url = "https://api.mercadolibre.com/oauth/token";
            $dados = $this->DoPost($post, $url, $header, "200", "post", "post");
            $this->accesstoken = $dados["access_token"];
            $this->newrefresh = $dados["refresh_token"];
            $this->date = $time;
            $this->expired = $dados["expires_in"];
            return $dados["access_token"];
        }

        $post = array( "client_id" => $this->client_id, "client_secret" => $this->client_secret, "grant_type" => "client_credentials" );
        $header = array( "Accept: application/json", "Content-Type: application/x-www-form-urlencoded" );
        $url = "https://api.mercadolibre.com/oauth/token";
        $dados = $this->DoPost($post, $url, $header, "200", "post", "post");
        $this->accesstoken = $dados["access_token"];
        $this->date = $time;
        $this->expired = $dados["expires_in"];
        return $dados["access_token"];
    }

}


class mpCore extends mpAuth
{
    public function __construct($client_id, $client_secret)
    {
        $this->client_id = $client_id;
        $this->client_secret = $client_secret;
    }

    public function GetMethods($country_id)
    {
        $url = "https://api.mercadolibre.com/sites/" . $country_id . "/payment_methods";
        $header = array( "Content-Type:application/json" );
        $methods = $this->DoPost($opt = null, $url, $header, "200", "none", "get");
        return $methods;
    }

    public function GetCheckout($data, $excludes, $method = "lightbox")
    {
        if( $excludes != "" ) 
        {
            $methods_excludes = preg_split("/[\\s,]+/", $excludes);
            foreach( $methods_excludes as $exclude ) 
            {
                $excludemethods[] = array( "id" => $exclude );
            }
            if( !isset($data["mkfee"]) ) 
            {
                $data["mkfee"] = "";
            }

            $data["mkfee"] = "";
            $opt = array( "external_reference" => $data["external_reference"], "items" => array( array( "id" => $data["external_reference"], "title" => $data["title"], "description" => $data["quantity"] . " x " . $data["title"], "quantity" => $data["quantity"], "unit_price" => round($data["amount"], 2), "currency_id" => $data["currency"], "picture_url" => $data["image"] ) ), "payer" => array( "name" => $data["payment_firstname"], "surname" => $data["payment_lastname"], "email" => $data["email"] ), "back_urls" => array( "pending" => $data["pending"], "success" => $data["approved"] ), "payment_methods" => array( "excluded_payment_methods" => $excludemethods ) );
        }
        else
        {
            $opt = array( "external_reference" => $data["external_reference"], "items" => array( array( "id" => $data["external_reference"], "title" => $data["title"], "description" => $data["quantity"] . " x " . $data["title"], "quantity" => $data["quantity"], "unit_price" => round($data["amount"], 2), "currency_id" => $data["currency"], "picture_url" => $data["image"] ) ), "payer" => array( "name" => $data["payment_firstname"], "surname" => $data["payment_lastname"], "email" => $data["email"] ), "back_urls" => array( "pending" => $data["pending"], "success" => $data["approved"] ) );
        }

        $this->getAccessToken();
        $url = "https://api.mercadolibre.com/checkout/preferences?access_token=" . $this->accesstoken;
        $header = array( "Content-Type:application/json", "Accept: application/json" );
        $dados = $this->DoPost($opt, $url, $header, "201", "json", "post");
        $link = $dados["init_point"];
        switch( $method ) 
        {
            case "lightbox":
                $bt = "<a href=\"" . $link . "\" name=\"MP-payButton\" class=\"blue-l-rn-ar\">Comprar</a>\n    <script type=\"text/javascript\" src=\"https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js\"></script>";
                break;
            case "Iframe":
                $bt = "<iframe id=\"MP-Checkout-IFrame\" frameborder=\"0\" style=\"width: 740px; height: 480px;\" src=\"" . $link . "\">";
                break;
            case "initpoint":
                $bt = $link;
                break;
            default:
                $bt = "<a href=\"" . $link . "\" name=\"MP-payButton\" class=\"blue-l-rn-ar\">Comprar</a>\n    <script type=\"text/javascript\" src=\"https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js\"></script>";
                break;
        }
        if( $this->b2b2c ) 
        {
            $return = array( $this->newrefresh, $bt );
            return $return;
        }

        return $bt;
    }

    public function GetStatus($id)
    {
        $this->getAccessToken();
        $url = "https://api.mercadolibre.com/collections/notifications/" . $id . "?access_token=" . $this->accesstoken;
        $header = array( "Accept: application/json", "Content-Type: application/x-www-form-urlencoded" );
        $retorno = $this->DoPost($opt = null, $url, $header, "200", "none", "post");
        return $retorno;
    }

    public function SearchPayment($dados = array(  ), $limit = null, $offset = null, $sort = null, $order = null)
    {
        $field = "";
        foreach( $dados as $key => $value ) 
        {
            if( $key == "date_created" || $key == "date_approved" || $key == "last_modified" ) 
            {
                $field .= "range=" . $key . "&";
                foreach( $value as $keys => $dates ) 
                {
                    if( $keys == "start" ) 
                    {
                        $field .= "begin_date=" . $dates . "&";
                    }
                    else
                    {
                        if( $keys == "end" ) 
                        {
                            $field .= "end_date=" . $dates . "&";
                        }

                    }

                }
            }
            else
            {
                $field .= $key . "=" . $value . "&";
            }

        }
        $this->getAccessToken();
        if( $limit != null ) 
        {
            $field .= "limit=" . $limit . "&";
        }

        if( $offset != null ) 
        {
            $field .= "offset=" . $offset . "&";
        }

        if( $sort != null ) 
        {
            $field .= "sort=" . $sort . "&";
        }

        if( $order != null ) 
        {
            $field .= "order=" . $order . "&";
        }

        $header = array( "Accept: application/json", "Content-Type: application/x-www-form-urlencoded" );
        $url = "https://api.mercadolibre.com/collections/search?access_token=" . $this->accesstoken . "&" . $field;
        var_dump($url);
        $retorno = $this->DoPost($opt = null, $url, $header, "none", "none", "get");
        return $retorno;
    }

    public function RefundPayment($id)
    {
        $this->getAccessToken();
        $header = array( "Content-Type:application/json", "Accept: application/json" );
        $opt = "{\"status\":\"cancelled\"}";
        $url = "https://api.mercadolibre.com/collections/" . $id . "?access_token=" . $this->accesstoken;
        $teste = $this->DoPost($opt, $url, $header, "200", "none", "put");
        return $teste;
    }

    public function create_preapproval_payment($preapproval_payment, $method = "lightbox")
    {
        $this->getAccessToken();
        $header = array( "Content-Type:application/json", "Accept: application/json" );
        $url = "https://api.mercadolibre.com/preapproval?access_token=" . $this->accesstoken;
        $preapproval_payment_result = $this->DoPost($preapproval_payment, $url, $header, "201", "json", "post");
        $link = $preapproval_payment_result["init_point"];
        switch( $method ) 
        {
            case "lightbox":
                $bt = "<a href=\"" . $link . "\" name=\"MP-payButton\" class=\"blue-l-rn-ar\">Comprar</a>\n<script type=\"text/javascript\" src=\"https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js\"></script>";
                break;
            case "Iframe":
                $bt = "<iframe id=\"MP-Checkout-IFrame\" frameborder=\"0\" style=\"width: 740px; height: 480px;\" src=\"" . $link . "\">";
                break;
            case "initpoint":
                $bt = $link;
                break;
            default:
                $bt = "<a href=\"" . $link . "\" name=\"MP-payButton\" class=\"blue-l-rn-ar\">Comprar</a>\n    <script type=\"text/javascript\" src=\"https://www.mercadopago.com/org-img/jsapi/mptools/buttons/render.js\"></script>";
                break;
        }
        if( $this->b2b2c ) 
        {
            $return = array( $this->newrefresh, $bt );
            return $return;
        }

        return $bt;
    }

}


class mpCall
{
    public static function debug($error)
    {
        echo "<br>Retorno error<br><pre>";
        print_r($error);
        echo "</pre><br><br>";
    }

    public function DoPost($fields, $url, $heads, $codeexpect, $type, $method)
    {
        if( $type == "json" ) 
        {
            $posts = json_encode($fields);
        }
        else
        {
            if( $type == "none" ) 
            {
                $posts = $fields;
            }
            else
            {
                $posts = http_build_query($fields);
            }

        }

        switch( $method ) 
        {
            case "get":
                $options = array( CURLOPT_RETURNTRANSFER => "1", CURLOPT_HTTPHEADER => $heads, CURLOPT_SSL_VERIFYPEER => "false", CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $posts, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_CONNECTTIMEOUT => 0 );
                break;
            case "put":
                $options = array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPHEADER => $heads, CURLOPT_SSL_VERIFYPEER => "false", CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $posts, CURLOPT_CUSTOMREQUEST => "PUT", CURLOPT_HEADER => 1, CURLOPT_CONNECTTIMEOUT => 0 );
                break;
            case "post":
                $options = array( CURLOPT_RETURNTRANSFER => "1", CURLOPT_HTTPHEADER => $heads, CURLOPT_SSL_VERIFYPEER => "false", CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $posts, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_CONNECTTIMEOUT => 0 );
                break;
            case "delete":
                $options = array( CURLOPT_RETURNTRANSFER => "1", CURLOPT_HTTPHEADER => $heads, CURLOPT_SSL_VERIFYPEER => "false", CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $posts, CURLOPT_CUSTOMREQUEST => "DELETE", CURLOPT_CONNECTTIMEOUT => 0 );
                break;
            default:
                $options = array( CURLOPT_RETURNTRANSFER => "1", CURLOPT_HTTPHEADER => $heads, CURLOPT_SSL_VERIFYPEER => "false", CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $posts, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_CONNECTTIMEOUT => 0 );
                break;
        }
        $options[CURLOPT_SSLVERSION] = TLSv1;
        $call = curl_init();
        curl_setopt_array($call, $options);
        $dados = curl_exec($call);
        $status = curl_getinfo($call);
        curl_close($call);
        if( $status["http_code"] != $codeexpect && $codeexpect != "none" ) 
        {
            $this->debug($dados);
            return false;
        }

        return json_decode($dados, true);
    }

}

 

Obrigado pela atencao de todos,

Abrs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mais provável seja que está incluindo o arquivo com as classes mais de uma vez, utilizando require/include.

 

Procure as chamadas para o arquivo e substitua por require_once/include_once.

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 horas atrás, Gabriel Heming disse:

O mais provável seja que está incluindo o arquivo com as classes mais de uma vez, utilizando require/include.

 

Procure as chamadas para o arquivo e substitua por require_once/include_once.

 

Como ficaria o codigo?

 

Desculpe, nao tenho muito conhecimento. E outra se o problema poderia ser a versao do php, pq antes nao aparecia este erro ate que mudei a versao para uma inferior.

 

Abracos e obrigado! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

include

require

include_once

require_once

 

Versão não. Código talvez, mas não há problemas no seu código acima.

 

O seu erro informa que a classe está sendo "redeclarada" ou seja, mais de uma vez. Veja o arquivo /home/artgolde/hostgolden.net/central/modules/gateways/mercadopago/lib.php e procure o que está na linha 68.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.