מדריך מפתחים

שירות 2FA חיצוני - מדריך שימוש

שלבו אימות דו-שלבי (2FA) באתר שלכם באמצעות WhatsApp. שלחו קודי אימות ללקוחות בקלות ובטחון.

סקירה כללית

שירות ה-2FA של Yotaro מאפשר לכם לשלב אימות דו-שלבי דרך WhatsApp באתר או באפליקציה שלכם. במקום לשלוח SMS יקרים, הלקוחות יקבלו את קודי האימות ישירות לווטסאפ שלהם.

WhatsApp
משלוח מיידי
קודים מגיעים תוך שניות לווטסאפ
API
פשוט לשילוב
REST API עם תיעוד מלא
Webhook
עדכונים בזמן אמת
קבלו התראה כשקוד אומת

שימו לב: כדי להשתמש בשירות, עליכם לקבל טוקן API מהמנהל של Yotaro. צרו קשר איתנו כדי לקבל גישה.


התחלת עבודה

1. קבלת טוקן API

צרו קשר עם הצוות של Yotaro לקבלת טוקן API. תקבלו:

  • API Token: מחרוזת של 64 תווים לאימות בקשות
  • Webhook Secret: (אופציונלי) לאימות webhooks נכנסים

2. כתובת ה-API

https://yotaro.tech/api/v1/external-2fa/

3. אימות בקשות

כל בקשה חייבת לכלול את הטוקן בכותרת X-API-Key:

curl -X POST https://yotaro.tech/api/v1/external-2fa/send \
  -H "X-API-Key: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"phone": "972501234567"}'

שליחת קוד אימות

POST /api/v1/external-2fa/send

פרמטרים

פרמטר סוג חובה תיאור
phone string כן מספר טלפון (עם קידומת מדינה, ללא +)
context object לא נתונים נוספים שיחזרו ב-webhook (לדוגמה: user_id)

דוגמת בקשה

{
  "phone": "972501234567",
  "context": {
    "user_id": "12345",
    "action": "login"
  }
}

תגובה מוצלחת

{
  "success": true,
  "message": "Verification code sent",
  "data": {
    "request_id": "req_abc123...",
    "expires_at": "2024-12-01 14:35:00",
    "phone_masked": "972***567"
  }
}

חשוב: שמרו את ה-request_id - תצטרכו אותו לאימות הקוד!


אימות קוד

POST /api/v1/external-2fa/verify

פרמטרים

פרמטר סוג חובה תיאור
request_id string כן מזהה הבקשה שהתקבל בשלב שליחת הקוד
code string כן קוד בן 6 ספרות שהמשתמש הזין

דוגמת בקשה

{
  "request_id": "req_abc123...",
  "code": "123456"
}

תגובה מוצלחת

{
  "success": true,
  "message": "Code verified successfully",
  "data": {
    "verified": true,
    "context": {
      "user_id": "12345",
      "action": "login"
    }
  }
}

תגובה כושלת

{
  "success": false,
  "message": "Invalid verification code",
  "data": {
    "verified": false,
    "attempts_remaining": 2
  }
}

בדיקת סטטוס

GET /api/v1/external-2fa/status?request_id=xxx

תגובה

{
  "success": true,
  "data": {
    "status": "pending",  // pending | verified | expired | failed
    "attempts_used": 1,
    "attempts_remaining": 2,
    "expires_at": "2024-12-01 14:35:00",
    "verified_at": null
  }
}

סטטוסים אפשריים

סטטוס תיאור
pending ממתין לאימות
verified הקוד אומת בהצלחה
expired הקוד פג תוקף (אחרי 10 דקות)
failed נכשל (יותר מדי ניסיונות שגויים)

Webhooks (אופציונלי)

אם הגדרתם Webhook URL בטוקן, תקבלו התראה אוטומטית כשקוד אומת בהצלחה:

POST /your-webhook-url

Headers:
  Content-Type: application/json
  X-Webhook-Signature: [HMAC-SHA256 signature]

Body:
{
  "event": "verified",
  "request_id": "req_abc123...",
  "context": {
    "user_id": "12345",
    "action": "login"
  },
  "timestamp": "2024-12-01T12:35:00+00:00"
}

אימות חתימה

כדי לוודא שה-webhook הגיע מ-Yotaro, אמתו את החתימה:

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'];
$expected = hash_hmac('sha256', $payload, $webhookSecret);

if (hash_equals($expected, $signature)) {
    // Webhook is valid
}

טיפול בשגיאות

קוד HTTP משמעות פעולה מומלצת
400 בקשה לא תקינה בדקו את הפרמטרים
401 טוקן לא תקין / חסר בדקו את ה-X-API-Key
404 בקשת אימות לא נמצאה בדקו את ה-request_id
429 חריגה ממגבלת בקשות המתינו ונסו שוב מחר
500 שגיאת שרת צרו קשר עם התמיכה

דוגמה מלאה - PHP

<?php
class Yotaro2FA {
    private $apiKey;
    private $baseUrl = 'https://yotaro.tech/api/v1/external-2fa';

    public function __construct($apiKey) {
        $this->apiKey = $apiKey;
    }

    /**
     * שליחת קוד אימות
     */
    public function sendCode($phone, $context = null) {
        return $this->request('POST', '/send', [
            'phone' => $phone,
            'context' => $context
        ]);
    }

    /**
     * אימות קוד
     */
    public function verifyCode($requestId, $code) {
        return $this->request('POST', '/verify', [
            'request_id' => $requestId,
            'code' => $code
        ]);
    }

    /**
     * בדיקת סטטוס
     */
    public function checkStatus($requestId) {
        return $this->request('GET', '/status?request_id=' . $requestId);
    }

    private function request($method, $endpoint, $data = null) {
        $ch = curl_init($this->baseUrl . $endpoint);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'X-API-Key: ' . $this->apiKey,
            'Content-Type: application/json'
        ]);

        if ($method === 'POST') {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }

        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }
}

// ===== שימוש =====

$twoFA = new Yotaro2FA('YOUR_API_TOKEN');

// שלב 1: שליחת קוד
$result = $twoFA->sendCode('972501234567', ['user_id' => '123']);

if ($result['success']) {
    $requestId = $result['data']['request_id'];
    // שמור את ה-request_id ב-session
    $_SESSION['2fa_request_id'] = $requestId;
}

// שלב 2: אימות קוד (אחרי שהמשתמש הזין את הקוד)
$code = $_POST['verification_code'];
$requestId = $_SESSION['2fa_request_id'];

$verify = $twoFA->verifyCode($requestId, $code);

if ($verify['success'] && $verify['data']['verified']) {
    // הצלחה! אפשר להתחבר את המשתמש
    echo "אומת בהצלחה!";
} else {
    echo "קוד שגוי. נסיונות שנותרו: " . $verify['data']['attempts_remaining'];
}

צריכים עזרה?

צוות התמיכה שלנו ישמח לסייע בכל שאלה

system@looz.online