allegro / allegro-api

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

Wysyłam z Allegro - problem przy generowaniu listu przewozowego do Allegro Paczkomaty InPost #9127

Open Kuba-Id opened 4 months ago

Kuba-Id commented 4 months ago

Przy próbie generowania listu przewozowego za pomocą API Allegro dla zamówienia: c0587f00-1c19-11ef-b402-fb8526772685

_"message": [ { "code": "CREDENTIALS_ID_NOTPROVIDED", "message": "Seller didnt provide credentials for own delivery Method\nSeller didnt provide credentials for own delivery Method", "details": "Seller didnt provide credentials for own delivery Method", "path": "client credentials", "userMessage": "Wybrana metoda dostawy nie obs\u0142uguje tego zam\u00f3wienia" } ]

Klient wybrał metodę dostawy: 2488f7b7-5d1c-4d65-b85c-4cbcf253fd93

Następująca: _stdClass Object ( [id] => 2488f7b7-5d1c-4d65-b85c-4cbcf253fd93 [name] => Allegro Paczkomaty InPost [paymentPolicy] => IN_ADVANCE [allegroEndorsed] => 1 [shippingRatesConstraints] => stdClass Object ( [allowed] => 1 [maxQuantityPerPackage] => stdClass Object ( [max] => 999999 )

        [maxPackageWeight] => stdClass Object
            (
                [supported] =>
            )

        [firstItemRate] => stdClass Object
            (
                [min] => 0.00
                [max] => 10.95
                [currency] => PLN
            )

        [nextItemRate] => stdClass Object
            (
                [min] => 0.00
                [max] => 0.00
                [currency] => PLN
            )

        [shippingTime] => stdClass Object
            (
                [default] => stdClass Object
                    (
                        [from] => PT24H
                        [to] => PT24H
                    )

                [customizable] =>
            )

    )

[marketplaces] => Array
    (
        [0] => allegro-pl
    )

)_

I taka też jest używana w żądaniu do API.

Co oznacza błąd: CREDENTIALS_ID_NOT_PROVIDED Jakie dane nie zostały podane? Umowa własna z InPostem jest dodana w panelu, wraz z danymi autoryzacyjnymi do Api ShipX Inpostu.

trace-id = 802a14b0096ef4

Będę wdzięczny za pomoc!

Lukasz-Zurek commented 4 months ago

Dla wskazanej metody dostawy, w polu "credentialsId", musisz wskazać identyfikator wspomnianej umowy własnej. Opisaliśmy to również w naszym poradniku.

W tym konkretnym przypadku nie wskazałeś tych informacji, dlatego zwróciliśmy cytowany błąd.

Kuba-Id commented 4 months ago

Dwa pytania:

  1. W jaki sposób można pobrać/podejrzeć identyfikatory umów własnych? https://developer.allegro.pl/documentation/#operation/getDeliveryServices - nie zwraca informacji na temat umów własnych?

  2. https://developer.allegro.pl/documentation/#operation/createNewParcel Jak za pomocą podanej metody przekazać identyfikator umowy własnej? Tak samo, za pomocą parametru: credentialsId ? W którym miejscu ma być przekazany?

Lukasz-Zurek commented 4 months ago

@Kuba-Id Na wstępie zaznaczę, że obecnie w naszym API wspieramy dwa podejścia dla tworzenia przesyłek w ramach usługi “Wysyłam z Allegro”:

Dlatego sugeruję korzystać z zasobów /shipment-management.


  1. Jeśli chodzi o nasz nowy zasób GET /shipment-management/delivery-services - identyfikatory umów własnych (pod warunkiem, że zostały one dodane na koncie, w ustawieniach umów własnych, w zamówieniach) zwracamy w polu „credentialsId”.

