چگونه با api پیامک ارسال کنیم

- 3 هفته پیش
توسط محمود خسروی آپدیت شد
محمود خسروی ( 2819 تجربه )
3 هفته پیش

من یه پروژه دارم که میخواهم با api پیامک ارسال کنم. خواهشا تا آخر موارد زیر خوانده شود.
برای ششروع کار وب سرویسهایی برای ثبت نام/ ورود در اختیار قرار دهید که مراحل آن به این صورت خواهد بود.

  • شماره ورودی کاربر بوسیله یک api برای شما ارسال می شود، شما وجود یا عدم وجود آن در سامانه را بررسی میکنید.
    در صورت وجود کد تایید را به کاربر از طریق پیامک ارسال میکنید.
    در صورت عدم وجود نیز کد تایید بصورت پیامک ارسال میشود.
    با این تفاوت که برای هر کدوم از این انواع کد مربوطه را برای من ارسال می کنید.
    خوب یک api نیز برای درخواست مجدد همان کد تایید(اینکه دوباره پیامک ارسال شود) در نظر بگیرید.
    در ضمن کد تایید ایجاد شده توسط سامانه را که یک عدد 4 یا 5 رقمی می باشد به مدت 10 دقیقه معتبر باشد، در صورت عدم ورود کاربر در طول این10دقیقه، این کد از اعتبار ساقط میشود و نیاز به ارسال کد جدید می باشید.
    در ضمن در زمان درخواست مجدد برای کد تایید نیز همان کد تایید اولیه ارسال شود(در این بازه 10 دقیقه) در غیر اینصورت کد جدید تولید و این کد جدید ارسال شود.
  • api برای تایید کد ورودی ارسال شده توسط پیامک
    در این api نیز باز نوع ورود که ثبت نام جدید می باشد یا قدیم(ورود مجدد) ارسال شود.
    در صورتی که کاربر قدیمی باشد، اطلاعات کاربری کاربر شامل تمام اطلاعات پروفایلی می باشد.
    در صورتی که کاربر جدید باشد نیز همین فیلد ها باشد منتهی بصورت خالی(جهت ایجاد مدل یکسان در سمت اندروید این درخواست رو دارم)
    خوب فعلا این سه api در اختیار قرار بگیرد.
    نحوه ارائه api نیز به این صورت باشد که در ابتدا عنوان api بعد لینک api بعد پارامتر های ارسالی که من ارسال خواهم کرد.
    خروجی جیسون در گروه قرار گیرد.
    و در نهایت تمام کد ها نیز به عنوان ریسپانس در انتها به همراه توضیح مختصر در موردشون.(به طور مثال در api ثبت نام کد100 کاربر جدید کد101 کاربر قدیمی و الی آخر...)

api.php

Route::namespace('Api')->prefix('user')->group(function (){
    Route::get('verify/{number}', 'ApiController@verify');
    Route::get('resend/{number}', 'ApiController@resend');
    Route::get('login/{number}/{code}', 'ApiController@login');
});

ApiController.php

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\User;
use Carbon\Carbon;

class ApiController extends Controller
{
    public function verify($number) {
        $user = User::first(['mobile'=> $number]);
//        dd('salam ');
        $code = substr((string) uniqid(), 0, 5);
        $user->first_name = "علی";
        $user->last_name = "علیزاده";
        $user->mobile = "09389267856";

        $user->birth_date = "1366/08/08";
        $user->gender = 1;
        $user->province_id = 1;
        $user->city_id = 1;
        $user->address = 'خیابان ازادی - ۱۰ متری دوم پلاک ۲۱';
        $user->email = 'ali@gmail.com';
        $user->email = 'ali@gmail.com';
        $user->password = bcrypt(123456);
        $user->lastVerifyRequest = Carbon::now();
        $response = ['user' => $user];
        $user->save();
        if ($user->exists) {
            array_add($response, 'exists', true);
        }else {
            array_add($response, 'exists', false);
        }
        sms($number, $code);
        array_add($response, 'status', 200);
        return $response;
    }

    public function resend ( $number ) {
        $user = User::firstOrCreate(['mobile'=> $number]);
        if ($user->exists){
            $response = ['user' => $user];
            if (Carbon::now()->lt($user->lastVerifyRequest->addMinutes(10))){
                sms($number, $user->code);
                array_add($response, 'status', 200);
            }else{
                $code = substr((string) uniqid(), 0, 5);
                $user->code = $code;
                $user->lastVerifyRequest = Carbon::now();
                $user->save();
                sms($number, $user->code);
                array_add($response, 'status', 200);
            }
            return $response;
        }else{
            return ['status' => 404];
        }
    }

