SkjölunFyrir forritara
Webhooks
Kling sendir undirritaðan webhook á þjóninn þinn þegar greiðsla, krafa eða áskrift breytist. Hvernig þú skráir endapunkt, hvaða atburðir eru til, hvernig þú staðfestir X-Kling-Signature hausinn og hvernig endurtekningar virka.
Webhook er beiðni sem Kling sendir á þjóninn þinn þegar eitthvað gerist, til dæmis þegar greiðsla fer í gegn. Afgreiddu pantanir út frá webhooks, ekki út frá vafra viðskiptavinarins: vafrinn getur lokast áður en hann kemst aftur á síðuna þína.
Skráðu endapunkt
Í stjórnborðinu opnar þú Tilkynningar og bætir við webhook með slóðinni þinni og atburðunum sem þú vilt fá. Eða notaðu API:
curl -X POST https://api.kling.is/v1/notification-channels \
-H "Authorization: Bearer $KLING_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "webhook",
"config": { "url": "https://example.is/api/webhooks/kling" },
"event_subscriptions": ["checkout.session.completed", "payment_intent.captured"]
}'Kling býr til undirritunarlykil og skilar honum í config.secret; hann sést líka í stjórnborðinu. Slóðin þarf að vera aðgengileg af netinu. npx @klingis/cli init getur gert þetta allt fyrir þig og skrifað lykilinn í .env.local sem KLING_WEBHOOK_SECRET.
Prófun og raunumhverfi hafa aðskilda endapunkta og lykla.
Atburðir
| Atburður | Hvenær |
|---|---|
checkout.session.completed |
Viðskiptavinur lauk greiðsluferli |
payment_intent.captured |
Upphæðin var innheimt: kortagreiðsla, eða krafa sem var greidd |
payment_intent.failed |
Greiðsla mistókst |
payment_intent.refunded |
Greiðsla var endurgreidd |
claim.created, claim.paid |
Krafa í heimabanka var stofnuð eða greidd |
subscription.created, subscription.activated, subscription.updated, subscription.canceled |
Breytingar á áskrift |
subscription.renewed |
Endurnýjun var rukkuð |
subscription.trial_ended |
Prufutíma lauk |
subscription.payment_failed, subscription.payment_retry_failed, subscription.payment_recovered |
Endurnýjun mistókst, ný tilraun mistókst, eða ný tilraun tókst |
Beiðnin
Kling sendir POST með JSON:
{
"id": "evt_...",
"type": "payment_intent.captured",
"created_at": "2026-10-01T12:00:00.000Z",
"data": { "id": "pi_..." },
"merchant_id": "...",
"environment": "test"
}Í data er hluturinn sem atburðurinn snýst um, fyrst id hans. Hausar: X-Kling-Signature, X-Kling-Event (tegund atburðar) og X-Kling-Delivery-Id.
Staðfestu undirritunina
X-Kling-Signature er sha256= og á eftir HMAC-SHA256 af hráum meginmáli beiðninnar, í hex, með undirritunarlyklinum þínum. Reiknaðu hana af nákvæmlega þeim bætum sem bárust, áður en JSON er þáttað:
import crypto from "node:crypto";
export function verifyKlingSignature(rawBody: string, header: string | null, secret: string): boolean {
if (!header) return false;
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected);
const b = Buffer.from(header);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}Hafnaðu beiðninni með 401 ef hún passar ekki.
Endurtekningar
Svaraðu með 2xx innan 30 sekúndna. Allt annað telst misheppnað og Kling reynir aftur eftir 1 mínútu, 5 mínútur, 30 mínútur og 2 klukkustundir (fimm tilraunir alls). Tilvísunum (redirects) er ekki fylgt. Láttu meðhöndlunina þola að sami atburður berist tvisvar: notaðu id atburðarins til að sleppa tvíteknum.
POST /v1/notification-channels/test-webhooks sendir debug.check atburð á endapunktinn svo þú getir prófað hann.
Í þróun á eigin vél
npx @klingis/cli listen --forward http://localhost:3000/api/webhooks/kling sækir prófunaratburðina þína og framsendir á þjóninn á vélinni þinni, án opinberrar slóðar. Framsendir atburðir eru ekki undirritaðir, svo slepptu staðfestingunni fyrir þá í þróun.