اتصال سایت شما به آزمونهای دیلی کوییز
کلید API را از مدیریت API دریافت کنید. درخواست ارسال و تأیید پیامک را از بکاند خودتان بفرستید؛ کلید را در جاوااسکریپت عمومی یا اپلیکیشن قابل دانلود قرار ندهید.
https://dailyquiz.ir/wp-json/daily-quiz/v1شروع سریع
- توکن آزمون منتشرشده و کلید سایت فعال را از مدیریت بگیرید. سایتِ متعلق به مدرس فقط به آزمونهای همان مدرس دسترسی دارد.
- با request-otp کد را ارسال و با verify-otp تأیید کنید.
- session_token را برای دریافت سؤالها و ارسال پاسخ به کار ببرید.
- اندیس گزینه از صفر آغاز میشود. مثلاً answer: 0 یعنی گزینه اول. شناسه سؤال را از پاسخ questions بردارید.
- ارسال دوباره پاسخ، همان نتیجه اولین ثبت موفق را برمیگرداند.
curl -X POST 'https://dailyquiz.ir/wp-json/daily-quiz/v1/auth/request-otp' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{"phone":"09123456789","exam_token":"exam_..."}'همه درخواستها باید از HTTPS استفاده کنند. نمونهها صرفاً ساختار درخواست و پاسخ هستند و داده زنده محسوب نمیشوند.
مسیرهای قابل استفاده
GET /exam-access/{token}
بدون کلید؛ اطلاعات عمومی آزمون منتشرشده
نمونه پاسخ
{"success":true,"exam":{"id":12,"title":"آزمون نمونه","duration":10,"total_questions":20}}POST /auth/request-otp
Bearer API_KEY — فقط در سرور شما
بدنه JSON
{"phone":"09123456789","exam_token":"exam_..."}نمونه پاسخ
{"success":true,"otp_token":"otp_...","expires_in":120}POST /auth/verify-otp
Bearer API_KEY — همان سایتی که کد را درخواست کرده
بدنه JSON
{"otp_token":"otp_...","code":"12345"}نمونه پاسخ
{"success":true,"session_token":"sess_...","exam_id":12,"expires_in":600}GET /exams/{exam_id}/questions
Bearer SESSION_TOKEN
نمونه پاسخ
{"success":true,"exam":{"title":"نمونه","duration":10,"total_questions":1},"questions":[{"id":7,"text":"پرسش نمونه","type":"multi_choice","options":["اول","دوم"],"image_url":null}]}POST /exams/{exam_id}/submit
Bearer SESSION_TOKEN
بدنه JSON
{"answers":[{"question_id":7,"answer":0}]}نمونه پاسخ
{"success":true,"score":100,"total":100,"result":[{"question_id":7,"correct":true,"score":5,"max_score":5}],"final_status":"fully_graded"}GET /exams/{exam_id}/result
Bearer SESSION_TOKEN
نمونه پاسخ
همان پاسخ ذخیرهشده مسیر submit؛ پیش از ثبت نتیجه، وضعیت 409 برمیگردد.زمان، محدودیت و امتیازدهی
- کد پیامک: ۱۲۰ ثانیه اعتبار، حداکثر ۵ تلاش و ۳ ارسال در ساعت برای هر شماره؛ ۱۲ ارسال در ساعت برای هر IP.
- سقف عمومی: ۱۸۰ درخواست در دقیقه برای هر IP. سقف کلید سایت از تنظیمات مدیریت خوانده میشود.
- حداکثر بدنه درخواست: ۱۰۰ کیلوبایت؛ حداکثر سؤال: ۵۰۰.
- زمان نشست آزمون زماندار از تأیید کد آغاز میشود؛ آزمون بدون زمان تا ۲۴ ساعت اعتبار دارد. نتیجه ثبتشده تا هفت روز بعد از انقضای نشست قابل دریافت است.
- فقط سؤال چندگزینهای پشتیبانی میشود. هر پاسخ درست ۵ امتیاز دارد و نمره نهایی درصد پاسخهای درست از کل سؤالهاست. سؤال ارسالنشده بیپاسخ محسوب میشود.
- ترتیب گزینهها در طول نشست ثابت است. snapshot سؤالها در شروع نشست حفظ میشود.
خطاها و بازیابی
خطای عملیاتی دارای success: false و error است. خطاهای مجوز وردپرس دارای code، message و data.status هستند.
| وضعیت | معنی / اقدام |
|---|---|
| 401 | کلید، کد یا نشست نامعتبر؛ احراز هویت را بررسی کنید. |
| 403 | دسترسی سایت، حساب یا HTTPS مجاز نیست. |
| 404 | آزمون پیدا نشد یا منتشر نشده است. |
| 409 | عملیات با وضعیت فعلی سازگار نیست یا زمان پایان یافته است. |
| 413 | بدنه درخواست بیش از حد بزرگ است. |
| 422 | ساختار پاسخ، شناسه تکراری یا نوع سؤال نامعتبر است. |
| 429 | سقف درخواست پر شده؛ با فاصله زمانی دوباره تلاش کنید. |
| 502 | ارسال پیامک انجام نشد. |
| 503 | خطای موقت ذخیرهسازی؛ دوباره تلاش کنید. |
وبهوک نتیجه
نشانی HTTPS را در تنظیمات همان سایت وارد کنید. نتیجه فقط به سایت صاحب نشست ارسال میشود. تحویل فعلی best-effort است؛ برای بازیابی قطعی از مسیر result استفاده کنید.
{"event_id":"exam-result-42","exam_id":12,"user_id":8,"score":80,"total":100}امضای X-DQ-Signature برابر HMAC-SHA256 رشته timestamp + "." + raw_body با کلید API همان سایت است. timestamp از هدر X-DQ-Timestamp خوانده میشود. امضا را با مقایسه ثابتزمان تأیید، زمان را با مهلت ۵ دقیقه بررسی و event_id تکراری را رد کنید. مقصدهای شبکه داخلی و تغییر مسیر مجاز نیستند.
نشستهای قبل از ارتقای امنیتی باید دوباره با OTP ساخته شوند.