allegro / allegro-api

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

Błąd podczas tworzenia przesyłki #8805

Open studiowizjo opened 7 months ago

studiowizjo commented 7 months ago

Korzystając z endpointu: shipment-management/shipments/create-commands tworzymy przesylke i zwrotnie otrzymujemy commandId o wartości: 3ee2446d-cf15-4610-ac69-5f8352ec407a. Korzystając z niego wykonujemy zapytanie na endpoint: shipment-management/shipments/create-commands/3ee2446d-cf15-4610-ac69-5f8352ec407a i otrzymujemy:

{
  "commandId": "3ee2446d-cf15-4610-ac69-5f8352ec407a",
  "status": "ERROR",
  "errors": [
    {
      "code": "PROCESSING_ERROR",
      "message": "Problem with dispatch. Contact us, and we will help as soon as possible.",
      "details": null,
      "path": null,
      "userMessage": "Problem z nadaniem przesyłki. Skontaktuj się z nami. Pomożemy jak najszybciej."
    }
  ],
  "shipmentId": null
}

Co jest przyczyna?

MartaNowaczyk commented 7 months ago

Dziękuję za zgłoszenie. Pracujemy nad rozwiązaniem tego problemu. Przepraszamy za niedogodności.

studiowizjo commented 7 months ago

Przypominam sie w temacie. Czy udalo sie juz moze zdiagnozowac problem?

MartaNowaczyk commented 7 months ago

Pracujemy jeszcze nad poprawką, także proszę o jeszcze trochę cierpliwości.

studiowizjo commented 7 months ago

Ponownie przypominam sie w temacie poniewaz minelo juz 10 dni od zgloszenia.

MartaNowaczyk commented 7 months ago

Wdrożyliśmy poprawkę już dobre kilka dni temu. Jeśli problem nadal występuje proszę o podanie aktualnego trace-id dla odpowiedzi z błędem.

studiowizjo commented 7 months ago

Probowalismy przed weekendem- w piatek i blad dalej wystepowal. Obecnie rowniez wystepuje. Aktualny endpoint, na ktory wysylane jest zapytanie: https://api.allegro.pl/shipment-management/shipments/create-commands/96e7970f-0002-4c28-b4fa-bb1cc5128761, Trace ID: 525e246b476fd86e oraz odpowiedz:

{
  "commandId": "96e7970f-0002-4c28-b4fa-bb1cc5128761",
  "status": "ERROR",
  "errors": [
    {
      "code": "PROCESSING_ERROR",
      "message": "Problem with dispatch. Contact us, and we will help as soon as possible.",
      "details": null,
      "path": null,
      "userMessage": "Problem z nadaniem przesyłki. Skontaktuj się z nami. Pomożemy jak najszybciej."
    }
  ],
  "shipmentId": null
}

Prosba rowniez o informacje kiedy naprawia Panstwo problem, poniewaz napisala Pani, ze wprowadziliscie poprawke kilka dni wczesniej, ale nie pojawila sie zadna odpowiedz z ta informacja.

Rozumiem rowniez, ze flow, ktore stosujemy jest odpowiednie aby wygenerowac przesylke, numer ktory mozna przekazac klientowi oraz wydrukowac dokumenty przewozowe? Slowem, jest to alternatywa dla skorzystania recznie z funkcjonalnosci "Nadaj przesylke", ktora widac w szczegolach zamowienia: https://allegro.pl/moje-allegro/sprzedaz/zamowienia/63807180-fe68-11ee-b91f-033d9f94da9c

screencapture-allegro-pl-moje-allegro-sprzedaz-zamowienia-63807180-fe68-11ee-b91f-033d9f94da9c-2024-04-22-08_03_23

MartaNowaczyk commented 7 months ago

Twoja sprawa jest nadal weryfikowana. Wrócę z informacją. Odpowiadając jeszcze na pytanie jest to odpowiednie flow, które odwzorowuje proces "Nadaj przesyłkę".

MartaNowaczyk commented 6 months ago

Problem powoduje brak podania maskowanego maila wygenerowanego przez Allegro. Postaramy się zwracać odpowiedni komunikat błędu w takim przypadku.

studiowizjo commented 6 months ago

