Как получить расценки на доставку с Canada Post на сайте с Next.js?

201

20.04.2024

Мне пришлось работать над канадским интернет-магазином и интегрировать доставку через Canada Post. Подумал я тогда: ну и задачка.

Вадим Пашаев

Вадим Пашаев

Инженер, веб-разработчик, путешественник

Как получить расценки на доставку с Canada Post на сайте с Next.js? | PXSTUDIO.PW

Немного поискав информацию в сети нашел хороший npm модуль, который хорошо стыкуется с проектом на Next.js. Установить его можно с помощью команды npm, pnpm или yarn, кому какой нравится. Я использую pnpm. Как-нибудь возможно соберусь и напишу на него обзор и чем он отличается.

Ну а сейчас установим в наш Next.js проект npm-модуль:

pnpm i canadapost-api

У него как оказалась есть довольно хорошая документация на Github.

Сделан он в виде клиента и довольно неплохо подключается с помощью userId и password, который можно получить в личном кабинете CanadaPost. Но это не email и пароль от личного кабинета, а специальный userId и password для API.

Вот как она выглядит:

Canada Post Dashboard

Но проблема в том, что эти userId и password к API вы нигде в Dashboard не найдете :)

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

В результате вы попадете на такую страницу с заветными API KEY для development и для production:

Canada Post API Keys

Берем пару ключей, которые вам нужны и добавляем в .env-файл проекта:

# Canada Post
CANADA_POST_API_USERNAME=
CANADA_POST_API_PASSWORD=
CANADA_POST_ORIGIN_POSTAL_CODE=
CANADA_POST_CUSTOMER_ID=

Помимо этого добавляем CANADA_POST_ORIGIN_POSTAL_CODE, это почтовый индекс адреса отправления, т.е. нашего магазина, если он у вас один и CANADA_POST_CUSTOMER_ID - этот ID присваивается при регистрации вашей компании в CanadaPost.

После этого создаем новый API-роут в Next.js и пишем следующий код:

import CanadaPostClient from "canadapost-api"

export default function canadapost(req, res) {
  const { destinationPostalCode, weight, lang } = req.query

  const client = new CanadaPostClient(
    process.env.CANADA_POST_API_USERNAME,
    process.env.CANADA_POST_API_PASSWORD,
    process.env.CANADA_POST_CUSTOMER_ID,
    lang
  )

  client
    .getRates({
      originPostalCode: process.env.CANADA_POST_ORIGIN_POSTAL_CODE,
      parcelCharacteristics: {
        weight,
      },
      destination: {
        domestic: {
          postalCode: destinationPostalCode,
        },
      },
    })
    .then((data) => {
      res.json({ variants: data })
    })
    .catch((err) => {
      res.status(500).json({ err: err.message })
    })
}

Этот код будет получать варианты доставки в зависимости от введенного индекса назначения, веса посылки и языка, поддерживаются только en-CA и fr-CA.

Далее на фронтенде получаем варианты доставки с помощью запроса:

fetch(`/api/canadapost?destinationPostalCode=${postalCode}&weight=1&lang=en-CA`)
  .then((r) => r.json())
  .then((data) => setDeliveryVariants(data?.variants))

Вот так довольно легко интегрировать получение расценок на доставку с помощью Canada Post на ваш сайт с Next.js.

Читать далее

Что такое Next.js и для чего он нужен? | PXSTUDIO
Что такое Next.js и для чего он нужен?

Next.js - это фреймворк, основанный на React, который позволяет создавать веб-приложения с улучшенной производительностью и улучше...

Получение данных в Next.js | PXSTUDIO
Получение данных в Next.js

В прошлой статье мы вкратце упомянули, что в Next.js есть две формы пререндеринга: статическая генерация (SSG) и генерация на стор...

Стартовый шаблон Next.js + MUI5 + TypeScript | PXSTUDIO
Стартовый шаблон Next.js + MUI5 + TypeScript

Очень часто при старте проекта необходимо выбрать набор инструментов, которые значительно упрощают разработку и, которые можно в д...

Подписаться на рассылку

Получите интересные новости по веб-разработке и AI

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

Подписаться на рассылку

Получите интересные новости по веб-разработке и AI

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

Расскажите, что нужно сделать

Разберем задачу и предложим следующий шаг

Contact to pxstudio

Сайт, сервис, Telegram-бот, AI-интеграция или оптимизация текущего проекта — опишите ситуацию, а мы подскажем нормальный технический путь.

Этот сайт защищен reCAPTCHA, применяются Политика конфиденциальности и Условия использования Google.

Есть интересная идея?

И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию