שירות 2FA חיצוני - מדריך שימוש
שלבו אימות דו-שלבי (2FA) באתר שלכם באמצעות WhatsApp. שלחו קודי אימות ללקוחות בקלות ובטחון.
סקירה כללית
שירות ה-2FA של Yotaro מאפשר לכם לשלב אימות דו-שלבי דרך WhatsApp באתר או באפליקציה שלכם. במקום לשלוח SMS יקרים, הלקוחות יקבלו את קודי האימות ישירות לווטסאפ שלהם.
שימו לב: כדי להשתמש בשירות, עליכם לקבל טוקן API מהמנהל של Yotaro. צרו קשר איתנו כדי לקבל גישה.
התחלת עבודה
1. קבלת טוקן API
צרו קשר עם הצוות של Yotaro לקבלת טוקן API. תקבלו:
- API Token: מחרוזת של 64 תווים לאימות בקשות
- Webhook Secret: (אופציונלי) לאימות webhooks נכנסים
2. כתובת ה-API
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"}'
שליחת קוד אימות
/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 - תצטרכו אותו לאימות הקוד!
אימות קוד
/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
}
}
בדיקת סטטוס
/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'];
}