Генериране на цифрови продуктови паспорти на ЕС чрез API

Повечето ръководства за DPP ви казват какво трябва да съдържа един паспорт. Това тук показва как да създавате съвместими с ЕС цифрови продуктови паспорти програмно — с curl, qr3 SDK, групово създаване, валидиране, GS1 QR кодове и webhook-ове.

от QR3 Redaktion

Генериране на цифрови продуктови паспорти на ЕС чрез API

Повечето статии за цифровия продуктов паспорт на ЕС (DPP) обясняват какво трябва да съдържа един паспорт. Далеч по-малко показват как да създадете такъв — и почти нито една не показва как да го направите за каталог от 500 или 50 000 SKU-та, без да щраквате през формуляр 50 000 пъти.

Това ръководство е версията за разработчици. Всяка стъпка по-долу е реално, работещо извикване към API на qr3.app (https://qr3.app/v1). Ако управлявате продуктови данни в ERP, в PIM или в база данни, можете да вградите генерирането на DPP директно в съществуващия си процес.

Защо API е важен за DPP-тата

Цифровият продуктов паспорт не е еднократен документ. Съгласно Регламента за екодизайн на устойчиви продукти (ESPR, ЕС 2024/1781) и Регламента на ЕС за батериите 2023/1542 всяка регулирана единица се нуждае от паспорт, който остава актуален през целия си жизнен цикъл. За един производител това означава:

  • Мащаб — стотици до десетки хиляди продукти, всеки със собствен GTIN/сериен номер.
  • Актуалност — данните (въглеродeн отпечатък, рециклирано съдържание, информация за ремонт) се променят и трябва да бъдат актуализирани, а не пресъздадени.
  • Интеграция — източникът на истина е вашият ERP/PIM, а не уеб формуляр.

Това е проблем за API. Един ръчен уеб инструмент ви осигурява първите десет паспорта; един API ви осигурява всичките.

1. Удостоверяване

Всяка заявка използва bearer токен (създайте API ключ в таблото за управление). Базовият URL е https://qr3.app/v1.

curl https://qr3.app/v1/dpp \
  -H "Authorization: Bearer $QR3_API_KEY"

Или с официалния SDK:

import { QR3 } from "@qr3/sdk";

const client = new QR3({ apiKey: process.env.QR3_API_KEY! });

2. Създаване на паспорт за батерия

DPP се създава с POST /dpp. Полетата от най-високо ниво са едни и същи за всяка категория; специфичните за категорията данни отиват в battery_data, textile_data или general_data.

curl -X POST https://qr3.app/v1/dpp \
  -H "Authorization: Bearer $QR3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "gtin": "09506000134376",
    "serial": "SN-00012345",
    "product_name": "PowerCell 5 kWh LFP",
    "manufacturer": "ExampleTech GmbH",
    "origin_country": "DE",
    "category": "battery",
    "market_countries": ["DE", "FR", "AT"],
    "status": "live",
    "battery_data": {
      "capacity_kwh": 5,
      "carbon_footprint_kg": 62,
      "carbon_footprint_class": "B",
      "recycled_content_pct": 12,
      "recyclability_pct": 95,
      "manufacturer_warranty_years": 8,
      "lithium_content_pct": 6.5,
      "certifications": ["CE", "UN38.3"]
    }
  }'

Същото извикване със SDK:

const passport = await client.dpp.create({
  gtin: "09506000134376",
  serial: "SN-00012345",
  product_name: "PowerCell 5 kWh LFP",
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery",
  market_countries: ["DE", "FR", "AT"],
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 62,
    recycled_content_pct: 12,
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});

console.log(passport.id);      // dpp_xxxxxxxx
console.log(passport.qr.svg);  // print-ready GS1 Digital Link QR

Отговорът включва насочена към потребителите landing страница (локализирана на 25 езика на ЕС) и QR код GS1 Digital Link, готов за печат на етикети — не е необходима отделна стъпка за QR.

3. Валидирайте, преди да създавате

Искате да уловите липсващи или невалидни полета, преди да запишете данните? POST /dpp/validate изпълнява точно същите правила за валидиране на ЕС, без да създава нищо. Идеален като предварителна проверка преди commit в CI.

const result = await client.dpp.validate({
  gtin: "09506000134376",
  product_name: "PowerCell 5 kWh LFP",
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery",
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 62,
    recycled_content_pct: 12,
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});

if (!result.valid) {
  console.error(result.errors);
  // [{ field: "battery_data.recyclability_pct", message: "..." }]
}