Ok, dziekuje. Mam jeszcze pytanie jesli chodzi o umowy wlasne. Rozumiem, ze korzystajac z API, nawet jesli ma sie wlasna umowe z danym kurierem, to mozna wprowadzic gdzies na koncie (gdzie?) dane do integracji z kurierem i wyslac zapytanie do API aby wygenerowac dokumenty przewozowe, zamiast integrowac sie samodzielnie?

MartaNowaczyk commented 6 months ago

Umowy własne dodasz w ustawieniach zamówień, a w naszym poradniku znajdziesz opis jak z takich umów korzystać.

studiowizjo commented 6 months ago

Dziekuje za wskazanie miejsca, jednak w dokumentacji nie widze stricte informacji w temacie, o ktory pytalem. Czyli czy posiadajac umowe wlasna, mozna korzystajac z API generowac dokumenty przewozowe, tak samo jak w przypadku korzystania z domyslnych form dostawy, za waszym posrednictwem?

AureliuszBrussy commented 6 months ago

@studiowizjo tak, oczywiście można generować przesyłki w ramach umów własnych.

studiowizjo commented 6 months ago

Pytam, ponieważ:

  1. Tworzymy przesylke korzystajac z endpointu: https://api.allegro.pl/shipment-management/shipments/create-commands i zwraca nam on prawidlowo commandId = 0c908688-4da5-488a-b026-a5af8d408762 (Trace ID: 8123d8e518c0de93).
  2. Uzywajac otrzymanego commandId wywolujemy endpoint https://api.allegro.pl/shipment-management/shipments/create-commands/0c908688-4da5-488a-b026-a5af8d408762 (Trace ID: 8c4e8e3613bf743) i otrzymujemy:
{
  "commandId": "0c908688-4da5-488a-b026-a5af8d408762",
  "status": "ERROR",
  "errors": [
    {
      "code": "CREDENTIALS_ID_NOT_PROVIDED",
      "message": "Seller didnt provide credentials for own delivery Method",
      "details": "Seller didnt provide credentials for own delivery Method",
      "path": "credentialsId",
      "userMessage": "Wybrana metoda dostawy nie obsługuje tego zamówienia"
    }
  ],
  "shipmentId": null
}

Przesylka generowana jest dla metody dostawy o ID 2488f7b7-5d1c-4d65-b85c-4cbcf253fd9 (Allegro Paczkomaty InPost).

We wskazanym miejscu na koncie Allegro - https://allegro.pl/moje-allegro/sprzedaz/zamowienia/ustawienia widze 2 umowy wlasne, w tym jedna z InPost o numerze 5435109. Edytujac ja widze, ze jest tam wprowadzony klucz autoryzacyjny.

Na czym wiec w tym przypadku polega problem?

AureliuszBrussy commented 6 months ago

Dla umowy własnej przy tworzeniu przesyłki powinieneś jeszcze przekazać id umowy własnej (pole input.credentialsId). Uzyskasz ją w odpowiedzi dla GET /shipment-management/delivery-services w polu credentialsId przy danej usłudze dostawy.

studiowizjo commented 6 months ago

Dziekuje, dziala. Przesylka zostala utworzona i w kolejnym kroku potrzebowalbym wygenerowac etykiete przewozowa. Potrzebne jest do tego shipmentId. Czy jesli podczas wykonywania 2 powyzszych metod nie zostalo ono zapisane, to mozna je pozniej wyciagnac jakos przez API?

Probowalem korzystajac z endpointu https://api.allegro.pl/order/checkout-forms/a08675e0-071c-11ef-b244-8fcab1eca631/shipment (Trace ID: 5b6013b1657bfd86), ale nie zwraca mi on numerow:

{
  "shipments": [],
}

chociaz na koncie w podgladzie zamowienia: https://allegro.pl/moje-allegro/sprzedaz/zamowienia/f78b0550-086f-11ef-b244-8fcab1eca631?sellerId=41496971 widze 3 numery sledzenia przesylek.

AureliuszBrussy commented 6 months ago

shipmentId uzyskasz tylko w odpowiedzi podczas sprawdzania statusu przesyłki (GET /shipment-management/shipments/create-commands/{commandId}). Posłuż się commandId użytym w momencie tworzenia przesyłki.

stale[bot] commented 6 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.

studiowizjo commented 6 months ago

Jest jeszcze pewien problem z tym powiązany. Wykonując zapytanie na endpoint: https://api.allegro.pl/order/shipment-management/shipments/cb1dd96d-0d6c-4481-95a3-1ea08f563cfb otrzymuje:

