DOCS

Создание одной отправки

Создание одной отправки

Рабочий процесс GraphQL CreateDeclarationShipment преобразует отправку Japan Post из исходных данных в готовый к печати ярлык за один раунд обмена данными.

CreateDeclarationShipment объединяет шесть мутаций *Workflow в один запрос GraphQL. Каждый этап построен на основе данных, предоставленных предыдущими этапами, и все они отправляются вместе, чтобы полная отправка могла быть создана за один раунд обмена данными:

partyCreateWorkflow            → описать стороны отправления + доставки
itemCreateWorkflow             → описать позиции строк
cartonsCreateWorkflow          → описать физическую упаковку
shipmentRatingCreateWorkflow   → записать расценку перевозчика
landedCostCalculateWorkflow    → рассчитать пошлины / налоги / сборы
shipmentCreateWorkflow         → создать отправку + ярлык

Мутации Workflow разработаны для цепочечной обработки: вам не нужно передавать идентификаторы из одного этапа в следующий, и вам не нужно отправлять отдельный запрос для каждого этапа. Отправьте весь документ и получите финальный Shipment.

Когда serviceLevel на финальном этапе — это уровень обслуживания Japan Post (japan_post.*), Zonos вызывает Japan Post Label API (код 52) от вашего имени, используя номера Later Pay вашей проверенной учетной записи, генерирует ярлык и номер отслеживания, создает ID объявления и связывает их — все внутри финального этапа shipmentCreateWorkflow.

Почему одна мутация? Каждый этап зависит от предыдущего (расчет приземленной стоимости требует позиций + сторон; ярлык требует всего). Объединение их в один документ GraphQL обеспечивает согласованность данных и избегает пять дополнительных раундов обмена данными.

Конечная точка и аутентификация 

Все запросы в этой цепочке используют одну и ту же конечную точку. Что вы передаете в заголовках, зависит от вашей установки — выберите вашу вкладку.

URL:

https://api.zonos.com/graphql

Заголовки:

Вы отправляете собственные заказы под своей собственной проверенной учетной записью. Аутентифицируйтесь как себя — ключ учетной записи не требуется.

credentialToken: {{YOUR_API_TOKEN}}

Где его найти: Панель управления Zonos → ПараметрыИнтеграции → раздел Ключ учетной записи. Скопируйте токен в строке API ключ; это ваш credentialToken.

Пример запроса 

Полный запрос CreateDeclarationShipment, который вы можете скопировать и адаптировать — мутация, ее переменные и ответ — для одного посылки Japan Post, отправленной DDP в США. Каждый ввод разбирается в пошаговом разделе ниже.

1mutation CreateDeclarationShipment(
2$partyInput: [PartyCreateWorkflowInput!]!
3$itemInput: [ItemCreateWorkflowInput!]!
4$cartonInput: [CartonCreateWorkflowInput!]!
5$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!
6$landedCostInput: LandedCostWorkFlowInput!
7$shipmentInput: ShipmentCreateWorkflowInput!
8) {
9 partyCreateWorkflow(input: $partyInput) {
10 id
11 type
12 location {
13 line1
14 locality
15 postalCode
16 countryCode
17 }
18 }
19 itemCreateWorkflow(input: $itemInput) {
20 id
21 name
22 sku
23 amount
24 currencyCode
25 hsCode
26 }
27 cartonsCreateWorkflow(input: $cartonInput) {
28 id
29 length
30 width
31 height
32 dimensionalUnit
33 weight
34 weightUnit
35 }
36 shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {
37 id
38 amount
39 }
40 landedCostCalculateWorkflow(input: $landedCostInput) {
41 id
42 method
43 currencyCode
44 amountSubtotals {
45 duties
46 taxes
47 fees
48 shipping
49 landedCostTotal
50 }
51 }
52 shipmentCreateWorkflow(input: $shipmentInput) {
53 id
54 trackingDetails {
55 number
56 }
57 shipmentCartons {
58 label {
59 url
60 }
61 }
62 }
63}

Пошаговое выполнение 

Столбец Статус в каждой таблице ниже использует следующие термины:

  • Требуется — запрос не выполнится без этого.
  • Требуется для ярлыка — не обязательно в схеме GraphQL, но необходимо для создания действительного ярлыка Japan Post для США.
  • Условное — требуется в зависимости от другого поля (указано в строке).
  • Рекомендуется — необязательно, но обеспечивает точные пошлины и налоги.
  • Необязательно — не требуется.