    public function login ( $number, $code ) {
        $user = User::firstOrCreate(['mobile'=> $number]);
        if ($user->code == $code){
            return ['status' => 200, 'user' => $user];
        }else {
            return ['status' => 405];
        }
    }
}

جدول کاربران

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('level')->default('user');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('mobile')->unique();
        $table->string('code');
        $table->boolean('verification_code')->default(false);
        $table->string('birth_date');
        $table->boolean('gender');
        $table->bigInteger('province_id')->unsigned();
        $table->bigInteger('city_id')->unsigned();
        $table->text('address');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->string('api_token' , 60)->nullable()->unique();
        $table->rememberToken();
        $table->timestamps();

        $table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
        $table->foreign('city_id')->references('id')->on('cities')->onDelete('cascade');
    });
}

فیلد code یه کد 5 رقمی است که به کارربر فرستاده میشود
فیلد verification_code اگر 1 باشد به معنای تایید شده است
ولی اگزverification_code اگر 0 باشد به معنای تایید نشده است
فیلد mobile هم که مشخصه شماره موبایل است.

ضروریه

حسام موسوی ( 138979 تجربه )
3 هفته پیش

سلام همه این توضیحات برای چی بود ؟ برای این بود که بگید میخواید پیامک ارسال کنید ؟
در یک سرویس ارسال پیامک مثل کاونگار ثبت نام کنید اونها بهتون یک api میدن که میتونید در api خودتون فراخونی کنید و هر جای لازم بود پیامک بفرستید

محمود خسروی ( 2819 تجربه )
3 هفته پیش

@hesammousavi

سلام مجدد

بله من از کاوه نگار استفاده میکنم و کد تاییدیه هم به گوشی کاربر (sms) ارسال میشه و هم در دیتابیس ذخیره میشه حالا من میخوام api تعریف کنم. چطوری میشه api تعریف کرد؟

ایمان روستا ( 735 تجربه )
3 هفته پیش

Api پنل پیامک کد تایید میفرسته پس هر چی درخواست بدی کدشو میفرسته .... ، بعد بر روی یوزر مورد نظر کد تایید تو دیتابیس ذخیره کن و عمل مقایسه را از ورود کاربر انجام بده ، حالا میتونی جدول لاگ زمان رخداد هارو پر کنی و بر اون اساس هم عمل مقایسه و اکشن هاتو تعریف کنی و خروجی مناسب به کاربر بفرستی کل این فراید میتونی در یک api انجام بدی

محمود خسروی ( 2819 تجربه )
3 هفته پیش

الان این رو میخوام که شماره تلفن کاربر رو ارسال کنم و من از طریق پنل پیامکی برای من کد تایید رو ارسال کنم.

محمود خسروی ( 2819 تجربه )
3 هفته پیش

کد هم که گفتم منظورم اینه که هر فایل جیسونی اولین فیلد خروجی code باشه که مقادیر اون به من نشون میده که چیکار کنم با خروجی تحویلی از شما
مثلاً پیام بعدی رو دقت کنید که به این شکل باشه:
api/v1/comments/create?api_token
(post)

برای ایجاد نظر برای کاربر با محدودیت هر روز یک نظر

پارامتر های ارسالی:

     title => required | string | max:100,  
     text => required | string | max:1000,

کد های بازگشتی:
0 => موفقت آمیز - نظر کاربر با موفقیت به ثبت رسید.
1 => خطا - فرمت اطلاعات خواسته شده نادرست است.
2 => خطا - کاربر به تازگی نظر ثبت کرده است. حداقل باید یک روز از ثبت آخرین نظر بگذرد..
401 => خطا - احراز هویت نا موفق

محمود خسروی ( 2819 تجربه )
3 هفته پیش

اینجا کسی نمیدونه، خیلی برای من مهم است، همه این توضیحات را من ننوشتم، طراح اپ برام نوشته، نوشته که من با لاراول یه api براشون درست کنم. اگر نتونم درست کنم جریمه خواهد کرد.

برای ارسال پاسخ باید وارد سایت شوید