{
    "errors": [
        {
            "code": "NotFoundException",
            "message": "Not found",
            "details": null,
            "path": null,
            "userMessage": "Funkcja niedostępna. Skontaktuj się z autorem aplikacji."
        }
    ]
}

Trace ID: 17a03b2a8961d752

W tym przypadku podano maskowany adres klienta. Co jest więc przyczyną problemów?

MartaNowaczyk commented 6 months ago

Poprawne wywołanie powinno być bez "order": GET /shipment-management/shipments/{shipmentId}

studiowizjo commented 6 months ago

Mam jeszcze problem z korzystaniem z endpointu: shipment-management/shipments/create-commands/{commandId}. Zwraca mi on blad:

{
  "result": {
    "commandId": "117adae8-d22a-4b4c-8a9b-b50a79375756",
    "status": "ERROR",
    "errors": [
      {
        "code": "DELIVERY_METHOD_NOT_FOUND",
        "message": "Requested delivery method was not found",
        "details": "Requested delivery method was not found",
        "path": "deliveryMethodId",
        "userMessage": "Wybrana metoda nie jest wspierana"
      }
    ],
    "shipmentId": null
  }
}

dla utworzonej wczesniej przesylki (shipment-management/shipments/create-commands) uzywajac danych:

{
  "input": {
    "deliveryMethodId": "845efe05-0c96-47c3-a8cb-aa4699c158ce",
    "credentialsId": null,
    "sender": {
      //...
    },
    "receiver": {
      //...
    },
    "pickup": {
      //...
    },
    "referenceNumber": 171,
    "packages": [
      {
        "type": "PACKAGE",
        "length": {
          "value": "20",
          "unit": "CENTIMETER"
        },
        "width": {
          "value": "30",
          "unit": "CENTIMETER"
        },
        "height": {
          "value": "6",
          "unit": "CENTIMETER"
        },
        "weight": {
          "value": "0.4",
          "unit": "KILOGRAMS"
        }
      }
    ],
    "labelFormat": "PDF",
    "insurance": {
      "amount": "200.00",
      "currency": "PLN"
    }
  }
}
MartaNowaczyk commented 6 months ago

Dzięki za dane, jak tylko zweryfikuję ten przypadek wrócę z informacją.

MartaNowaczyk commented 6 months ago

Wybrana metoda z zamówienia nie jest dostępna w WZA, taką przesyłkę musisz nadać samodzielnie.

studiowizjo commented 6 months ago

Co oznacza WZA? Jak mozemy wykryc to na wczesniejszym etapie, tak aby nie wysylac zapytania kiedy nie bedzie ono obslugiwane?

MartaNowaczyk commented 6 months ago

Dla zasobu GET /shipment-management/delivery-services zwracamy tylko metody WZA (Wysyłam z Allegro)

studiowizjo commented 6 months ago

Faktycznie ten endpoint nie zwraca nam takiej przesyłki. Do tego zamówienia jest przypisana wysyłka o nazwie "Przesyłka kurierska pobranie" oraz id "845efe05-0c96-47c3-a8cb-aa4699c158ce". Co to wiec za forma wysylki? Czy jest to jakas wlasna forma? Jesli tak, to gdzie na koncie mozna znalezc informacje i edytowac ja?

MartaNowaczyk commented 5 months ago

W tym artykule znajdziesz informacje jakich przewoźników znajdziesz w WZA. Wszystkie dostępne metody, które można dodać do cennika znajdziesz wywołując GET /sale/delivery-methods. Twoja metoda dostawy to "Przesyłka kurierska pobranie".

studiowizjo commented 5 months ago

Powyzej pytalem:

Dziekuje za wskazanie miejsca, jednak w dokumentacji nie widze stricte informacji w temacie, o ktory pytalem. Czyli czy posiadajac umowe wlasna, mozna korzystajac z API generowac dokumenty przewozowe, tak samo jak w przypadku korzystania z domyslnych form dostawy, za waszym posrednictwem?

i otrzymalem odpowiedz:

@studiowizjo tak, oczywiście można generować przesyłki w ramach umów własnych.

Na podstawie ostatniej odpowiedzi rozumiem, ze jednak nie zawsze korzystajac z API mozna wygenerowac dokumenty przewozowe?

Jesli sie nie da, to musimy wiedziec jaki to kurier zeby samodzielnie zintegrowac sie z nim. Korzystajac z GET /sale/delivery-methods otrzymuje dla tej przesylki:

