البدء السريع
البدء السريع للتحقق من الهوية.
من مفتاح sandbox إلى أول webhook موقّع، بالترتيب. لكل خطوة مثال يعمل — انسخه، واستبدل مفتاحك وعناوين URL الخاصة بك، ثم شغّله.
خطوة بخطوة
سبع خطوات في بعد ظهر واحد.
احصل على مفتاح sandbox
تُصدَر مفاتيح sandbox (البادئة vk_sand_) عند الطلب ريثما يجري بناء التسجيل الذاتي. اطلبها عبر نموذج الاتصال — يُلبَّى معظم الطلبات في يوم العمل نفسه. جلسات sandbox لا تُحتسب عليها رسوم أبداً، فلا داعي للانتظار قبل البدء.
أنشئ أول جلسة لك
استدعاء واحد. أرسل return_url (الصفحة التي يصل إليها المتقدّم عند الانتهاء) وwebhook_url (الوجهة التي تُرسل إليها النتيجة الموقّعة). ستحصل في المقابل على session_id وverification_url.
bashcurl -X POST https://api.shieldid.ca/v1/sessions \ -H "X-Api-Key: vk_sand_your_key" \ -H "Content-Type: application/json" \ -d '{ "return_url": "https://yourapp.example/verified", "webhook_url": "https://yourapp.example/hooks/shieldid", "expected_name": "Jordan Smith", "locale": "en", "metadata": { "application_id": "app_9182" } }'سلّم الرابط إلى المتقدّم
افتح verification_url وستظهر لك الصفحة المستضافة. في متصفح سطح المكتب تعرض الصفحة رمز QR، وعند مسحه يُنقل الرابط نفسه إلى الهاتف، وهناك يتم تصوير المستند وتحدّي الحيوية والصورة الذاتية. جرّب ذلك على هاتفك الآن.
أنشئ نقطة نهاية للـ webhook
وجّه webhook_url إلى مسار يقبل طلب POST، ويقرأ متن الطلب الخام (تحتاج إليه دون تحليل للتحقق من التوقيع)، ويعيد حالة 2xx. وفي أي حالة أخرى ستعيد ShieldID محاولة التسليم حتى ثلاث مرات.
javascriptimport express from "express"; const app = express(); app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { // Verify the signature before you trust this body — see the next step. console.log("Received a webhook:", req.body.toString()); res.status(200).send("ok"); }); app.listen(3000);تحقّق من التوقيع
لا تتصرف بناءً على متن الـ webhook قبل أن تتأكد من أنه صادر فعلاً من ShieldID. احسب HMAC-SHA256 على المتن الخام باستخدام السر الخاص بالـ webhook وقارنه بترويسة X-Bio-Signature.
javascriptimport crypto from "node:crypto"; function isValidShieldIdSignature(rawBody, signatureHeader, secret) { const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex"); const provided = signatureHeader || ""; const a = Buffer.from(expected, "hex"); const b = Buffer.from(provided, "hex"); return a.length === b.length && crypto.timingSafeEqual(a, b); } // rawBody must be the exact, unparsed request body app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { const ok = isValidShieldIdSignature(req.body, req.headers["x-bio-signature"], process.env.SHIELDID_WEBHOOK_SECRET); if (!ok) return res.status(401).send("invalid signature"); const result = JSON.parse(req.body); // result.session_id, result.status, result.checks, … res.status(200).send("ok"); });اقرأ النتيجة
تحتوي حمولة الـ webhook على كل ما تحتاج إليه. وإذا فضّلت جلب النتيجة بنفسك، بعد إعادة التوجيه مثلاً، فاستدعِ نقطة نهاية النتيجة مباشرة.
bashcurl https://api.shieldid.ca/v1/sessions/ses_9f2c1a/result \ -H "X-Api-Key: vk_sand_your_key" # → { "session_id": "ses_9f2c1a", "status": "VERIFIED", "checks": { "document": "PASS", … }, … }التعامل مع FAILED وإعادة المحاولة
الجلسة التي تنتهي إلى FAILED تحمل failure_reason. اعرض للمتقدّم رسالة مفيدة. قريباً: إعادة محاولة جلسة FAILED لإعادتها إلى PENDING. أما اليوم فتعامل مع FAILED على أنها حالة نهائية، وأنشئ جلسة جديدة إذا أراد المتقدّم المحاولة مرة أخرى.
قبل أن تفعّل الإنتاج
انتقل إلى الإنتاج.
لا يتغير شكل الطلب بين sandbox والإنتاج، بل المفتاح فقط. تأكد من هذه النقاط قبل أن تُمرّر متقدّماً حقيقياً عبر جلسة vk_live_.
- استبدل مفتاح vk_sand_ بمفتاح vk_live_. لا يتغير أي شيء آخر في الطلب.
- وجّه webhook_url إلى نقطة نهاية حقيقية تعمل دائماً وتتحقق من التوقيع، وليس إلى request-bin أو حاسوب محمول.
- تعامل في تطبيقك مع الحالات النهائية الثلاث: VERIFIED وFAILED وEXPIRED، وليس مسار النجاح فقط.
- تأكد من أن return_url يقرأ معاملَي الاستعلام session_id وstatus اللذين تضيفهما ShieldID عند إعادة التوجيه.
- راجع الأسعار الحالية عبر GET /v1/pricing/{country} أو صفحة الأسعار، حتى لا تفاجئك رسوم الإنتاج.
- أبقِ مفاتيح sandbox بعيداً عن أي موضع قد يصل إليه متقدّم حقيقي، فجلسة sandbox مجانية لأنها ليست حقيقية.
أسئلة
الأسئلة الشائعة حول البدء السريع.
ابدأ الآن
نفّذ الخطوة الأولى الآن.
اطلب مفتاح sandbox، والصق أمر cURL الأول في الطرفية، وستكون متقدماً بالفعل على معظم عمليات التكامل.