allegro / allegro-api

Issue tracker and wiki for Allegro REST API
https://developer.allegro.pl/
213 stars 39 forks source link

Dodawanie zdjęcia rest api #293

Closed Daniel820 closed 5 years ago

Daniel820 commented 6 years ago

Od kilku dni próbuję dodać zdjęcie za pomocą rest api. Rozwiązanie próbuję zaimplementować w moim autorskim cmsie napisanym w php. Do przesyłania danych wykorzystuję curl. Próbowałem na wiele sposobów przesłać mój plik zdjęcia .png 800x800px, próbowałem go kompresować przesyłać binarnie.

Nie znalazłem w dokumentacji punktu sale/images

Zawsze dostaję 415 co by wskazywało na nieprawidłowość pliku działam na $this->upload_link = 'https://upload.allegro.pl.allegrosandbox.pl/';

Moja ostatnia próba zakończona niepowodzeniem 415 ` $image = "./uploads/products/37/135/a7762f18a5ffdc6f18298c82293e5511.png"; // be careful that the path is correct $datab = file_get_contents($image); $post = $datab; $headers = array( "accept: application/vnd.allegro.beta.v1+json", "Authorization: Bearer {$this->token()}", 'content-type: "image/png","image/jpg","image/jpeg","image/gif","text/plain"', 'accept-language: pl-PL' );

    //$post = array('binary-data' => $cFile);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->upload_link.'sale/images');
    curl_setopt($ch, CURLOPT_POST, 1);
    //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        print curl_error($ch);
    }
    //$info = curl_getinfo($ch);
    //echo json_encode($info) . '<br>';
    echo curl_getinfo($ch, CURLINFO_HTTP_CODE) . '<br>';
    //echo json_encode($result);
    die();`

Jak zmodyfikować kod aby to w końcu zadziałało, lub co powinienem zrobić?

KrzysztofLukanowski commented 6 years ago

Cześć,

zasób images wkrótce znajdzie się w dokumentacji, tymczasem więcej na ten temat możesz przeczytać w tutorialu.

Sprawdziłem poprawnośc działania zarówno na allegro, jak i na sandboxie, jest okej. Przeczytaj nasz tutorial i zwróć uwagę, czy uderzasz na prawidłowy adres: https://api.allegro.pl.allegrosandbox.pl/sale/images poprawka- https://upload.allegro.pl.allegrosandbox.pl/sale/images

kormichu commented 6 years ago

Zła forma nagłówka HTTP:

'content-type: "image/png","image/jpg","image/jpeg","image/gif","text/plain"',

Wybierz jeden typ bez "ciapek" i na pewno nie ostatni

r3w3r5 commented 6 years ago

Ja również dostaję za każdym razem 415 po próbie uploadu na https://upload.allegro.pl/sale/images bez względu czy puszczam jpg, czy png. Obrazki zgodne z wytycznymi (600x600px), przechodzą normalnie przez ms.allegro.pl content-type generowane dynamicznie. Mój nagłówek requestu dla jpg: POST /sale/images HTTP/1.1 Host: upload.allegro.pl accept-language: pl-PL Authorization: Bearer {token} Accept: application/vnd.allegro.beta.v1+json Content-Length: 112942 Expect: 100-continue Content-Type: image/jpeg; boundary=------------------------1efb9b92d8022fbb

Daniel820 commented 6 years ago

Udało się napisać działający kod dzięki wskazówce kormichu `public function test(){ if (function_exists('curl_file_create')) { // php 5.5+ $cFile = curl_file_create('./uploads/products/37/135/a7762f18a5ffdc6f18298c82293e5511.png','image/png','test_name'); }

    $image = "./uploads/products/37/135/a7762f18a5ffdc6f18298c82293e5511.png"; // be careful that the path is correct
    $datab = file_get_contents($image);
    $post = $datab;
    $headers = array(
        "accept: application/vnd.allegro.beta.v1+json",
        "Authorization: Bearer {$this->token()}",
        'content-type: image/png',
        'accept-language: pl-PL'
    );

    //$post = array('binary-data' => $cFile);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->upload_link.'sale/images');
    curl_setopt($ch, CURLOPT_POST, 1);
    //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    echo json_encode($result);
    if (curl_errno($ch)) {
        print curl_error($ch);
    }
    //$info = curl_getinfo($ch);
    //echo json_encode($info) . '<br>';
    echo curl_getinfo($ch, CURLINFO_HTTP_CODE) . '<br>';
    //echo json_encode($result);
    die();
    curl_close($ch);

}`
PiotrLaszczyk commented 5 years ago

