ijeyg/larapayamak is a Laravel package for a package for all sms panels in iran!.
It currently has 0 GitHub stars and 9 downloads on Packagist (latest version v1.1.1).
Install it with composer require ijeyg/larapayamak.
Discover more Laravel packages by ijeyg
or browse all Laravel packages to compare alternatives.
Last updated
Unified Laravel SMS package for Iranian providers with clean multi-gateway switching.
A lightweight and practical SMS abstraction for Laravel projects that need to switch providers without rewriting business logic.
gateway($name)If your application depends on SMS delivery (OTP, notifications, order updates), provider lock-in is risky. Larapayamak gives you one consistent API while keeping provider selection flexible.
Ijeyg\Larapayamak\Services\SmsServiceIjeyg\Larapayamak\Facades\Larapayamakgateway('provider')SMS_GATEWAY)SmsProviderInterface)| Gateway | Simple SMS | Pattern SMS | Notes |
|---|---|---|---|
| SMS.ir (smsir) | ✅ | ✅ | Uses API token header (X-API-KEY) |
| FaraPayamak (farapayamak) | ✅ | ✅ | Uses Payamak REST endpoints |
| FarazSms (farazsms) | ✅ | ✅ | Supports recipient array in simple send |
| MeliPayamak (melipayamak) | ✅ | ✅ | Uses Payamak REST endpoints |
| NikSms (niksms) | ✅ | ❌ | Pattern method is not implemented in package |
| PayamResan (payamresan) | ✅ | ✅ | Uses API key and token endpoints |
composer require ijeyg/larapayamak
Laravel auto-discovers:
Ijeyg\Larapayamak\LarapayamakServiceProviderLarapayamakPublish config:
php artisan vendor:publish --provider="Ijeyg\Larapayamak\LarapayamakServiceProvider" --tag="config"
Config file path:
config/larapayamak.php
Set the default gateway:
SMS_GATEWAY=smsir
Full example for all gateways:
# Default gateway
SMS_GATEWAY=smsir
# SMS.ir
SMSIR_USERNAME=
SMSIR_TOKEN=
SMSIR_LINE=
# FaraPayamak
FARAPAYAMAK_USERNAME=
FARAPAYAMAK_PASSWORD=
FARAPAYAMAK_LINE=
# MeliPayamak
MELIPAYAMAK_USERNAME=
MELIPAYAMAK_PASSWORD=
MELIPAYAMAK_LINE=
# FarazSms
FARAZSMS_USERNAME=
FARAZSMS_PASSWORD=
FARAZSMS_LINE=
# NikSms
NIKSMS_USERNAME=
NIKSMS_PASSWORD=
NIKSMS_LINE=
# PayamResan
PAYAMRESAN_APITOKEN=
Ijeyg\Larapayamak\Services\SmsServiceIjeyg\Larapayamak\Services\GatewayManagerIjeyg\Larapayamak\Contracts\SmsProviderInterfaceIjeyg\Larapayamak\Facades\LarapayamakLarapayamak facade or injected SmsServiceSmsService delegates to selected providerIlluminate\Http\JsonResponseuse Ijeyg\Larapayamak\Facades\Larapayamak;
$response = Larapayamak::sendSimpleMessage('09121111111', 'Hello');
use Ijeyg\Larapayamak\Facades\Larapayamak;
$response = Larapayamak::sendPatternMessage('09121111111', '1234', [
'code' => '7788',
]);
use Ijeyg\Larapayamak\Services\SmsService;
class SmsController
{
public function send(SmsService $sms)
{
return $sms->sendSimpleMessage('09121111111', 'Welcome');
}
}
<?php
namespace App\Http\Controllers;
use Ijeyg\Larapayamak\Services\SmsService;
use Illuminate\Http\JsonResponse;
class NotificationController extends Controller
{
public function otp(SmsService $sms): JsonResponse
{
$response = $sms->sendPatternMessage('09121111111', 'OTP_TEMPLATE', [
'code' => '4532',
]);
$data = $response->getData(true);
if (($data['success'] ?? false) !== true) {
return response()->json(['ok' => false, 'gateway' => $data], 422);
}
return response()->json(['ok' => true, 'gateway' => $data]);
}
}
<?php
namespace App\Services;
use Ijeyg\Larapayamak\Services\SmsService;
class OtpSender
{
public function __construct(private SmsService $sms)
{
}
public function send(string $mobile, string $code): array
{
$response = $this->sms->sendPatternMessage($mobile, 'OTP_TEMPLATE', [
'code' => $code,
]);
return $response->getData(true);
}
}
Runtime switching without changing your domain logic:
use Ijeyg\Larapayamak\Facades\Larapayamak;
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('farazsms')->sendSimpleMessage('09121111111', 'Hello');
Larapayamak::gateway('smsir')->sendSimpleMessage('09121111111', 'Hello from SMS.ir');
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('farapayamak')->sendSimpleMessage('09121111111', 'Hello from FaraPayamak');
Larapayamak::gateway('farapayamak')->sendPatternMessage('09121111111', '1234', ['name' => 'Ali']);
Larapayamak::gateway('farazsms')->sendSimpleMessage('09121111111', 'Hello from FarazSms');
Larapayamak::gateway('farazsms')->sendPatternMessage('09121111111', 'PATTERN_CODE', ['name' => 'Ali']);
Larapayamak::gateway('melipayamak')->sendSimpleMessage('09121111111', 'Hello from MeliPayamak');
Larapayamak::gateway('melipayamak')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('niksms')->sendSimpleMessage('09121111111', 'Hello from NikSms');
// Pattern not implemented in package for niksms:
// Larapayamak::gateway('niksms')->sendPatternMessage(...)
Larapayamak::gateway('payamresan')->sendSimpleMessage('09121111111', 'Hello from PayamResan');
Larapayamak::gateway('payamresan')->sendPatternMessage('09121111111', 'TemplateKey', ['p1' => 'value']);
JsonResponse with success state.500 JSON responses.InvalidArgumentException.Example:
$response = Larapayamak::gateway('smsir')->sendSimpleMessage('09121111111', 'Test');
$data = $response->getData(true);
if (($data['success'] ?? false) !== true) {
// handle failure
}
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', 'OTP_TEMPLATE', [
'code' => '9123',
]);
Larapayamak::gateway('farazsms')->sendSimpleMessage(
'09121111111',
'Your order #1042 has been shipped.'
);
Use one default provider for normal traffic and switch per action/tenant when needed:
SMS_GATEWAYgateway('...')This package uses:
Useful commands:
composer test:ci
composer analyse
vendor/bin/pint --test
^8.210.x and 11.xPRs and issues are welcome.
Recommended local workflow:
composer update --with-all-dependencies
composer analyse
composer test:ci
vendor/bin/pint
MIT. See LICENSE.md.
Larapayamak یک پکیج لاراول برای ارسال پیامک از چند سرویسدهنده ایرانی با یک API یکپارچه است.
فلسفه پکیج ساده است: کد کسبوکار شما نباید با عوض شدن Provider تغییر کند.
gateway(...).env| نام درگاه | پیامک ساده | پیامک پترن | توضیح |
|---|---|---|---|
| SMS.ir (smsir) | ✅ | ✅ | مناسب OTP و پیامک تراکنشی |
| FaraPayamak (farapayamak) | ✅ | ✅ | مبتنی بر API پایامک |
| FarazSms (farazsms) | ✅ | ✅ | در پیامک ساده، ورودی آرایه گیرنده هم پشتیبانی میشود |
| MeliPayamak (melipayamak) | ✅ | ✅ | ساختار نزدیک به FaraPayamak |
| NikSms (niksms) | ✅ | ❌ | متد پترن در خود پکیج پیادهسازی نشده |
| PayamResan (payamresan) | ✅ | ✅ | مبتنی بر API Key |
composer require ijeyg/larapayamak
پکیج بهصورت خودکار Service Provider و Facade را رجیستر میکند.
php artisan vendor:publish --provider="Ijeyg\Larapayamak\LarapayamakServiceProvider" --tag="config"
مسیر فایل:
config/larapayamak.php
درگاه پیشفرض:
SMS_GATEWAY=smsir
نمونه کامل برای همه درگاهها:
SMS_GATEWAY=smsir
SMSIR_USERNAME=
SMSIR_TOKEN=
SMSIR_LINE=
FARAPAYAMAK_USERNAME=
FARAPAYAMAK_PASSWORD=
FARAPAYAMAK_LINE=
MELIPAYAMAK_USERNAME=
MELIPAYAMAK_PASSWORD=
MELIPAYAMAK_LINE=
FARAZSMS_USERNAME=
FARAZSMS_PASSWORD=
FARAZSMS_LINE=
NIKSMS_USERNAME=
NIKSMS_PASSWORD=
NIKSMS_LINE=
PAYAMRESAN_APITOKEN=
SmsService نقطه ورود اصلی برای ارسال پیامک است.GatewayManager Provider مناسب را انتخاب میکند.SmsProviderInterface را پیادهسازی میکنند.gateway()JsonResponseuse Ijeyg\Larapayamak\Facades\Larapayamak;
Larapayamak::sendSimpleMessage('09121111111', 'سلام');
Larapayamak::sendPatternMessage('09121111111', '1234', [
'code' => '7788',
]);
use Ijeyg\Larapayamak\Services\SmsService;
class SmsController
{
public function send(SmsService $sms)
{
return $sms->sendSimpleMessage('09121111111', 'خوش آمدید');
}
}
use Ijeyg\Larapayamak\Facades\Larapayamak;
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('farazsms')->sendSimpleMessage('09121111111', 'سلام از فراز');
Larapayamak::gateway('smsir')->sendSimpleMessage('09121111111', 'سلام از SMS.ir');
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('farapayamak')->sendSimpleMessage('09121111111', 'سلام از فراپیامک');
Larapayamak::gateway('farapayamak')->sendPatternMessage('09121111111', '1234', ['name' => 'علی']);
Larapayamak::gateway('farazsms')->sendSimpleMessage('09121111111', 'سلام از فراز');
Larapayamak::gateway('farazsms')->sendPatternMessage('09121111111', 'PATTERN_CODE', ['name' => 'علی']);
Larapayamak::gateway('melipayamak')->sendSimpleMessage('09121111111', 'سلام از ملیپیامک');
Larapayamak::gateway('melipayamak')->sendPatternMessage('09121111111', '1234', ['code' => '7788']);
Larapayamak::gateway('niksms')->sendSimpleMessage('09121111111', 'سلام از نیکاساماس');
// متد پترن برای niksms در این پکیج پیادهسازی نشده است.
Larapayamak::gateway('payamresan')->sendSimpleMessage('09121111111', 'سلام از پیامرسان');
Larapayamak::gateway('payamresan')->sendPatternMessage('09121111111', 'TemplateKey', ['p1' => 'value']);
JsonResponse با success=false برمیگردد.InvalidArgumentException دریافت میکنید.success را چک کنید.$response = Larapayamak::gateway('smsir')->sendSimpleMessage('09121111111', 'test');
$data = $response->getData(true);
if (($data['success'] ?? false) !== true) {
// مدیریت خطا
}
Larapayamak::gateway('smsir')->sendPatternMessage('09121111111', 'OTP_TEMPLATE', [
'code' => '9123',
]);
Larapayamak::gateway('farazsms')->sendSimpleMessage(
'09121111111',
'سفارش شما با کد 1042 ارسال شد.'
);
اگر پایداری ارسال برای شما مهم است:
.env داشته باشید.gateway(...) تغییر دهید.composer test:ci
composer analyse
vendor/bin/pint --test
ابزارهای کنترل کیفیت:
^8.210 و 11برای مشاهده تغییرات هر نسخه، فایل CHANGELOG.md را بررسی کنید.
برای مشارکت در توسعه، لطفاً راهنمای مشارکت را بررسی کنید و Pull Request بفرستید.
لیست مشارکتکنندگان پروژه در GitHub قابل مشاهده است.
اگر مشکل امنیتی پیدا کردید، لطفاً آن را عمومی منتشر نکنید و از طریق ایمیل زیر اطلاع دهید:
[email protected]
توسعه و انتشار این پکیج تحت لایسنس MIT انجام میشود.