php-allegro-rest-api icon indicating copy to clipboard operation
php-allegro-rest-api copied to clipboard

Problem z pobraniem kategorii

Open pokash opened this issue 5 years ago • 11 comments

Witam, na początek chciałbym pochwalić przejrzystość biblioteki :) Super pomysł.

Niestety nie wiem dlaczego mam jednak z nią problem podczas pobierania kategorii... Api zwraca następujący błąd, gdy wywołuję ApiTest.php:

{"errors":[{"code":"NotAcceptableException","message":"Not acceptable representation requested. Please check 'Accept' request header","details":null,"path":null,"userMessage":"The request contains incorrect data. Contact the author of the application."}]}

Oczywiście zmieniłem już na początku adres URL Api, gdyż zapisany w pliku allegroapi.io jest wyłączony. Wszystkie dane zostały wprowadzone. Listowanie produktów (które jest w dalszej części) działa. Niestety listowanie kategorii nie działa. Czy mogę prosić o wsparcie w rozwiązaniu tego problemu?

Pozdrawiam, Łukasz

pokash avatar Nov 19 '19 14:11 pokash

Czy udało Ci się rozwiązać problem?

mleplawy avatar Dec 30 '19 12:12 mleplawy

@mleplawy tak :) problem udało się dość szybko rozwiązać

pokash avatar Dec 30 '19 12:12 pokash

@pokash a jak go rozwiązałeś? ja mam problem. swoją drogą działa Ci biblioteka poprawnie ? zmieniłem oczywiście URL api ale z dnia na dzień przestała działać

mleplawy avatar Dec 30 '19 12:12 mleplawy

@mleplawy odświeżyłeś access token? Powinien być aktualizowany co 24 godziny, gdyż tyle jest ważny. Biblioteka działa poprawnie. Korzystam z niej w swoim module do PrestaShop. Wywoływanie kolejnych metod API wygląda tak: /sale/categories $this->api->sale->categories()->get($params)

, gdzie w zmiennej $params wstawiasz: $params=array('parent.id' => $category);

, zgodnie z dokumentacją:

parent.id | stringDefault: "954b95b6-43cf-4104-8354-dea4d9b10ddf"The ID of the category which children should be returned. If omitted, the list of main Allegro categories will be returned.

Tak samo robisz z pobieraniem parametrów: $category = Tools::getValue('id_category') ? Tools::getValue('id_category') : ''; $this->api->sale->categories($category)->parameters->get();

/sale/categories/{categoryId}/parameters

Mam nadzieję, że udało mi się poprawnie naświetlić czytanie i implementowanie biblioteki do RESTApi :)

Jeżeli będziesz miał jeszcze jakieś pytania, to pisz śmiało :)

Pozdrawiam, Łukasz

pokash avatar Dec 30 '19 12:12 pokash

Dzięki bardzo za szybką odpowiedź mój problem jest niestety nieco inny a już przy samym generowaniu tokenu zwracany jest błąd Adnotacja 2019-12-30 143922 $api = new Api($clientId, $clientSecret, $apiKey, $url, null, null); taki mam konstruktor $apiKey jest nullem bo wg allegro jest on od webapi a nie od restapi

mleplawy avatar Dec 30 '19 13:12 mleplawy

@mleplawy nie do końca :) API Key = WebKey :) Definicja obiektu Api zaimplementowanego w Presta wygląda tak: $this->api = new Api( Configuration::get('PS_ALLEGRO_CLIENT_ID_KEY'), Configuration::get('PS_ALLEGRO_CLIENT_SECRET'), Configuration::get('PS_ALLEGRO_CLIENT_ID_KEY'), Configuration::get('PS_ALLEGRO_REDIRECT_URL').$token, null, null);

Jak widzisz PS_ALLEGRO_CLIENT_ID_KEY jest wpisany w dwóch miejscach (tam gdzie ma się znaleźć Client ID / klucz WebAPI). Obie zmienne muszą zostać zdefiniowane. Sprawdź czy to zadziała i daj znać :) jeżeli to nie to, to poszukamy innego rozwiązania.

Pozdrawiam, Łukasz

pokash avatar Dec 30 '19 14:12 pokash

Dzięki za pomoc tak też próbowałem tj $api = new Api($clientId, $clientSecret, $clientId, $url, null, null); ale niestety to samo sprawdziłem dla pewności i ściągnąłem sobie z repo wersję która działała na 100% i nadal to samo zarejestrowałem nową aplikację i wpisałem jej dane Adnotacja 2019-12-30 151341

mleplawy avatar Dec 30 '19 14:12 mleplawy

Na dole masz na pewno $_GET['code']? Bo wydaje się, że jest tam spacja...

Autoryzacja powinna odbywać się na takiej zasadzie: $authUri = $this->api->getAuthorizationUri(); header("Location: $authUri"); , a następnie: $response = $this->api->getNewAccessToken($code);

Pamiętaj, aby zaaplikować to w odpowiednim typie. U mnie masz kod ułożony pod programowanie obiektowe :)

Pozdrawiam, Łukasz

pokash avatar Dec 30 '19 14:12 pokash

mam dokładnie jak ty zastanawiam się czy allegro mi IP nie zablokowało. `

<head>
    <meta charset="UTF-8">
    <title>dostepnosc</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>

    <?php
    echo "<center>";
    session_start();

    require_once 'Resource.php'; //classes
    require_once 'Api.php';  //classes
    require_once 'Commands.php'; //classes
    $clientId = '6199ed38537e4XXXXXXXXXXXXXXXXXX;
    $clientSecret = 'TJorw0P8SkKW69qEvTfRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgt2';
    $apiKey = $clientId;
    $url = "http://10.0.1.132/aplikacje/dostepnosc/restAllegro.php";
    $api = new Api($clientId, $clientSecret, $clientId, $url, null, null);

    $code = $_GET['code'];
    $ids = $_SESSION["id"];
    $symbol = $_SESSION["symbol"];

// parameter needed for authorisation - returned by Allegro while two-phase auth method if (strlen($code) < 3) { // run once - for authorization code passing to allegro $authUri = $api->getAuthorizationUri(); echo $authUri . "


"; // IMPORTANT!!!!! // You may have to run it once manually - uncoment the above line, copy from browser output // paste & execute in browser being Loged in to allegro. It asks ( allegro web page ) You // if You agree to run program named [ name_given_while_registration_process ]. You should // probably agree ;-) header("Location: $authUri"); exit; } // for my lazy character: // define ('RESTAPI' , 'https://allegroapi.io'); // ### Getting new token ### $response = $api->getNewAccessToken($code); // # response contains json with your access_token and refresh_token // Look how token looks like - just to see it, You might never know how it is.... echo $response; echo "
";

    $data2 = array(
        'offerCriteria' =>
        array(
            0 =>
            array(
                'offers' =>
                array(
                    0 =>
                    array(
                        'id' => $ids,
                    ),
                ),
                'type' => 'CONTAINS_OFFERS',
            ),
        ),
        'publication' =>
        array(
            'action' => 'END',
        ),
    );
    echo "<br/>";
    $response2 = $api->sale->commands()->offer_publication($data2);
    echo $response2;
    echo "USUNIĘTO aukcje " . $ids . " sprawdź czy aukcja zeminiła status<br/><a href='http://allegro.pl/i" . $ids . ".html'>" . $ids . "</a>";

    echo "<h3><a href='http://10.0.1.132/aplikacje/dostepnosc/index.php?dostepnosc=" . $symbol . "'>wróć</a></h3>";

    echo "</center>";
    ?>
</body>
`

mleplawy avatar Dec 30 '19 14:12 mleplawy

Możliwe, że i tak może być. Prześlij zgłoszenie do Allegro, a dodatkowo otwórz wątek na GitHub. Powinni pomóc rozwiązać ten problem. Dodatkowo możesz spróbować na jakimś zewnętrznym serwerze to przetestować, czy będzie działać :)

pokash avatar Dec 30 '19 15:12 pokash

założyłem już wątek na githubie allegrowym, https://github.com/allegro/allegro-api/issues/2661 sprawdziłem przed chwilą na innym IP problem jest ten sam

mleplawy avatar Dec 30 '19 15:12 mleplawy