4. Групово създаване на цял каталог

За продуктов каталог изпратете до 100 паспорта на заявка към POST /dpp/batch. Преминете в цикъл през експорта от вашия ERP и целият ви асортимент е готов за минути.

const items = products.map((p) => ({
  gtin: p.gtin,
  serial: p.serial,
  product_name: p.name,
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery" as const,
  battery_data: {
    capacity_kwh: p.capacityKwh,
    carbon_footprint_kg: p.co2Kg,
    recycled_content_pct: p.recycledPct,
    recyclability_pct: p.recyclablePct,
    manufacturer_warranty_years: p.warrantyYears,
  },
}));

// Chunk into batches of 100
const result = await client.dpp.batch({ items: items.slice(0, 100) });

5. Вземане на QR кода за печат на етикети

Всеки паспорт предоставя своя GS1 Digital Link QR в четири формата за печат. Изтеглете ги чрез обекта на паспорта или директно:

curl https://qr3.app/v1/dpp/dpp_xxxxxxxx/qr.svg \
  -H "Authorization: Bearer $QR3_API_KEY" -o label.svg

qr.svg, qr.png, qr.pdf и qr.eps са налични — SVG/EPS за вашия принтер за етикети, PNG за уеб.

6. Поддържане на данните актуални (без да нарушавате QR кода)

GTIN/серийният номер/партидата са непроменими след създаването — това поддържа отпечатания GS1 URI стабилен завинаги. Всичко останало може да бъде актуализирано с PUT /dpp/{id}:

await client.dpp.update(passport.id, {
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 58, // re-measured, lower footprint
    recycled_content_pct: 16, // 2031 target reached early
    recyclability_pct: 95,
    manufacturer_warranty_years: 8,
  },
});

QR кодът върху физическия продукт никога не се променя; данните зад него — да. Това е целият смисъл на един динамичен паспорт.

7. Подаване в регистъра на ЕС

Когато централният регистър за DPP на ЕС е приложим за вашия продукт, подайте паспорт с едно извикване (план Business и нагоре):

const reg = await client.dpp.registerForEuRegistry(passport.id);
console.log(reg.data.eu_registry_status);          // "pending"
console.log(reg.data.registry_request_id);

8. Реагиране на сканирания с webhook-ове

Сканиранията на DPP са събития. Абонирайте се за qr.scanned и можете да ги предавате към вашата аналитика, да задействате повторни поръчки или да маркирате изтегляне от пазара — в реално време. Полезните товари са подписани (HMAC-SHA256); винаги проверявайте подписа.

import { verifyWebhook } from "@qr3/sdk";

app.post("/webhooks/qr3", async (req, res) => {
  const event = verifyWebhook(req.body, req.headers["qr3-signature"], secret);
  if (event.type === "qr.scanned") {
    console.log(event.data.country, event.data.dpp_id);
  }
  res.sendStatus(200);
});

Сглобяване на всичко: генериране на DPP в CI

Крайното състояние, което повечето производители искат: продуктовите данни се намират в ERP/PIM, а планирана задача поддържа паспортите синхронизирани.

  1. Експортирайте променените продукти от вашия ERP.
  2. client.dpp.validate(...) за всеки от тях — провалете билда при грешки във валидирането.
  3. client.dpp.batch(...) за новите продукти; client.dpp.update(...) за променените.
  4. Изпратете върнатите URL адреси на qr.svg към вашата система за печат на етикети.

Без уеб формуляр, без копиране и поставяне, без разминаване между вашите основни данни и вашите паспорти.

Често задавани въпроси

Нуждая ли се от отделен инструмент за QR кодове? Не. Всеки DPP връща GS1 Digital Link QR в SVG/PNG/PDF/EPS. QR кодът е точката за достъп до паспорта.

Мога ли да актуализирам паспорт, след като етикетът е отпечатан? Да — това е основната идея. GTIN/серийният номер са непроменими, така че отпечатаният URI остава валиден; всички полета с данни могат да се актуализират чрез PUT /dpp/{id}.

Колко паспорта мога да създам наведнъж? До 100 на заявка POST /dpp/batch. Разделяйте по-големите каталози; ограниченията на скоростта се прилагат според плана.

Кои категории се поддържат? battery и textile се предлагат с пълно валидиране за ЕС днес; general покрива други видове продукти. Battery и textile включват жива проверка за съответствие с ЕС (ESPR / AGEC).

Източници

Започнете безплатно и създайте първия си DPP чрез API: app.qr3.app/sign-up

Свързани статии