شروع سریع
راهنمای شروع سریع تأیید هویت.
از کلید sandbox تا اولین وبهوک امضاشده، به ترتیب. هر مرحله یک نمونه کاربردی دارد — آن را کپی کنید، کلید و نشانیهای خودتان را جایگزین کنید و اجرا کنید.
گامبهگام
هفت گام، یک بعدازظهر.
دریافت کلید sandbox
کلیدهای sandbox (با پیشوند vk_sand_) تا زمان ساخته شدن ثبتنام خودکار، بنا بر درخواست صادر میشوند. از طریق فرم تماس درخواست دهید — بیشتر درخواستها در همان روز کاری پاسخ داده میشوند. نشستهای sandbox هرگز صورتحساب نمیشوند، بنابراین دلیلی برای تأخیر در شروع وجود ندارد.
ایجاد اولین نشست (session) شما
یک فراخوانی کافی است. یک 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 نمایش داده میشود؛ با اسکن آن، همان پیوند به تلفن همراه منتقل میشود، یعنی جایی که عکسبرداری از مدرک، چالش زندهبودن (liveness) و سلفی انجام میشود. همین حالا آن را روی تلفن همراه خودتان امتحان کنید.
راهاندازی یک نقطهٔ پایانی 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 از قبل همهٔ آنچه را که نیاز دارید در بر دارد. اگر ترجیح میدهید نتیجه را خودتان دریافت کنید، مثلاً پس از یک تغییر مسیر (redirect)، نقطهٔ پایانی نتیجه را مستقیماً فراخوانی کنید.
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 را در ترمینال بچسبانید، و از بیشتر یکپارچهسازیها جلوتر خواهید بود.