{
    "id": "845efe05-0c96-47c3-a8cb-aa4699c158ce",
    "name": "Przesy\u0142ka kurierska pobranie",
    "paymentPolicy": "CASH_ON_DELIVERY",
    "allegroEndorsed": false,
    "shippingRatesConstraints": {
        "allowed": true,
        "maxQuantityPerPackage": {
            "max": 999999
        },
        "maxPackageWeight": {
            "supported": false
        },
        "firstItemRate": {
            "min": "0.00",
            "max": "1000000.00",
            "currency": "PLN"
        },
        "nextItemRate": {
            "min": "0.00",
            "max": "1000000.00",
            "currency": "PLN"
        },
        "shippingTime": {
            "default": {
                "from": "PT48H",
                "to": "PT72H"
            },
            "customizable": true
        }
    },
    "marketplaces": [
        "allegro-pl"
    ]
}

Nie ma tu wiec informacji czy jest to InPost, DPD, DHL, itd.

W jaki sposob mozna uzyskac te informacje?

Czy jest to forma wysylki domyslna- zdefiniowana przez Panstwa czy tez forma wlasna? Jesli wlasna, to gdzie na koncie mozna znalezc jej ustawienia i mozna zarzadzac nia?

MartaNowaczyk commented 5 months ago

Możesz na umowie własnej, ale w WZA nie mamy dostępnych wszystkich przewoźników i metod dostawy, stąd czasem jest konieczne nadanie przesyłki poza API Allegro. "Przesyłka kurierska pobranie" - to może być jakikolwiek kurier, także jest to forma własna. Dla InPostu mamy dedykowane metody jak np. "Kurier InPost". Jeśli chodzi o więcej szczegółów dotyczących samych metod dostaw, ich dostępności w WZA i ustawień to skorzystaj z formularz kontaktowego, bo to już nie są pytanie dotyczące samego API, a osoby zajmujące się stricte tematem przesyłek będą lepszym wsparciem.

studiowizjo commented 5 months ago

W zasadzie generowanie przesylek dziala nam wylacznie dla Paczkomatow InPost.

Obecnie przeprowadzilem probe dla przesylki, ktora jest wasza wlasna i endpoint: shipment-management/delivery-services zwraca mi informacje na jej temat:

{
  "id": {
    "deliveryMethodId": "c3066682-97a3-42fe-9eb5-3beeccab840c",
    "credentialsId": null
  },
  "name": "Allegro Kurier DPD",
  "carrierId": "DPD",
  "additionalServices": [
    {
      "id": "additionalHandling",
      "name": "Paczka niestandardowa",
      "description": "Paczka o kształcie, który nie jest prostopadłościanem (np. opona, tuba) lub taka, która jest owinięta stretchem, folią lub innym materiałem utrudniającym przesuwanie."
    },
    {
      "id": "returnOfDocuments",
      "name": "Dokumenty zwrotne",
      "description": "Zwrot dokumentów podpisanych przez odbiorcę."
    },
    {
      "id": "collectionUponDelivery",
      "name": "Przesyłka zwrotna",
      "description": "Odbiór przez kuriera kolejnej przesyłki od odbiorcy i doręczenie jej do nadawcy."
    },
    {
      "id": "guarantee0930",
      "name": "Doręczenie do 09:30",
      "description": ""
    },
    {
      "id": "guarantee1200",
      "name": "Doręczenie do 12:00",
      "description": ""
    },
    {
      "id": "guaranteeNextDay",
      "name": "Doręczenie w następnym dniu roboczym",
      "description": ""
    },
    {
      "id": "saturdayDelivery",
      "name": "Doręczenie w sobotę",
      "description": ""
    },
    {
      "id": "privateShipping",
      "name": "Doręczenie do osoby prywatnej",
      "description": ""
    },
    {
      "id": "documentsSupply",
      "name": "Dostarczenie dokumentów przewozowych przez kuriera",
      "description": ""
    },
    {
      "id": "personalDelivery",
      "name": "Doręczenie do rąk własnych",
      "description": ""
    }
  ],
  "additionalProperties": [],
  "owner": "ALLEGRO",
  "marketplaces": [
    "allegro-pl"
  ],
  "packageTypes": [
    "PACKAGE",
    "DOX"
  ],
  "cashOnDelivery": null,
  "insurance": {
    "limit": 500000,
    "currency": "PLN"
  },
  "features": []
}

