Pređi na sadržaj

PrestaShop · preko API-ja

PrestaShop fiskalizacija u Srbiji: fiskalni račun preko BokaPOS API-ja

PrestaShop moduli se zakače na hook-ove porudžbine, pa je fiskalizacija jedan modul koji na izabranom statusu pozove BokaPOS API. BokaPOS nema gotov PrestaShop modul; developer ga napravi oko API-ja, obično za dan.

Za PrestaShop prodavnice u Srbiji važe ista pravila kao za svaki web shop: odobren ESIR, V-PFR Poreske uprave, elektronska dostava računa kupcu. Pregled pravila: ESIR za web shop.

Primer ispod je isti poziv koji radi za svaku platformu: token, pa jedan POST /v1/fiscal-documents sa idempotentnim ključem porudžbine. Kompletna dokumentacija sa primerima u pet jezika je na stranici API.

Gde se integracija zakači

Modul registruje hook koji PrestaShop poziva posle promene statusa porudžbine (i, po potrebi, hook validacije porudžbine za plaćanja koja stižu odmah). Na izabranom statusu modul sastavi zahtev iz stavki, popusta, dostave i plaćanja, pozove BokaPOS i sačuva odgovor u sopstvenoj tabeli vezanoj za porudžbinu. Povraćaj (order slip) pokreće fiskalnu refundaciju uz obaveznu identifikaciju kupca.

Koraci integracije

Obim posla
Tipično jedan dan rada developera koji poznaje PrestaShop module, plus testiranje refundacije.

  1. Nalog i sandbox

    Zatražite BokaPOS pristup: sandbox pristupni podaci i probni bezbednosni element su besplatni.

  2. Konfiguracija modula

    Client id i tajna, obveznik i poslovni prostor, status koji pokreće fiskalizaciju, mapiranje poreskih pravila na oznake sa GET /v1/tax-rates, mapiranje načina plaćanja na sedam zvaničnih vrsta.

  3. Hook na statusu

    Na statusu pošaljite POST /v1/fiscal-documents sa idempotentnim ključem iz reference porudžbine. Prikažite PFR broj i link u admin panelu porudžbine.

  4. Račun kupcu

    Priložite PDF iz /representations/ uz PrestaShop e-poštu ili uključite BokaPOS modul E-mail.

  5. Povraćaj i produkcija

    Order slip šalje fiskalnu refundaciju sa referencom i identifikacijom kupca. Posle testova obveznik aktivira bezbednosni element i prelazite na produkciju.

Isti poziv za svaku platformu

curl -X POST "https://auth.bokapos.rs/realms/boka/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=$BOKAPOS_CLIENT_ID" \
  -d "client_secret=$BOKAPOS_CLIENT_SECRET"

curl -X POST "https://api.bokapos.rs/v1/fiscal-documents" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  -H "Idempotency-Key: order-4127-sale-1" \
  -H "Content-Type: application/json" \
  -d '{
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "clientReference": "ORDER-4127",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "cashier": {
    "id": "web-shop",
    "displayName": "Web shop"
  },
  "items": [
    {
      "name": "Bluetooth slušalice",
      "unitOfMeasure": "kom",
      "quantity": 1,
      "unitPrice": 8990,
      "gtin": "8606012345678",
      "taxLabels": [
        "F"
      ]
    }
  ],
  "payments": [
    {
      "type": "CARD",
      "amount": 8990
    }
  ],
  "metadata": {
    "orderId": "4127",
    "channel": "web"
  }
}'

API dokumentacija

Česta pitanja

Da li BokaPOS ima gotov PrestaShop modul?

Trenutno ne. API je dokumentovan sa primerima u PHP-u, sandbox je besplatan, pa developer modul napravi za dan.

Koji status da izaberem za fiskalizaciju?

Onaj koji odgovara izvršenom prometu: za kartično plaćanje status plaćeno, za pouzeće isporučeno. Za uplate unapred pre isporuke koristite avansni račun.

Kako se mapiraju poreska pravila?

Svako poresko pravilo PrestaShopa dobija oznaku pročitanu sa `GET /v1/tax-rates` (u produkciji Ђ 20%, Е 10%, Г 0%, А 0%). Oznake se čitaju uživo, ne ukodiraju.

Šta ako V-PFR ne odgovori?

Modul ne sme da ponovi zahtev naslepo. BokaPOS vraća jasan status nepoznatog ishoda; modul ga prikaže i sačeka proveru pre bilo kakvog novog izdavanja.

Spremni da fiskalizujeteiz sopstvenog sistema?

Probno okruženje je besplatno, a prvi račun izdajete isti dan.