Ha a Számlázz.hu-ban egy számla kifizetett összege megváltozik, például a banki egyeztetés rögzít egy átutalást, a Számlázz.hu HTTP POST kérést küld a megadott címre. Ebből tudod meg, hogy egy rendelés ki van fizetve. Az értesítés URL-jét a Számlázz.hu fiókban, a Fiók beállítások / Számlázás alapadatok oldal alján adod meg.
Az értesítést nem írja alá semmi, csak a feladó IP-címe azonosítja. Ezért a recept az értesítést csak jelzésnek veszi: a számla tényleges állapotát a kasszával kérdezi le, és azt menti.
A fizetesiAllapotMentese() a saját adatbázis-függvényed. Felülírja a rendelés fizetési állapotát, nem hozzáad.
app/api/szamlazz/ipn/route.ts
import { isSzamlazzError } from 'kassza'import { type IpnNotification, ipnOkResponse, isSzamlazzIp, readIpnNotification } from 'kassza/ipn'import { addMoney } from 'kassza/money'import { kassza } from '@/lib/kassza'import { fizetesiAllapotMentese } from '@/lib/rendelesek'export async function POST(request: Request) { if (!isSzamlazzIp(request.headers.get('x-forwarded-for') ?? '')) { return new Response('Tiltott', { status: 403 }) } let ertesites: IpnNotification try { ertesites = await readIpnNotification(request) } catch (error) { if (!isSzamlazzError(error)) throw error console.error('Értelmezhetetlen IPN értesítés', error.message) return new Response('Hibás értesítés', { status: 400 }) } const szamla = await kassza.invoices.find(ertesites.invoiceNumber) if (!szamla) { console.error('IPN értesítés ismeretlen számláról', ertesites.invoiceNumber) return ipnOkResponse() } const kifizetett = addMoney(...szamla.payments.map((befizetes) => befizetes.amount)) await fizetesiAllapotMentese({ szamlaszam: szamla.header.number, rendelesszam: szamla.header.orderNumber, dijbekeroszam: ertesites.proformaNumber, kifizetett, teljesenFizetve: kifizetett >= szamla.totals.grossAmount, }) return ipnOkResponse()}
A válaszkódok a Számlázz.hu újraküldését irányítják. Csak a 200 számít sikernek, minden más válasz vagy időtúllépés után a Számlázz.hu 3 percenként újrapróbálja, legfeljebb tízszer.
Helyzet
Válasz
Mi történik
Nem a Számlázz.hu címéről jött
403
Nincs feldolgozás.
Hiányzik egy kötelező mező
400
A Számlázz.hu újraküldi, de a hiba a naplóban látszik.
A számla nem található
200
Nincs mit menteni, az újraküldés sem segítene.
A lekérdezés vagy az adatbázis hibát dob
500
A Számlázz.hu 3 perc múlva újraküldi.
Sikeres mentés
200
Kész.
IPN fizetési értesítés
Webhook kérés feldolgozása és a Számlázz.hu IP-címének ellenőrzése.