Próbuje z pythona3 zrobić to samo, czyli upload obrazka

    plik = open('test.jpg', 'rb')    -> tylko po to żeby sprawdzić że test.jpg jest dostępny

    response = requests.post(url='https://upload.allegro.pl/sale/images',
                data=open('test.jpg', 'rb'),
                headers={'Content-Type': 'image/jpg', 'Authorization': "Bearer {}".format(accessToken), 
                         'Accept': 'application/vnd.allegro.public.v1+json', 'Accept-Language': 'pl-PL'})
    print(response.json())

w odpowiedzi dostaje:

{'errors': [{'code': 'NotSupportedException', 'message': 'An error has occurred', 'details': None, 'path': None, 'userMessage': 'An error occurred'}]}

Nie ma sensownego błędu więc ciężko wywnioskować jaka jest przyczyna.

PawelTaberski commented 5 years ago

Hej z tego co nagłówek masz błędny zmień jpg na jpeg :-) i będzie śmigać. Dokładny opis tej metody znajdziesz w tym poradniku.

stale[bot] commented 5 years ago

W tym wątku nie pojawiła się żadna nowa odpowiedź w ciągu 30 dni. Dlatego automatycznie oznaczamy go jako przeterminowany. Jeśli w ciągu 7 dni nie pojawi się żadna odpowiedź, zamkniemy ten wątek. Dziękujemy za zaangażowanie w dyskusję.

Qenozis commented 5 years ago

Cześć,

zasób images wkrótce znajdzie się w dokumentacji, tymczasem więcej na ten temat możesz przeczytać w tutorialu.

Sprawdziłem poprawnośc działania zarówno na allegro, jak i na sandboxie, jest okej. Przeczytaj nasz tutorial i zwróć uwagę, czy uderzasz na prawidłowy adres: https://api.allegro.pl.allegrosandbox.pl/sale/images poprawka- https://upload.allegro.pl.allegrosandbox.pl/sale/images

@KrzysztofLukanowski Cześć,

Hej z tego co nagłówek masz błędny zmień jpg na jpeg :-) i będzie śmigać. Dokładny opis tej metody znajdziesz w tym poradniku.

@PawelTaberski

Panowie z Allegro, może w końcu postaracie się o porządny opis oraz zabezpieczenia wewnątrz własnego kodu z odpowiednimi komunikatami, bo z takimi bylejakimi komunikatami od was nie da się pracować, przykład poniżej:

{"errors":[{"code":"ERROR","message":"An error has occurred","details":null,"path":"/sale/images","userMessage":null}]}

PS: Jeśli upieracie się, że u Was działa, tzn że macie zrobione niezgodnie z tym "dokładnym opisem", więc jak?

PawelTaberski commented 5 years ago

@Qenozis Przetestowałem jeszcze przed sekundą. Wszystko znajduje się w naszej dokumentacji. Przy opisach zasobów nie podajemy za każdym razem adresu wywołania na środowisku testowym i produkcji. Pokazujemy przykładowe użycie tylko na produkcji. Opis tego zasobu tak jak podlinkowałeś znajduje się tutaj. Natomiast adresy do środowiska testowego znajdziesz tutaj. W przypadku tego zasobu prawidłowy adres wywołania to: https://upload.allegro.pl.allegrosandbox.pl/sale/images Przykładowe wywołanie: curl -X POST \ https://upload.allegro.pl.allegrosandbox.pl/sale/images \ -H 'Authorization: Bearer tu wklej token' \ -H 'accept: application/vnd.allegro.public.v1+json' \ -H 'content-type: image/png'

Qenozis commented 5 years ago

