Конечная точка и аутентификация
Все запросы в этой цепочке используют одну и ту же конечную точку. Что вы передаете в заголовках, зависит от вашей установки — выберите вашу вкладку.
URL:
https://api.zonos.com/graphql
Заголовки:
Вы отправляете собственные заказы под своей собственной проверенной учетной записью. Аутентифицируйтесь как себя — ключ учетной записи не требуется.
credentialToken: {{YOUR_API_TOKEN}}
Где его найти: Панель управления Zonos → Параметры → Интеграции → раздел Ключ учетной записи. Скопируйте токен в строке API ключ; это ваш credentialToken.
Пример запроса
Полный запрос CreateDeclarationShipment, который вы можете скопировать и адаптировать — мутация, ее переменные и ответ — для одного посылки Japan Post, отправленной DDP в США. Каждый ввод разбирается в пошаговом разделе ниже.
mutation CreateDeclarationShipment($partyInput: [PartyCreateWorkflowInput!]!$itemInput: [ItemCreateWorkflowInput!]!$cartonInput: [CartonCreateWorkflowInput!]!$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!$landedCostInput: LandedCostWorkFlowInput!$shipmentInput: ShipmentCreateWorkflowInput!) { partyCreateWorkflow(input: $partyInput) { id type location { line1 locality postalCode countryCode } } itemCreateWorkflow(input: $itemInput) { id name sku amount currencyCode hsCode } cartonsCreateWorkflow(input: $cartonInput) { id length width height dimensionalUnit weight weightUnit } shipmentRatingCreateWorkflow(input: $shipmentRatingInput) { id amount } landedCostCalculateWorkflow(input: $landedCostInput) { id method currencyCode amountSubtotals { duties taxes fees shipping landedCostTotal } } shipmentCreateWorkflow(input: $shipmentInput) { id trackingDetails { number } shipmentCartons { label { url } } }}Пошаговое выполнение
Столбец Статус в каждой таблице ниже использует следующие термины:
- Требуется — запрос не выполнится без этого.
- Требуется для ярлыка — не обязательно в схеме 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). Стандартная роль торговца на проверенной учетной записи предоставляет все это.
Следующие шаги
- Пакетная отправка (консолидация) — объедините дневные посылки в один лист отсроченной оплаты Japan Post.
Создание одной отправки
Рабочий процесс GraphQL
CreateDeclarationShipmentпреобразует отправку Japan Post из исходных данных в готовый к печати ярлык за один раунд обмена данными.CreateDeclarationShipmentобъединяет шесть мутаций*Workflowв один запрос GraphQL. Каждый этап построен на основе данных, предоставленных предыдущими этапами, и все они отправляются вместе, чтобы полная отправка могла быть создана за один раунд обмена данными:Мутации
Workflowразработаны для цепочечной обработки: вам не нужно передавать идентификаторы из одного этапа в следующий, и вам не нужно отправлять отдельный запрос для каждого этапа. Отправьте весь документ и получите финальныйShipment.Когда
serviceLevelна финальном этапе — это уровень обслуживания Japan Post (japan_post.*), Zonos вызывает Japan Post Label API (код 52) от вашего имени, используя номера Later Pay вашей проверенной учетной записи, генерирует ярлык и номер отслеживания, создает ID объявления и связывает их — все внутри финального этапаshipmentCreateWorkflow.