Kuunda Msikilizaji wa Webhook ya Didit kwa Fastify & PostgreSQL (SW)
Jifunze jinsi ya kuunda msikilizaji thabiti na salama wa webhook kwa arifa za uthibitishaji wa utambulisho wa wakati halisi wa Didit kwa kutumia Node.js, Fastify, na PostgreSQL.

Ujumuishaji Salama wa WebhookUtekelezaji wa uthibitishaji wa saini ya HMAC-SHA256 ni muhimu ili kuhakikisha uhalisi na uadilifu wa malipo ya Didit webhook, kulinda programu yako dhidi ya maombi bandia na kudumisha usalama wa data.
Uchakataji wa Data kwa Wakati HalisiTumia webhooks kupokea arifa za papo hapo kuhusu mabadiliko ya hali ya kikao cha uthibitishaji wa utambulisho, kuwezesha programu yako kujibu mara moja na kusanifisha uwekaji wa watumiaji au michakato ya usimamizi wa hatari.
Hifadhi ya Data Inayoweza KupanukaTumia PostgreSQL kuhifadhi na kudhibiti data ya webhook kwa ufanisi, kuruhusu maswali thabiti, ukaguzi, na ujumuishaji na mifumo yako iliyopo ya usimamizi wa watumiaji, kuhakikisha uendelevu na uaminifu wa data.
Faida ya Didit ya ModuliJukwaa la utambulisho la moduli ya Didit na mfumo mpana wa webhook hurahisisha ujumuishaji, kutoa waendelezaji API safi na mtiririko wa data wa wakati halisi ili kujenga suluhisho rahisi za KYC zinazotumia AI na KYC ya Msingi Bila Malipo na hakuna ada za kuanzisha.
Kuelewa Didit Webhooks na Umuhimu Wake
Katika ulimwengu wa uthibitishaji wa utambulisho, maoni ya wakati halisi ni muhimu sana. Iwe unaingiza watumiaji wapya, unazuia ulaghai, au unahakikisha utiifu, kujua hali ya kikao cha uthibitishaji kinapotokea ni muhimu. Hapa ndipo webhooks zinapoingia. Webhooks za Didit hutoa njia otomatiki ya kupokea arifa kuhusu matukio yanayotokea ndani ya mtiririko wako wa kazi wa uthibitishaji wa utambulisho, kama vile kikao kukamilika, kushindwa, au kuhitaji hatua zaidi.
Badala ya kuuliza API ya Didit kila mara kwa masasisho, ambayo inaweza kuwa isiyofaa na kusababisha ucheleweshaji, webhooks husukuma data moja kwa moja kwenye sehemu yako ya mwisho iliyosanidiwa. Usanifu huu unaoendeshwa na matukio huhakikisha programu yako huwa na habari mpya zaidi kila wakati, ikiruhusu uchakataji wa haraka na uzoefu laini wa mtumiaji. Kwa mfano, mara tu mtumiaji anapokamilisha kwa mafanikio Uthibitishaji wa Kitambulisho cha Didit na Ukaguzi wa Uhai wa Kupita na Amilifu, webhook inaweza kuanzisha hatua inayofuata katika mtiririko wako wa uwekaji mara moja.
Didit inatoa matoleo ya webhook yanayoweza kusanidiwa, na v3 ikiwa ndiyo kiwango kinachopendekezwa kwa muundo wake mpana wa malipo. Unaweza kuweka URL yako ya webhook, toleo, na hata kufafanua sera za uhifadhi wa data moja kwa moja kupitia Didit Business Console au kupitia API, kukupa udhibiti kamili juu ya mtiririko wako wa data na majukumu ya kufuata.
Kusanidi Msikilizaji Wako wa Fastify Webhook
Fastify ni mfumo wa haraka na wenye matumizi kidogo ya rasilimali kwa Node.js, na kuifanya kuwa chaguo bora kwa kujenga wasikilizaji wa webhook wenye utendaji mzuri. Hivi ndivyo jinsi ya kuanza:
1. Usanidi wa Mradi na Utegemezi
Kwanza, anzisha mradi wako wa Node.js na usakinishe vifurushi muhimu:
mkdir didit-webhook-listener
cd didit-webhook-listener
npm init -y
npm install fastify dotenv pg crypto
Unda faili ya .env ili kuhifadhi ufunguo wako wa siri wa Didit webhook na maelezo ya muunganisho wa PostgreSQL:
DIDIT_WEBHOOK_SECRET=your_didit_webhook_secret_key
DATABASE_URL=postgresql://user:password@host:port/database
Unaweza kupata DIDIT_WEBHOOK_SECRET yako kutoka Didit Business Console chini ya Mipangilio ya Programu au kupitia Didit API's GET /v3/webhook/ endpoint.
2. Usanidi wa Seva ya Fastify
Unda faili ya app.js. Fastify inahitaji mwili ghafi kwa uthibitishaji wa saini, kwa hivyo tutaiweka ili isichanganue JSON kiotomatiki kwa njia yetu ya webhook.
require('dotenv').config();
const fastify = require('fastify')({ logger: true });
const crypto = require('crypto');
const { Client } = require('pg');
const DIDIT_WEBHOOK_SECRET = process.env.DIDIT_WEBHOOK_SECRET;
const DATABASE_URL = process.env.DATABASE_URL;
const pgClient = new Client({ connectionString: DATABASE_URL });
// Sajili parser ya maudhui kwa 'application/json' inayoacha mwili ghafi kwa njia maalum
fastify.addContentTypeParser('application/json', { parseAs: 'buffer' }, function (req, body, done) {
if (req.raw.url === '/webhooks/didit') {
done(null, body); // Acha ghafi kwa endpoint ya webhook
} else {
try {
const json = JSON.parse(body.toString());
done(null, json);
} catch (error) {
error.statusCode = 400;
done(error, undefined);
}
}
});
fastify.post('/webhooks/didit', async (request, reply) => {
const signature = request.headers['x-signature'];
const timestamp = request.headers['x-timestamp'];
const rawBody = request.body;
if (!signature || !timestamp || !rawBody) {
reply.code(400).send({ message: 'Missing signature, timestamp, or body' });
return;
}
// 1. Thibitisha saini ya HMAC-SHA256
const expectedSignature = crypto
.createHmac('sha256', DIDIT_WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody.toString()}`)
.digest('hex');
if (expectedSignature !== signature) {
reply.code(403).send({ message: 'Invalid signature' });
return;
}
// 2. Thibitisha muhuri wa muda (mfano, ndani ya dakika 5 kuzuia mashambulizi ya kurudia)
const fiveMinutesAgo = Date.now() - (5 * 60 * 1000);
if (parseInt(timestamp) < fiveMinutesAgo) {
reply.code(403).send({ message: 'Timestamp too old' });
return;
}
// 3. Changanua mwili wa JSON baada ya uthibitishaji
let payload;
try {
payload = JSON.parse(rawBody.toString());
} catch (error) {
reply.code(400).send({ message: 'Invalid JSON payload' });
return;
}
fastify.log.info('Received Didit webhook:', payload);
// 4. Chakata malipo ya webhook (mfano, hifadhi kwenye DB, sasisha hali ya mtumiaji)
try {
await pgClient.query(
'INSERT INTO webhooks (event_id, event_type, payload, received_at) VALUES ($1, $2, $3, NOW())',
[payload.id, payload.event, JSON.stringify(payload)]
);
// Mfano: Sasisha hali ya mtumiaji kulingana na payload.status
// await pgClient.query(
// 'UPDATE users SET verification_status = $1 WHERE didit_session_id = $2',
// [payload.status, payload.session_id]
// );
reply.code(200).send({ message: 'Webhook received and processed' });
} catch (dbError) {
fastify.log.error('Database error:', dbError);
reply.code(500).send({ message: 'Internal server error' });
}
});
const start = async () => {
try {
await pgClient.connect();
fastify.log.info('Connected to PostgreSQL');
await fastify.listen({ port: 3000, host: '0.0.0.0' });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Kuhifadhi Data ya Webhook kwenye PostgreSQL
Kuhifadhi data ya webhook ni muhimu kwa ukaguzi, utatuzi wa hitilafu, na kuhakikisha uadilifu wa data. PostgreSQL ni hifadhidata thabiti ya uhusiano inayofaa kwa kazi hii.
1. Schema ya Hifadhidata
Kwanza, unda jedwali la kuhifadhi matukio yako ya webhook. Schema hii inatoa mwanzo mzuri:
CREATE TABLE webhooks (
id SERIAL PRIMARY KEY,
event_id VARCHAR(255) UNIQUE NOT NULL, -- Kitambulisho cha tukio cha kipekee cha Didit
event_type VARCHAR(255) NOT NULL,
payload JSONB NOT NULL, -- Hifadhi malipo kamili ya JSON
received_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
2. Kuunganisha na Fastify
Kama inavyoonyeshwa katika mfano wa app.js, tunaunganisha mteja wa pg ili kuunganisha kwenye hifadhidata yako ya PostgreSQL na kuingiza malipo ya webhook yanayoingia. Safu ya payload JSONB NOT NULL inafaa kabisa kwa kuhifadhi kitu kizima cha JSON, ikiruhusu maswali rahisi baadaye bila mabadiliko ya schema yaliyofafanuliwa kwa kila uwanja mpya ambao Didit inaweza kuanzisha.
Kumbuka kushughulikia makosa yanayoweza kutokea ya hifadhidata kwa uzuri. Mfano hapo juu unajumuisha kizuizi cha msingi cha try-catch kwa shughuli za hifadhidata.
Kulinda Sehemu Yako ya Mwisho ya Webhook
Usalama ni muhimu sana wakati wa kushughulikia data nyeti ya uthibitishaji wa utambulisho. Didit inatumia saini za HMAC-SHA256 ili kuhakikisha kuwa webhooks zinazoingia ni halali na hazijaharibiwa.
1. Uthibitishaji wa Saini ya HMAC
Kila ombi la Didit webhook linajumuisha vichwa viwili muhimu: X-Signature na X-Timestamp. Kichwa cha X-Signature kina saini ya HMAC-SHA256 iliyozalishwa kwa kutumia siri yako ya kipekee ya webhook na mwili ghafi wa ombi uliounganishwa na muhuri wa muda. Msikilizaji wako lazima:
- Pata
DIDIT_WEBHOOK_SECRETyako. - Toa vichwa vya
X-SignaturenaX-Timestamp. - Jenga upya malipo yaliyotiwa saini:
`${timestamp}.${rawBody}`. - Zalisha saini yako mwenyewe ya HMAC-SHA256 kwa kutumia siri yako na malipo yaliyojengwa upya.
- Linganisha saini yako iliyozalishwa na
X-Signaturekutoka kwa ombi. Ikiwa hazilingani, kataa ombi.
Mfano wa Fastify uliotolewa unaonyesha mchakato huu halisi, kuhakikisha kuwa webhooks halisi tu za Didit ndizo zinazochakatwa.
2. Uthibitishaji wa Muhuri wa Muda
Kichwa cha X-Timestamp ni muhimu kwa kuzuia mashambulizi ya kurudia. Shambulio la kurudia hutokea wakati mshambuliaji anapoingilia webhook halali na kuituma tena baadaye. Kwa kuangalia kwamba muhuri wa muda ni wa hivi karibuni (mfano, ndani ya dakika 5 za wakati wa sasa), unaweza kupunguza hatari hii. Kipande cha msimbo wa Fastify kinajumuisha ukaguzi ili kuhakikisha muhuri wa muda sio wa zamani sana.
Jinsi Didit Inavyosaidia
Jukwaa la Didit limeundwa kufanya ujumuishaji wa uthibitishaji wa utambulisho kuwa rahisi na salama. Usanifu wetu wa moduli unakuwezesha kuunganisha ukaguzi mbalimbali wa utambulisho, kutoka Uthibitishaji wa Kitambulisho kwa uchambuzi thabiti wa hati hadi Uthibitishaji wa NFC kwa ukaguzi wa ePassport/eID wa usalama wa juu, na Uchunguzi na Ufuatiliaji wa AML kwa kufuata sheria. Mfumo wa webhook ni sehemu kuu ya moduli hii, ikitoa masasisho ya wakati halisi yanayokuwezesha kuratibu mtiririko tata wa kazi wa KYC bila kuuliza mara kwa mara.
Mbinu ya Didit inayotumia AI inamaanisha kuwa mifumo yetu inajifunza na kujirekebisha kila wakati, ikitoa usahihi wa hali ya juu na ugunduzi wa ulaghai. Nyaraka wazi za API na mawazo ya kwanza kwa msanidi programu, pamoja na vipengele kama KYC ya Msingi Bila Malipo na hakuna ada za kuanzisha, hurahisisha kuanza. Webhooks zetu hutoa data ya utambulisho iliyopangwa, kuruhusu programu yako kujibu kwa akili matokeo ya uthibitishaji na kusanifisha uaminifu kwa kiwango kikubwa, duniani kote. Iwe unahitaji kuthibitisha umri kwa kutumia Ukadiriaji wa Umri wa Didit au kuhakikisha mtumiaji ni mtu halisi aliye hai na Uhai wa Kupita na Amilifu, Didit inatoa zana na maoni ya wakati halisi muhimu kwa suluhisho thabiti la utambulisho.
Uko Tayari Kuanza?
Uko tayari kuona Didit ikifanya kazi? Pata demo ya bure leo.
Anza kuthibitisha vitambulisho bila malipo na ngazi ya bure ya Didit.