@PawelTaberski Tak robię jak opisałeś, a w wyniku dostaję nic poza komunikatem błędu (również sprawdzane przed sekundą): status 0, nr błędu 26, treść błędu: couldn't open file "tutaj adres zdjęcia", adres sprawdzałem - działa poprawnie. Skoro robię wszystko dobrze, to dlaczego po stronie Allegro działa źle?

Żeby nie było dziwnych podejrzeń to wywołuję URL: https://upload.allegro.pl.allegrosandbox.pl/sale/images PS: adres podanego w wywołaniu zdjęcia nie jest z localhosta, jest na 100% prawidłowy. Uzupełniając - w headerach wysyłam tylko:

PawelTaberski commented 5 years ago

Podeślij proszę przez nasz formularz kontaktowy pełnego cURL-a z responsem z błędem i trace ID dodatkowo dodaj clientID sprawdzimy w czym jest problem z Twoimi requestami. W zgłoszeniu zaznacz, że informacje są potrzebne do ticketa numer 293 na GitHub-ie.

Qenozis commented 5 years ago

@PawelTaberski przed chwilą wysłałem poprzez formularz kontaktowy kod PHP, którym testuję wgrywanie zdjęć na Sandbox, z zaznaczeniem, że dotyczy ticketa numer 293 na GitHub-ie. Zaznaczyłem tam również drugi adres do zdjęcia, który również nie chce zadziałać.

O dziwo... przed chwilą zadziałał mi sposób z załadowaniem zawartości zdjęcia funkcją file_get_contents od razu do parametru "CURLOPT_POSTFIELDS" (wyżej jest skrypt z tym sposobem napisany przez @Daniel820 ). Wczoraj nie chciało działać! Próbowałem wielokrotnie. Coś zostało poprawione po stronie Sandboxa? Bo u mnie na pewno nic się nie zmieniło w kodzie.

PawelTaberski commented 5 years ago

@Qenozis W oryginalnym kodzie @Daniel820 był problem z content-type, dlatego mogło Tobie nie działać. Odnośnie Twojego requesta nie ma możliwości przesłania bezpośrednio z neta grafiki, musisz ją najpierw zaciągnąć lokalnie np funkcją file_get_contents. Co do konkretnej grafiki musisz sobie jakoś ją nadpisywać, bądź zmieniać jej typ, że u nas na końcu nie jest uznawana za dozwolone rozszerzenie. Pobrałem testowo Twoją grafikę i bez problemu wysyła się na nasz serwer. Sprawdź, czy po drodze nie zmieniasz gdzieś rozszerzenia i czy na pewno na serwerze masz tak zapisaną ta grafikę. Jeśli jesteś pewny, że nigdzie nic nie nadpisujesz podaj proszę trace-id takiego sprawdzimy co się dzieje z tym responsem.

Qenozis commented 5 years ago

@PawelTaberski Narazie wyżej wspomniane rozwiązane, które mi zadziałało - wciąż działa, więc tak to zostawię. Inne metody, które zgłosiłem przez formularz, wypróbowałem tylko dlatego, że ta nie chciała zadziałać, a wyglądały one na bliskie opisowi tego zasobu.

PS: proszę o aktywację konta na Sandboxie o nazwie -INTGL-, bo nie mogę opublikować aukcji, a ta aktywacja samodzielna na Sandboxie czasami wyrzuca tylko error albo nic nie robi :/

PawelTaberski commented 5 years ago

@Qenozis Wstępnie zaakceptowałem Twoje konto, a by w pełni aktywować konto firma przejdź do zakładki moje konto i wyślij do nas we wniosku jakieś dowolne 2 pliki.

no-response[bot] commented 5 years ago

Automatycznie zamknęliśmy wątek, ponieważ nie otrzymaliśmy niezbędnych danych. Jeśli problem nadal występuje, to wznów wątek i prześlij do nas informacje, o które prosiliśmy.

mleczkopawel commented 5 years ago

Mam nadzieję że nie jest za późno, ale mam taki problem, że jak dodaję do jakiego kolwiek drafta zdjęcia, to nie ma ich później w sandbox, gdyż robię tak, że dodaję przez api nazwę produktu, opis (w nim również zdjęcia) i zdjęcia, natomiast jak chcę dokończyć kilka minut później produk, to już nie ma tych zdjęć w sandbox, czy można prosić o pomoc?