Następnie tworzysz przesyłkę za pomocą POST /shipment-management/shipments/create-commands, gdzie w polu:

  1. W przypadku starego zasobu GET /parcel-management/delivery-services, sytuacja wygląda inaczej. Dla umów własnych tworzymy dedykowane usługi dostawy odpowiadające metodom. Identyfikator każdej usługi (“deliveryServices.id”) otrzymuje konstrukcję: id_metody#id_umowy_wlasnej, np. metoda dostawy: b20ef9e1-faa2-4f25-9032-adbea23e5cb9 ("Allegro Paczkomaty InPost pobranie") - usługa dostawy: b20ef9e1-faa2-4f25-9032-adbea23e5cb9#abcdef-ghij-klmn-opqrs123.

Czyli chcąc utworzyć nową przesyłkę za pomocą PUT /parcel-management/parcel-create-commands/{commandId}, usługę dostawy wraz z umową własną przekazujesz w polu „serviceId”, w formacie jak wyżej, czyli np. b20ef9e1-faa2-4f25-9032-adbea23e5cb9#id_umowy_własnej.

Kuba-Id commented 4 months ago

Problem. Brak dostępu do podanego zasobu: https://api.allegro.pl/shipment-management/delivery-services

Odpowiedź API: stdClass Object ( [errors] => Array ( [0] => stdClass Object ( [code] => AccessDenied [message] => Access is denied [details] => [path] => [userMessage] => Brak dostępu do danego zasobu. )

    )

)

Trace Id: e7894e342fd0e740

Będę wdzięczny za pilną pomoc, gdyż kod jest już na produkcji, a mamy paczki do wysyłki :-| Dziękuję!

Lukasz-Zurek commented 4 months ago

@Kuba-Id W Twoim tokenie brakuje uprawnienia (scope'a): [allegro:api:shipments:write]. Musisz ponownie przejść przez proces autoryzacji (od początku). Wtedy będzie ok :)

Kuba-Id commented 4 months ago

Dziękuję, posunąłem się dalej :-) Lecz jest problem z nadaniem przesyłki.

