MercadoLibre API выдает ошибку «getAuthUrl () не должен вызываться статически» - PullRequest
0 голосов
/ 13 мая 2019

У меня есть следующие 2 кода из библиотеки https://github.com/javiertelioz/mercadolibre для соединения с API MercadoLibre:

Класс Meli.php:

<?php

namespace App\Sources;

use App\Sources\MercadoLibre\Utils;

class Meli extends Utils {

    /**
     * @version 1.0.0
     */
    const VERSION  = "1.0.0";

    /**
     * Configuration for urls
     */
    protected $urls = array(
        'API_ROOT_URL' => 'https://api.mercadolibre.com',
        'AUTH_URL'     => 'http://auth.mercadolibre.com.ar/authorization',
        'OAUTH_URL'    => '/oauth/token'
    );

    /**
     * Configuration for CURL
     */
    protected $curl_opts = array(
        CURLOPT_USERAGENT => "MELI-PHP-SDK-1.0.0",
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_TIMEOUT => 60
    );

    protected $client_id;
    protected $client_secret;

    /**
     * Constructor method. Set all variables to connect in Meli
     *
     * @param string $client_id
     * @param string $client_secret
     * @param string $access_token
     */
    public function __construct($client_id, $client_secret, $urls = null, $curl_opts = null) {
        $this->client_id     = $client_id;
        $this->client_secret = $client_secret;
        $this->urls          = $urls ? $urls : $this->urls;
        $this->curl_opts     = $curl_opts ? $curl_opts : $this->curl_opts;
    }

    /**
     * Return an string with a complete Meli login url.
     *
     * @param string $redirect_uri
     * @return string
     */
    public function getAuthUrl($redirect_uri) {
        $params = array("client_id" => $this->client_id, "response_type" => "code", "redirect_uri" => $redirect_uri);
        $auth_uri = $this->urls['AUTH_URL'] . "?" . http_build_query($params);
        return $auth_uri;
    }
}

и контроллер MeliController.php сследующий код:

class MeliController extends Controller
{
    /**
     * Login Page (Mercado Libre)
     */
    public function login() {
        session()->regenerate();
        return view('auth/melilogin')->with('auth', [
            'url' => meli::getAuthUrl(env('ML_AUTHENTICATION_URL', '')),
        ]);
    }

    public function logout() {
        if(session('profile')) {
            session()->forget('profile');
            session()->flush();
        }
        return \Redirect::to('/auth/melilogin');
    }
}

Но я получаю ошибку:

Нестатический метод App \ Sources \ Meli :: getAuthUrl () не должен вызываться статически

Три процедуры, которые я сделал безуспешно:

1 - использование фасада (мели), как в первом примере

meli :: getAuthUrl

2- замена кода:

public function getAuthUrl($redirect_uri) {
            $params = array("client_id" => $this->client_id, "response_type" => "code", "redirect_uri" => $redirect_uri);
            $auth_uri = $this->urls['AUTH_URL'] . "?" . http_build_query($params);
            return $auth_uri;
        }
    }

на общедоступную статическую функцию и $ self вместо $ this, но безуспешно.

3- Создание динамического вызова с использованием:

    'url' => (new \App\Sources\Meli)->getAuthUrl(env('ML_AUTHENTICATION_URL', '')),

Но при получении ошибки

Слишком мало аргументов для функции App \ Sources \ Meli :: __ construct (), 0 передано в / Applications / MAMP / htdocs / price2b / app / Http /Controllers / MeliController.php

любая помощь приветствуется.

1 Ответ

1 голос
/ 13 мая 2019

Ошибка говорит о проблеме: вы вызываете метод статически (meli::getAuthUrl(...)), но это не статический метод. Вы должны вызвать его в экземпляре класса. Это означает, что ваш третий подход:

'url' => (new \App\Sources\Meli)->getAuthUrl(env('ML_AUTHENTICATION_URL', '')),

правильный.

Но, как вы указали, вы получаете ошибку "слишком мало аргументов". Это потому, что вы не передаете аргументы, когда создаете экземпляр класса Meli. То есть new \App\Sources\Meli эквивалентно new \App\Sources\Meli(), передавая нулевой аргумент конструктору.

Но конструктор для класса Meli, который вы разместили выше, выглядит так:

public function __construct($client_id, $client_secret, $urls = null, $curl_opts = null)

Итак, вам нужно передать как минимум 2 аргумента, а не ноль. Другими словами, как минимум, что-то вроде этого:

'url' => (new \App\Sources\Meli($someClientId, $someClientSecret))->getAuthUrl(env('ML_AUTHENTICATION_URL', '')),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...