PawelTaberski commented 5 years ago

Przy każdym przesłanym zdjęciu dostajesz również informacje kiedy usuniemy dane zdjęcie jeśli nie zostanie użyte, czy sprawdzałeś te czasy?

mleczkopawel commented 5 years ago

Tak, te czasy są dużo dłuższe, ja to robię dosłownie kilka minut po, co ciekawsze, jak wybieram którego drafta chcę edytować, to tam jest zdjęcie, tylko później po wyborze kategorii już brak.

PawelTaberski commented 5 years ago

Przetestowałem i dodawanie zdjęć jak i później wystawienie ofert z tymi zdjęciami działa poprawnie. Nie bardzo rozumiem co dokładnie robisz i czy wszystkie czynności wykonujesz po API. Rozumiem, że najpierw dodajesz zdjęcie zasobem POST /sale/images, potem tworzysz draft POST /sale/offers i uzupełniasz go PUT /sale/offers/{offerId}, a nastepnie aktywujesz ofertę. I w którym momencie dokładnie zauważasz błąd i jaki dostajesz komunikat?

mleczkopawel commented 5 years ago

Dokładnie rzecz biorąc robię coś takiego:

  1. Wysyłam zdjęcia POST /sale/images,
  2. Tworzę draft POST /sale/offers, gdzie przesyłam informacje takie jak: name, description, images i reszta wymaganych rzeczy,
  3. Przechodzę na stronę https://allegro.pl.allegrosandbox.pl/offer/
  4. Wybieram draft przedmiotu (w tym miejscu mam widoczne jego zdjęcie)
  5. Wybieram kategorię i następuje przeładowanie
  6. Po tym przeładowaniu, mam formularz do uzupełnienia gdzie mogę również załadować zdjęcia, niestety nie ma tam żadnych plików załadowanych, jak również w opisie przedmiotu (gdzie też dodałem zdjęcie) nie ma dodanego zdjęcia.

Chyba cały flow.

PawelTaberski commented 5 years ago

Czy problem dalej u Ciebie występuje bo zrobiłem tak jak napisałeś i bez problemu mogę zmieniać kategorie, a opis i zdjęcia pozostają bez zmian. Próbowałeś na innej przeglądarce.

Agrrr2001 commented 4 years ago

Dzień dobry. Próbuje przesłać curlem zdjęcie typu gif na produkcji na adres https://upload.allegro.pl/sale/images

z nagłówkami -H "Accept: application/vnd.allegro.public.v1+json" -H "Content-Type: image/gif" -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJle...." -H "Accept-Language: pl-PL"

zarówno sposobem który przyjmuje url "https://polotent.pl/uploads/boxes/dynamic/namioty_handlowe_magazynowe_kurtyna_600.gif"

jak i sposobem wysłania wersji binarnej z lokala opisany przez Daniel820 zwraca następujący błąd.

Niedozwolony typ zdjęcia. 415 UNSUPPORTED_MEDIA_TYPE/

Pragnę też zaznaczyć że przy próbie wysłania png i zmianie Content type na image/png wszystko działa poprawnie.

Pytanie brzmi czy w obecnej chwili wysyłanie gifów jest możliwe i jeśli tak to co muszę ustawić w nagłówkach lub w request aby wysłać gifa?

PrzemyslawLukanowski commented 4 years ago

@Agrrr2001 Otrzymujesz taki błąd, ponieważ nie przyjmujemy plików typu gif. Zaktualizowaliśmy dokumentację w tym temacie.

Agrrr2001 commented 4 years ago

A czy ręcznie się da dodać do aukcji gifa, poniewarz znalazłem aukcje na której taki gif się znajduje. https://allegro.pl/oferta/okragly-gramofon-na-korbe-dab-2-plyty-uk-8409968829?fbclid=IwAR3Qy73W3NmDg1Lra_QVnEF23K98JkTMQZhZe77YmnKeaIjkHYGy5QMUhto sam gif: https://a.allegroimg.com/s128/01ae42/6202d2f64cb0a566ab2a56b60c4e/OKRAGLY-gramofon-na-korbe-DAB-2-plyty-UK

PrzemyslawLukanowski commented 4 years ago

Ręcznie przez formularz również nie da się dodać gifa. Przywołany przez Ciebie obrazek prawdopodobnie został przesłany na nasze serwery, kiedy udostępnialiśmy możliwość wysyłania plików tego typu.

porterpce commented 2 years ago

Ręcznie przez formularz również nie da się dodać gifa. Przywołany przez Ciebie obrazek prawdopodobnie został przesłany na nasze serwery, kiedy udostępnialiśmy możliwość wysyłania plików tego typu.

Przemysław minęły 2 lata od ostatniej odpowiedzi w tym wątku. Może się coś zmieniło ? idzie łatwiej dodać takie zdjęcie na allegro w miniaturze? bo dla mnie te kody to czarna magia...

PrzemyslawLukanowski commented 2 years ago

@porterpce Sytuacja się nie zmieniła - nadal nie wspieramy obrazków w formacie gif.

porterpce commented 2 years ago

Dziękuje bardzo za odpowiedz. Czytałem cały ten wątek na githubie ale tam to jest dla mnie dalej czarną magią dodawanie tego gifu... Próbowałem podmieniać zdjęcia w aukcji za pomocą platformy shoper ale nie łudziłem się że to będzie działać i efekt końcowy oczywiście taki że to nie działa bo błąd wyskakuje . Ma Pan jakiś pomysł łatwiejszy jakby można było to dodawać?Temat: Re: [allegro/allegro-api] Dodawanie zdjęcia rest api (#293)Data: 2021-10-13 8:15Nadawca: "PrzemyslawLukanowski" Adresat: "allegro/allegro-api" ; DW: "porterpce" ; "Mention" ;

@porterpce Sytuacja się nie zmieniła - nadal nie wspieramy obrazków w formacie gif.

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications on the go with GitHub Mobile for iOS or Android.

PrzemyslawLukanowski commented 2 years ago

Jak wspomniałem wyżej - nie obsługujemy plików gif, dlatego błędy będą pojawiać się za każdym razem przy próbie wgrania obrazka takiego typu.

porterpce commented 2 years ago

Tak tak wiem jakie są wymagania w dodawaniu zdjęć w allegro ale jakimś sposobem tutaj w tej aukcji widzę że jest zdjęcie podmienione na gif który się obraca. https://allegro.pl/oferta/gramofon-z-glosnikami-winyl-klasyka-gratis-lp-8779775221I właśnie tak mnie to zaintrygowało że zrobiłem wczoraj na szybko jednego gifa i kombinuje czym i jak go dodać żeby to tak śmigałoTemat: Re: [allegro/allegro-api] Dodawanie zdjęcia rest api (#293)Data: 2021-10-13 14:58Nadawca: "PrzemyslawLukanowski" Adresat: "allegro/allegro-api" ; DW: "porterpce" ; "Mention" ;

Jak wspomniałem wyżej - nie obsługujemy plików gif, dlatego błędy będą pojawiać się za każdym razem przy próbie wgrania obrazka takiego typu.

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications on the go with GitHub Mobile for iOS or Android.

PrzemyslawLukanowski commented 2 years ago

Rozumiem, wspomniana oferta została wystawiona w okresie, gdy jeszcze przyjmowaliśmy pliki gif. Aktualnie jest to niemożliwe.

porterpce commented 2 years ago

A to dziękuje bardzo za odpowiedź pozdrawiam PatrykTemat: Re: [allegro/allegro-api] Dodawanie zdjęcia rest api (#293)Data: 2021-10-13 15:03Nadawca: "PrzemyslawLukanowski" Adresat: "allegro/allegro-api" ; DW: "porterpce" ; "Mention" ;

Rozumiem, wspomniana oferta została wystawiona w okresie, gdy jeszcze przyjmowaliśmy pliki gif. Aktualnie jest to niemożliwe.

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications on the go with GitHub Mobile for iOS or Android.