Wyglada wiec na to, ze powinna to byc wysylka obslugiwana przez WZA. Generujemy wiec dla niej przesylkie wysylajac na endpoit: shipment-management/shipments/create-commands takie dane:

{
  "input": {
    "deliveryMethodId": "c3066682-97a3-42fe-9eb5-3beeccab840c",
    "credentialsId": null,
    "sender": {
      //...
    },
    "receiver": {
      //...
    },
    "pickup": {
      "name": "[wycieto]",
      "company": "[wycieto]",
      "street": "Konopnicka",
      "streetNumber": "3/u3",
      "postalCode": "22-022",
      "city": "Lublin",
      "countryCode": "PL",
      "email": "[wycieto]",
      "phone": "[wycieto]",
      "point": null
    },
    "referenceNumber": 9364,
    "packages": [
      {
        "type": "PACKAGE",
        "length": {
          "value": "20",
          "unit": "CENTIMETER"
        },
        "width": {
          "value": "30",
          "unit": "CENTIMETER"
        },
        "height": {
          "value": "6",
          "unit": "CENTIMETER"
        },
        "weight": {
          "value": "0.4",
          "unit": "KILOGRAMS"
        }
      }
    ],
    "labelFormat": "PDF",
    "insurance": {
      "amount": "200.00",
      "currency": "PLN"
    }
  }
}

Przesylka jest generowana, natomiast sprawdzajac pozniej jej status: shipment-management/shipments/create-commands8ffbad05-e374-41d3-b6c4-5a505eab2f94 otrzymujemy:

{
    "commandId": "8ffbad05-e374-41d3-b6c4-5a505eab2f94",
    "status": "ERROR",
    "errors": [
        {
            "code": "VALIDATION_ERROR",
            "message": "Incorrect pickup postcode for selected carrier",
            "details": null,
            "path": "pickup.postalCode",
            "userMessage": "Przewo\u017anik nie obs\u0142uguje podanego kodu pocztowego"
        }
    ],
    "shipmentId": null
}

Co wskazuje na bledny kod pocztowy podczas tworzenia przesylki. Jak podano jednak powyzej ten kod to 22-022, co wydaje sie prawidlowe. Probowalismy rowniez wersji z wycieciem myslnika z kodu (w dokumentacji jest jednak w formacie z myslnikiem), jednak komunikat bledu nie zmienia sie.

Co jest przyczyna tego bledu?

MartaNowaczyk commented 5 months ago

Według wyszukiwarki takiego kodu nie ma, a na podstawie kodów Poczty Polskiej działamy.

stale[bot] commented 5 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.

studiowizjo commented 5 months ago

Kontynuujac temat tworzenia przesylek:

  1. Tworzymy przesylke wysylajac dane na endpoint shipment-management/shipments/create-commands. Otrzymujemy zwrotnie commandId = 2d4301a5-1ef4-4bbd-b80f-b55987811538. Po wygenerowaniu etykiety, nie ma na niej danych przekazanych w parametrach "referenceNumber" oraz "description". Chcemy gdzies miec widoczna informacje nt. loginu kupujacego. Informacja dla nas: wewnętrzne ID zamówienia: #23229.
  2. Sytuacja jw. dla innej formy dostawy oraz commandId = c7c92e7c-0239-4422-afbe-2d6838ab9647
  3. Podobna sytuacja jw. dla innej formy dostawy oraz commandId = 2db1d109-51c0-4145-84de-b5bddf20ad51. W tym przypadku. Wstawiane sa dane przekazane w polu "description", ale nie sa widoczne dane z pola "referenceNumber".
MartaNowaczyk commented 5 months ago

To chyba dotyczy tego samego problemu co w wątku #6423. Część przewoźników nie korzysta z tych pól, w związku z czym informacja nie będzie widoczna na etykiecie.

studiowizjo commented 5 months ago

Mam jeszcze inne pytanie:

Wysylajac na endpoint: shipment-management/shipments/create-commands dane:

{
  "input": {
    "deliveryMethodId": "aa1d05e0-943b-47cb-a759-9d8c16707129",
    "credentialsId": null,
    "sender": {
      "name": "[wycieto dane]",
      "company": "[wycieto dane]",
      "street": "[wycieto dane]",
      "streetNumber": "[wycieto dane]",
      "postalCode": "[wycieto dane]",
      "city": "[wycieto dane]",
      "countryCode": "[wycieto dane]",
      "email": "[wycieto dane]",
      "phone": "[wycieto dane]",
      "point": null
    },
    "receiver": {
      "name": "[wycieto dane]",
      "company": "[wycieto dane]",
      "street": "[wycieto dane]",
      "streetNumber": "[wycieto dane]",
      "postalCode": "[wycieto dane]",
      "city": "[wycieto dane]",
      "countryCode": "[wycieto dane]",
      "email": "[wycieto dane]",
      "phone": "[wycieto dane]",
      "point": null
    },
    "pickup": {
      "name": "[wycieto dane]",
      "company": "[wycieto dane]",
      "street": "[wycieto dane]",
      "streetNumber": "[wycieto dane]",
      "postalCode": "[wycieto dane]",
      "city": "[wycieto dane]",
      "countryCode": "PL",
      "email": "[wycieto dane]",
      "phone": "[wycieto dane]",
      "point": "FUP Szczecin 10"
    },
    "referenceNumber": "[wycieto dane]",
    "description": "802a8a70-227e-11ef-b37e-d3a9f63d9e89",
    "packages": [
      {
        "type": "PACKAGE",
        "length": {
          "value": "20",
          "unit": "CENTIMETER"
        },
        "width": {
          "value": "30",
          "unit": "CENTIMETER"
        },
        "height": {
          "value": "6",
          "unit": "CENTIMETER"
        },
        "weight": {
          "value": "0.4",
          "unit": "KILOGRAMS"
        }
      }
    ],
    "labelFormat": "PDF"
  }
}

otrzymujemy blad:

{
  "errors": [
    {
      "code": "VALIDATION_ERROR",
      "message": "musi pasować do wyrażenia [A-Za-z0-9-_]+",
      "details": "Invalid value: FUP Szczecin 10",
      "path": "input.pickup.point",
      "userMessage": "musi pasować do wyrażenia [A-Za-z0-9-_]+"
    }
  ]
}

Jaki wiec powinien byc prawidlowy kod pickup point dla tej formy dostawy? Chodzi o ten punkt - https://poczta-polska.info.pl/poczta/5494-kolbaskowo/ . Probowalismy podawac zarowno "FUP Szczecin 10" jak i "72-001".

MartaNowaczyk commented 5 months ago

Pole pickup.point możesz wypełnić wartością pobraną:

studiowizjo commented 5 months ago

ze szczegółów zamówienia, za pomocą GET /order/checkout-forms/{id}, w polu: delivery.pickupPoint.id,

W tym przypadku checkoutFormId = 802a8a70-227e-11ef-b37e-d3a9f63d9e89 i delivery.pickupPoint ma wartość null.

Chcemy jednak w tym miejscu ustawic punkt, w ktorym kurier ma odebrac przesylke, tak wiec chyba niekoniecznie informacja ta musi pochodzic z zamowienia?

z API odpowiedniego przewoźnika. Model każdego z nich jest różny, dlatego odwołaj się bezpośrednio do dokumentacji API przewoźników. Przykładowy punkt Poczty Polskiej (API): “116744”. Punkt jest widocznie niepoprawny. Walidacja za pomocą wyrażenia regularnego [A-Za-z0-9-_]+ nie przepuszcza spacji.

Sprobowalismy testowo uzyc tego punktu i zwraca nam blad:

{
    "commandId": "f66205f7-8383-4f48-9f52-5b9718aea364",
    "status": "ERROR",
    "errors": [
        {
            "code": "VALIDATION_ERROR",
            "message": "Pickup point is incorrect",
            "details": null,
            "path": "pickup.point",
            "userMessage": "Punkt nadania przesy\u0142ki jest niepoprawny"
        },
        {
            "code": "VALIDATION_ERROR",
            "message": "Service is unavailable for selected parcel type",
            "details": null,
            "path": "additionalServices",
            "userMessage": "Us\u0142uga niedost\u0119pna dla wybranego typu przesy\u0142ki"
        }
    ],
    "shipmentId": null
}
MartaNowaczyk commented 5 months ago

