#P1778
POST /b2c/v1/auth/otp
B2C Customer Authentication (OTP)
این اندپوینت وظیفه مدیریت ورود و ثبتنام کاربران در وبسایتهای فروش (B2C) را بر عهده دارد.
سیستم از مکانیزم رمز یکبار مصرف (OTP) استفاده میکند. نکته کلیدی این است که اگر شماره موبایل در سیستم وجود نداشته باشد، کاربر به صورت خودکار (Auto-Register) ثبتنام شده و شناسه مسافر (`passenger_id`) ایجاد میگردد.
Request OTP / Login
URL:
/b2c/v1/auth/otpMethod: POST
Controller: V1UserController@authOtp
Auth: Public (Guest Access)
Body Parameters (الزامی)
| Parameter | Type | Description |
|---|---|---|
| mobile | String | شماره موبایل کاربر. سیستم فرمت را بررسی کرده و در صورت نیاز عدد '0' را به ابتدای آن اضافه میکند. |
| branch | Integer | شناسه شعبه فعال (Office ID). در صورت ثبتنام جدید، کاربر به این شعبه منتسب میشود. |
Response Structure
| Key | Description |
|---|---|
| status | بولین (true/false) که موفقیت عملیات ارسال پیامک را نشان میدهد. |
| data.passenger_id | شناسه منحصر به فرد کاربر (Customer ID) در دیتابیس. چه کاربر جدید باشد چه قدیمی، این شناسه برگردانده میشود. |
| message | پیام متنی وضعیت عملیات جهت نمایش به کاربر. |
Example Responses
۱. موفقیت آمیز (201 Created):
{
"status": true,
"time": 1702134567,
"data": {
"passenger_id": 5421
},
"message": "OTP با موفقیت ارسال گردید."
}
۲. خطای محدودیت ارسال (422 Unprocessable Entity - Code 1204):
{
"status": false,
"code": 1204,
"message": "تعداد درخواست های کاربر بیش از حد مجاز بوده است. لطفا 3 ساعت دیگر اقدام نمائید."
}
۳. خطای پنل پیامک (422 Unprocessable Entity - Code 1202):
{
"status": false,
"code": 1202,
"message": "پیامک OTP ارسال نشد. مشکلی رخ داده است. لطفا دوباره تلاش کنید",
"trace": { ... }
}
Technical Logic
Request (Mobile + Branch)
↓
Normalize Mobile
Ensure starts with '0'
Convert Persian nums to English
Ensure starts with '0'
Convert Persian nums to English
↓
Exist in `customers`?
↓ No
Auto Register
INSERT INTO customers
Branch: [$branch]
INSERT INTO customers
Branch: [$branch]
↓ Yes
Select ID
↓
Generate OTP
StaticController::generateOtp↓
Send SMS
Log to SnailJob Queue
StaticController::sendNotificationLog to SnailJob Queue
↓
Return JSON (Passenger ID)