#P1779
POST /b2c/v1/auth/submit
B2C Verify OTP & Login
این اندپوینت مرحله نهایی احراز هویت است.
کلاینت کد دریافتی (OTP) را به همراه شناسه مسافر ارسال میکند. سیستم کد را در جدول otp_requests اعتبارسنجی کرده (بررسی انقضا و عدم استفاده قبلی) و در صورت صحت، وضعیت کد را به "استفاده شده" تغییر میدهد و یک JWT Token با اعتبار ۷ روز برای کاربر صادر میکند.
Submit OTP
URL:
/b2c/v1/auth/submitMethod: POST
Controller: V1UserController@authSubmit
Auth: Public (Guest Access)
Headers (الزامی)
| Header Name | Description |
|---|---|
| Domain | دامنه سایت فروش (جهت ثبت در Payload توکن به عنوان iss و aud). |
Body Parameters (الزامی)
| Parameter | Type | Description |
|---|---|---|
| passenger_id | Integer | شناسه مسافر (دریافت شده در پاسخ مرحله قبل). |
| otp | String/Int | کد یکبار مصرف دریافتی در پیامک. |
| branch | Integer | شناسه شعبه (جهت ثبت در کلیم brn توکن). |
Response Structure
| Key | Description |
|---|---|
| status | وضعیت عملیات (true). |
| access_token | توکن احراز هویت (JWT) که باید در هدر Authorization: Bearer ... درخواستهای بعدی ارسال شود. مدت اعتبار: ۶۰۴۸۰۰ ثانیه (یک هفته). |
| user | آبجکت حاوی اطلاعات پروفایل کاربر (نام، نام خانوادگی، موبایل و کدملی). |
Example Responses
۱. موفقیت آمیز (Login Success):
{
"status": true,
"user": {
"uuid": 5421,
"from": "user",
"role": "passenger",
"type": "passenger",
"level": 1,
"data": {
"title": {
"fa": "محمد محمدی",
"en": "Mohammad Mohammadi"
},
"sex": "male",
"first_name": "Mohammad",
"last_name": "Mohammadi",
"first_name_fa": "محمد",
"last_name_fa": "محمدی",
"mobile": "09121234567",
"national_code": "0012345678"
}
},
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}
۲. خطای نامعتبر بودن کد (422 Unprocessable Entity - Code 1209):
{
"status": false,
"code": 1209,
"message": "رمز یکبار مصرف وارد شده معتبر نمی باشد."
}
Technical Logic
Request (ID + OTP)
↓
Validate OTP
Check table `otp_requests`
Match ID & Code AND
Not Expired AND Not Used
Check table `otp_requests`
Match ID & Code AND
Not Expired AND Not Used
↓ Invalid
Error 1209
Return 422 JSON
Return 422 JSON
↓ Valid
Update OTP
Set
Set
is_used = 1↓
Fetch User Info
SELECT from `customers`
Detect User Agent (Device)
SELECT from `customers`
Detect User Agent (Device)
↓
Generate JWT
Claims: uuid, branch, ip, domain
Exp: +7 Days
Claims: uuid, branch, ip, domain
Exp: +7 Days
↓
Return Token + User Data