Bardziej chodziło mi tu o format niż o punkt do wykorzystania, dlatego najlepiej zbierać takie dane bezpośrednio od przewoźnika. Odpowiednie identyfikatory punktów (pickup.pointId) pobierzesz z API przewoźnika, w tym przypadku Poczty Polskiej (https://www.poczta-polska.pl/webservices/). Możesz też pobrać plik CSV lub XML z punktami Poczty Polskiej z ich strony.

studiowizjo commented 5 months ago

Dziekuje. Wstawienie punktu pobranego w podany sposob eliminuje poprzedni blad, ale pozostaje blad:

{
    "commandId": "bb53dd5b-953c-4254-9750-c997a49f2a99",
    "status": "ERROR",
    "errors": [
        {
            "code": "VALIDATION_ERROR",
            "message": "Service is unavailable for selected parcel type",
            "details": null,
            "path": "additionalServices",
            "userMessage": "Us\u0142uga niedost\u0119pna dla wybranego typu przesy\u0142ki"
        }
    ],
    "shipmentId": null
}

chociaz nie podano nic w additionalServices.

MartaNowaczyk commented 5 months ago

W tym przypadku nie chodzi o additionalServices, tylko o wybrany typ przesyłki i wybraną metodę. "Allegro Przesyłka polecona", która jest przesyłką listowną i dla tej usługi akceptowalnym package.type jest tylko list: DOX. Przekazałam do zespołu od WZA mylącą ścieżkę.

studiowizjo commented 5 months ago

Ustawilismy w tym przypadku "DOX", ale nadal mamy blad:

{
    "commandId": "39f52a10-db99-4e9c-ab51-b13d569ad198",
    "status": "ERROR",
    "errors": [
        {
            "code": "ERROR",
            "message": "Processing error",
            "details": null,
            "path": null,
            "userMessage": "Problem z nadaniem przesy\u0142ki. Skontaktuj si\u0119 z nami. Pomo\u017cemy jak najszybciej."
        }
    ],
    "shipmentId": null
}
MartaNowaczyk commented 5 months ago

Z tego co udało mi się sprawdzić był problem z API przewoźnika. Czy problem się powtarza?

studiowizjo commented 5 months ago

Tak, powtarza sie. Aktualny blad (taki sam, ale inne commandId):

{
    "commandId": "78813cbf-5509-413d-9016-d939d8a13596",
    "status": "ERROR",
    "errors": [
        {
            "code": "ERROR",
            "message": "Processing error",
            "details": null,
            "path": null,
            "userMessage": "Problem z nadaniem przesy\u0142ki. Skontaktuj si\u0119 z nami. Pomo\u017cemy jak najszybciej."
        }
    ],
    "shipmentId": null
}
MartaNowaczyk commented 5 months ago

Sprawdziliśmy i w tym czasie Poczta Polska miała jeszcze awarię, także to jest pewnie przyczyną. Gdyby jednak teraz też się nie udało podaj proszę commandId lub trace-id.

studiowizjo commented 5 months ago

Faktycznie, teraz udalo sie prawidlowo wygenerowac. Dziekuje.

studiowizjo commented 5 months ago

Obecnie mamy 2 inne problemy:

  1. Z zamówieniami w walucie obcej:
{
    "commandId": "61797349-482f-4395-bf8b-4d8dab93a290",
    "status": "ERROR",
    "errors": [
        {
            "code": "VALIDATION_ERROR",
            "message": "Decimals are not supported by the selected currency",
            "details": null,
            "path": "insurance.amount",
            "userMessage": "Podana waluta nie wspiera warto\u015bci dziesi\u0119tnych"
        }
    ],
    "shipmentId": null
}

Chodzi o zamówienie zlozone w koronach czeskich.

Taki blad pojawia sie dla takich parametrow ubezpieczenia:

"insurance": {
  "amount": 3055.56,
  "currency": "CZK"
}

Jesli jednak zgodnie z komunikatem podamy jako amount po prostu "3055" (lub: "5055.00" albo "5055.0"), to otrzymuje blad:

{
  "errors": [
    {
      "code": "VALIDATION_ERROR",
      "message": "The amount must have the following format: 9999.99",
      "details": "Invalid value: 3055",
      "path": "input.insurance.amount",
      "userMessage": "Kwota musi być w formacie 9999.99"
    }
  ]
}
  1. Pole punkt odbiorcy ze wskazanym id nie zostało znalezione:
{
    "commandId": "70bd8709-24be-4f8a-82b7-20fe79f8499f",
    "status": "ERROR",
    "errors": [
        {
            "code": "BAD_REQUEST",
            "message": "receiver.point with specified PointId was not found",
            "details": null,
            "path": "receiver.point",
            "userMessage": "Pole punkt odbiorcy ze wskazanym id nie zosta\u0142o znalezione"
        }
    ],
    "shipmentId": null
}

W tym przypadku podany receiver.point to A006317 i zostal on on pobrany z orderCheckoutForm.delivery.pickupPoint.id

Z kolei orderCheckoutForm.id = cc20ca40-272c-11ef-ab70-cb4493390667.

  1. Adres odbiorcy jest nieprawidłowy:
{
    "commandId": "8e248f05-47cb-4a34-b2de-b9b0d59bc861",
    "status": "ERROR",
    "errors": [
        {
            "code": "VALIDATION_ERROR",
            "message": "Receiver address is incorrect",
            "details": null,
            "path": "receiver.street",
            "userMessage": "Adres odbiorcy jest nieprawid\u0142owy"
        }
    ],
    "shipmentId": null
}

W receiver.street probowalismy podawac "103" lyb "Hyżne 103", co wynika z danych otrzymanych o zamowieniu dla checkoutFormId = bc8ec3f0-2729-11ef-bfe7-2bfe9f5effc2. Zwraca nam to nastepujace dane:

{
  "address": {
    "firstName": "[WYCIETE]",
    "lastName": "[WYCIETE]",
    "street": "Hyzne 536 / 536",
    "city": "Hyzne",
    "zipCode": "36-024",
    "countryCode": "PL",
    "companyName": "[WYCIETE]",
    "phoneNumber": "[WYCIETE]",
    "modifiedAt": null
  },
  "method": {
    "id": "028e2be0-1c06-41cf-a309-ec5557273786",
    "name": "Allegro Odbiór w Punkcie Pocztex"
  },
  "pickupPoint": {
    "id": "242213",
    "name": "UP Hyżne k. Dynowa",
    "description": null,
    "address": {
      "street": "103",
      "zipCode": "36-024",
      "city": "Hyżne",
      "countryCode": "PL"
    }
  }
}

Poniewaz mamy uzupelniona sekcje "pickupPoint", to danych z niej uzywamy do generowania przesylki.

MartaNowaczyk commented 5 months ago
  1. Tak jak w przypadku ceny w walucie CZK, tak samo dla przesyłek w walucie CZK przyjmowane są ceny bez wartości dziesiętnych, ale zgodnie z formatem podanym w komunikacie.
  2. Jeżeli dostajemy taki komunikat to znaczy, że punkt jest nieaktywny lub niedostępny w danym momencie- najlepiej spróbować inny. Mogło się tak zdarzyć, że przy zamówieniu jeszcze był dostępny.
  3. Jeśli chodzi o pole street z zamówienia to zawiera ono zazwyczaj nazwę ulicę i numer. Podczas zamawiania przesyłki trzeba rozdzielać te dwie rzeczy i w polu z ulicą przesyłać tylko ulicę, a w polu "streetNumber" przesłać numer domu. W tym przypadku jeśli jest to miejscowość bez ulicy można spróbuj podać "street":"Hyżne","streetNumber": "103"
studiowizjo commented 5 months ago
  1. Tak jak w przypadku ceny w walucie CZK, tak samo dla przesyłek w walucie CZK przyjmowane są ceny bez wartości dziesiętnych, ale zgodnie z formatem podanym w komunikacie.

Tzn, jak mamy podac, bo tak jak wspomnialem probowalismy na rozne sposoby, np.

i za kazdym razem otrzymujemy blad.

  1. Czy jest jakis sposob zeby przez API w takiej sytuacji ustalic najblizszy dostepny punkt?

  2. Ok, dziekuje.

MartaNowaczyk commented 5 months ago
  1. Podaj proszę commandId dla tych przypadków, bo powinno przejść jak już wszystkie opcje zrobiłeś.
  2. Nie ma.
studiowizjo commented 5 months ago
  1. Nie jestem w stanie podac commandId poniewaz API wyrzuca blad walidacji na etapie stworzenia przesylki. Wykonalem jednak dodatkowe testy i rzutowanie wartosci z liczbowej na stron pomoglo. Najwidoczniej przesylac dane jako liczba drugie zero bylo ucinane jako nieznaczace. Dziala i temat mamy wiec zamkniety.
MartaNowaczyk commented 5 months ago

Cieszę się, że udało się rozwiązać problem.