1. partyCreateWorkflow

Создает стороны, участвующие в отправке — как минимум ORIGIN (откуда отправляется посылка) и DESTINATION (покупатель / получатель).

ПолеСтатусПримечания
typeТребуетсяORIGIN, DESTINATION, RETURN и т. д.
location.countryCodeТребуетсяКод страны ISO-2.
location.line1, locality, administrativeAreaCode, postalCodeТребуется для ярлыкаПоля адреса, необходимые для действительного ярлыка.
person.firstName, lastName, phoneТребуется для ярлыкаКонтактная информация, необходимая для действительного ярлыка.
person.companyName, emailНеобязательно

Пример полезной нагрузки:

[
  { "type": "DESTINATION", "location": { "countryCode": "US" }, "person": {} },
  { "type": "ORIGIN", "location": { "countryCode": "JP" }, "person": {} }
]

Ответ возвращает созданные идентификаторы Party и разрешенные поля адреса.

2. itemCreateWorkflow

Создает позиции строк, которые составляют отправку. Это артикулы (SKU), которые будут отображаться в коммерческом счете-фактуре и управлять расчетом приземленной стоимости.

ПолеСтатусПримечания
currencyCodeТребуетсяВалюта цены за единицу.
quantityТребуетсяКоличество единиц этого товара.
amountУсловноеЦена за единицу (не сумма). Требуется, если не указан totalAmount.
totalAmountНеобязательноАльтернатива amount; amount получается из totalAmount / quantity.
hsCodeРекомендуетсяКод тарифа Гармонизированной системы. Управляет тарифными ставками.
countryOfOriginРекомендуетсяКод ISO-2 страны, где был произведен товар. Управляет пошлиной / ПЗС.
name, descriptionРекомендуетсяОриентированное на клиента имя продукта + описание.
customsDescriptionНеобязательноПереопределение описания для таможни.
sku, productIdНеобязательноВаши внутренние идентификаторы.
measurementsНеобязательноВес / размеры на единицу.

Код HS, страна происхождения и сумма — это три поля, которые в наибольшей степени влияют на результат пошлины / налога на этапе 5.

3. cartonsCreateWorkflow

Создает физические упаковки — коробки, полиэтиленовые пакеты или письма, которые будут содержать товары.

ПолеСтатусПримечания
dimensionalUnitТребуетсяINCH или CENTIMETER.
weight, weightUnitТребуется для ярлыкаJapan Post требует вес упаковки.
length, width, heightНеобязательноВнешние размеры.
typeНеобязательноСтиль упаковки (коробка, полиэтиленовый пакет, письмо). По умолчанию PACKAGE.

Каждая коробка становится одной посылкой на ярлыке перевозчика на этапе 6. Несколько коробок → многокомпонентная отправка с одним номером отслеживания на коробку.

4. shipmentRatingCreateWorkflow

Записывает расценку, которую торговец взимает с покупателя за доставку.

ПолеСтатусПримечания
amountТребуетсяЧто покупатель платит за доставку. Передайте 0, если бесплатно.
currencyCodeТребуетсяВалюта amount.
serviceLevelCodeТребуетсяКод услуги перевозчика (например, japan_post.air.parcel).
displayNameНеобязательноКрасивое имя для квитанции / счета-фактуры.

Это тариф, предложенный покупателю при оформлении покупки. Он входит в расчет приземленной стоимости как подитог «доставка», чтобы пошлины и налоги рассчитывались для правильного значения CIF.

5. landedCostCalculateWorkflow

Запускает расчет пошлин, налогов и сборов для страны назначения. Использует товары, стороны и стоимость доставки из предыдущих этапов.

ПолеСтатусПримечания
endUseТребуетсяNOT_FOR_RESALE или FOR_RESALE. Некоторые направления применяют разные тарифы для коммерческого и личного использования.
tariffRateТребуетсяПо умолчанию ZONOS_PREFERRED, если опущено. Указывает Zonos, какой источник тарифа / методологию применять.
calculationMethodРекомендуетсяDDP (покупатель предплачивает) или DDU (покупатель платит у двери). Используйте DDP для предоплаты. Определяет, включает ли LandedCost.amountSubtotals пошлину / налог.
currencyCodeНеобязательноВалюта, в которой возвращаются подитоги приземленной стоимости.
arrivalDateНеобязательноКурсы валют и расписания тарифов привязываются к этой дате, если указано.