( [url] => https://api.allegro.pl/shipment-management/shipments/create-commands [content_type] => application/vnd.allegro.public.v1+json [http_code] => 404 ... )

Przekazywane przy żądaniu POST są następujące nagłówki: array(4) { [0]=> string(22) "Accept-Language: pl-PL" [1]=> string(1420) "Authorization: bearer ...." [2]=> string(60) "Accept: application/vnd.allegro.public.v1+json;charset=UTF-8" [3]=> string(52) "Content-Type: application/vnd.allegro.public.v1+json" }

Odpowiedź API:

Response:stdClass Object ( [errors] => Array ( [0] => stdClass Object ( [code] => NOT_FOUND [message] => The specified resource was not found [details] => [path] => [userMessage] => Podany zasób nie został odnaleziony ) ) )

Trace-id: b41f554dae5de512

Dlaczego otrzymuję odpowiedź, że podany zasób nie istnieje? hmm...

Literówki w nazwie zasobu nie ma, co jest zatem przyczyną podanej odpowiedzi z API? Będę wdzięczny za pomoc!

Lukasz-Zurek commented 4 months ago

@Kuba-Id Z tego co widzę - w nagłówku Content-type przekazujesz: application/vnd.allegro.public.v1+json, application/x-www-form-urlencoded, czyli zamiast przecinka (pomiędzy application/vnd.allegro.public.v1+json a application/x-www-form-urlencoded) powinieneś przekazać średnik, wtedy żądanie przejdzie. Generalnie dla tego zasobu wymagamy jednej wartości application/vnd.allegro.public.v1+json.

Kuba-Id commented 4 months ago

Wysłałem tak jak Pan mówi bez nagłówka "www-form-urlencoded"

I inny komunikat:

{"errors":[{"code":"ERROR","message":"The object sent cannot be properly parsed","details":null,"path":"command","userMessage":"Nie można prawidłowo sparsować przesłanego obiektu"}]}

[trace-id] => 3cb05fa0344ded26

EDIT: 'additionalServices' => null, 'additionalProperties' => null,

Zrobiłem jako NULL, zgodnie z wątkiem https://github.com/allegro/allegro-api/issues/7756 I dalej jest problem.

trace-id = 9d33b7bdffa5025e

Co tam jeszcze jest nie tak? hmm...

Lukasz-Zurek commented 4 months ago

@Kuba-Id Niestety z logów wynika, że kod się "posypał". Jeżeli potrzebujesz przekazać w content-type obie wartości, włącznie z application/x-www-form-urlencoded - przekaż wartości oddzielając je średnikiem.

Kuba-Id commented 4 months ago

Panie Łukaszu, a co dokładnie się posypało? Można prosić o szczegóły? Całość zrobione wg. dokumentacji, Wasze parser powinien zwracać precyzyjniejsze informacje :-|

( [commandId] => 5e39d673-bfbe-45eb-b63c-7e4c75fcdc7e [input] => Array ( [deliveryMethodId] => 2488f7b7-5d1c-4d65-b85c-4cbcf253fd93 [credentialsId] => dc0e3746-7bf3-4e44-8c20-68dd0d8fb3c0 [sender] => Array ( [name] => ******** [company] => ******** [street] => ******** [streetNumber] => ******** [postalCode] => 61-007 [city] => Poznań [countryCode] => PL [email] => ******** [phone] => ******** ) [receiver] => Array ( [name] => ******** [street] => ******** [streetNumber] => 3 [postalCode] => 86-005 [city] => ******** [countryCode] => PL [email] => x24est9f2x+74f318071@allegromail.pl [phone] => ******** [point] => MWC01APP ) [referenceNumber] => 131035 [description] => Akcesoria rowerowe [packages] => Array ( [0] => Array ( [type] => PACKAGE [weight] => Array ( [value] => 0.8 [unit] => KILOGRAM ) [length] => Array ( [value] => 58 [unit] => CENTIMETER ) [width] => Array ( [value] => 30 [unit] => CENTIMETER ) [height] => Array ( [value] => 30 [unit] => CENTIMETER ) ) ) [insurance] => Array ( [amount] => 62.98 [currency] => PLN ) [labelFormat] => PDF ) )

Odpowiedź: The object sent cannot be properly parsed

[trace-id] => c7595bc7b17ca0b2

To przykład wszystkich pól, co tutaj mianowicie się "posypało" - bo informacja jest dla mnie bardzo enigmatyczna.

Lukasz-Zurek commented 4 months ago

@Kuba-Id Otrzymujemy od Ciebie taki oto request (w załączeniu wycięta część):

commandId=5e39d673-bfbe-45eb-b63c-7e4c75fcdc7e&input%5BdeliveryMethodId%5D=2488f7b7-5d1c-4d65-b85c-4cbcf253fd93&input%5BcredentialsId%5D=dc0e3746-7bf3-4e44-8c20-68dd0d8fb3c0&input%5Bsender%5D%5Bname%5D=

w odpowiedzi na który zwracamy błąd:

{"errors":[{"code":"ERROR","message":"The object sent cannot be properly parsed","details":null,"path":"command","userMessage":"Nie można prawidłowo sparsować przesłanego obiektu"}]}

Wszystko wskazuje na to, że problem leży po Twojej stronie. Jeśli jednak nadal masz wątpliwości, prześlij cały request (ze wszystkimi danymi) w formacie json, korzystając z formularza kontaktowego. Na podstawie powyższych danych nie jestem w stanie dokładnie zweryfikować, które dane zostały przekazane w nieprawidłowy sposób.

stale[bot] commented 4 months ago

W tym wątku nie pojawiła się żadna nowa odpowiedź w ciągu 7 dni, dlatego automatycznie oznaczamy go jako przeterminowany. Jeśli w ciągu kolejnych 7 dni nie pojawi się żadna odpowiedź, wątek zostanie zamknięty. Dziękujemy za zaangażowanie w dyskusję i zachęcamy Cię do wypełnienia ankiety dotyczącej naszego wsparcia na forum.


There was no new reply in this thread within 7 days, therefore, we automatically marked it as expired. If no response is received within the next 7 days, this thread will be closed. Thank you for engaging in the discussion. We encourage you to complete our forum support survey.