Ответ включает amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — это числа, которые вы отображаете покупателю при оформлении и которые печатаются в коммерческом счете-фактуре.

6. shipmentCreateWorkflow

Завершающий этап — создает сущность Shipment, генерирует ярлык перевозчика и (опционально) коммерческий счет-фактуру / лист упаковки.

Для проверенных учетных записей Japan Post это также место, где Zonos вызывает Japan Post Label API (код 52) от вашего имени, внедряет ваши номера Later Pay, создает ID объявления и связывает ID объявления с номером отслеживания, возвращенным Japan Post.

Ключевые поля:

ПолеСтатусПримечания
serviceLevelТребуется для ярлыкаСервис Japan Post для отправки (например, japan_post.air.ems_merchandise). Должен быть уровень обслуживания japan_post.*.
generateLabelНеобязательноПо умолчанию true; должно быть true для возврата ярлыка.
contentsTypeРекомендуетсяSALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE и т. д. Управляет таможней.
nonDeliveryНеобязательноЧто перевозчик должен делать, если доставка не удается: RETURN, ABANDON, FORWARD.
referencesНеобязательноНомера ссылок, предоставленные торговцем, которые печатаются на ярлыке и счете-фактуре. См. ниже.
declaredValue / isDeclaredValueНеобязательноСтраховая стоимость отправки.
shipmentConsolidationIdНеобязательноИспользуется, когда эта отправка является частью пакетной отправки.

Вспомогательный ввод references

Эти поля печатаются на ярлыке перевозчика и / или счете-фактуре. Используйте их для отображения номеров закупок, номеров лицензий и свободного текста замечаний, которые нужно видеть получателю или таможенному органу.

ПолеСтатусПримечанияДлина
invoiceNumberНеобязательноНомер счета-фактуры торговца.
purchaseOrderNumberНеобязательноНомер закупки торговца.
licenseNumberНеобязательноНомер экспортной / импортной лицензии.
certificateNumberНеобязательноНомер сертификата таможни.
paymentConditionsНеобязательноУсловия платежа в свободном текстовом формате, показанные в счете-фактуре.Ограничить до 200 символов — более длинные значения переполняют печатный счет.
customsRemarksНеобязательноЗамечания таможни в свободном текстовом формате.
taxCodeНеобязательноПользовательский налоговый код, напечатанный на ярлыке.

Ответ

Интересующие поля на возвращенном Shipment:

{
  id
  trackingDetails {
    number
  }
  shipmentCartons {
    label {
      url
      labelImage
    }
  }
}

trackingDetails.number — это номер отслеживания Japan Post.

Объект label может возвращать ярлык двумя способами — запросите то, что подходит вашему рабочему процессу (или оба):

ПолеВозвращаетИспользуйте, когда
urlРазмещенная ссылка на файл отрисованного ярлыка (PDF), готовый для загрузки или печати.Вы хотите передать ссылку — открыть ее, отправить по электронной почте или загрузить файл позже, не удерживая его в полезной нагрузке.
labelImageИзображение ярлыка в кодировке base64 (PNG / PDF / ZPL), встроенное в ответ.Вы хотите байты ярлыка непосредственно в ответе, чтобы прикрепить его к рабочему процессу выполнения или сохранить в WMS.

Запросите только нужные вам поля. Запрос url уменьшает размер ответа; запрос labelImage возвращает полный ярлык встроенным, чтобы вам не нужна вторая раунд обмена данными для его загрузки. Пример выше запрашивает url.

Обработка ошибок 

  • Ошибки валидации (отсутствующие обязательные поля, неверные коды стран и т. д.) возвращаются в стандартный массив GraphQL errors и прерывают остальную цепочку.
  • Ошибки Japan Post (ошибка генерации ярлыка, неверный адрес и т. д.) отображаются как ошибки GraphQL на shipmentCreateWorkflow. Если требуется повторная попытка, свяжитесь с поддержкой — рекомендуемый путь — повторно отправить полную мутацию с исправленным вводом.

Разрешения 

Каждый этап защищен отдельно. Ваш API ключ должен иметь область записи для каждой сущности в цепочке (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). Стандартная роль торговца на проверенной учетной записи предоставляет все это.

Следующие шаги 

Была ли эта страница полезной?


На этой странице: