SmsServiceInterface gibi bir arayüz sayesinde, uygulamanın her yerinde SMS gönderimi için standart bir yöntem kullanabilirsiniz. Bu sayede:
Netgsm entegrasyonu ile bu yapı, HTTP API üzerinden SMS gönderimini sorunsuz hale getirir. sendTo() ve send() gibi metodlar sayesinde hem bireysel hem de toplu SMS gönderimleri tek bir servis üzerinden yönetilir.
Sonuç olarak, Laravel projelerinde SMS işlemleri modüler, esnek ve sağlayıcı değişimlerine hazır bir yapıya kavuşur. Sağlayıcı değişse bile diğer kodlar etkilenmez, tüm SMS işlemleri tek bir noktadan kontrol edilir.
<?php
namespace App\Contracts;
interface SmsServiceInterface
{
/**
* Çoklu kişiye SMS gönderimi
*
* @param string $header
* @param array $messages
* @param string|null $encoding
* @param string|null $iysfilter
* @param string|null $partnercode
* @return array
*/
public function send(string $header, array $messages, ?string $encoding = 'TR', ?string $iysfilter = '', ?string $partnercode = ''): array;
/**
* Tek kişiye SMS gönderimi
*
* @param string $number
* @param string $message
* @param string|null $header
* @return array
*/
public function sendTo(string $number, string $message, ?string $header = null): array;
}
<?php
namespace App\Services\External;
use App\Contracts\SmsServiceInterface;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class NetgsmSmsService implements SmsServiceInterface
{
protected string $username;
protected string $password;
protected string $url;
protected string $defaultHeader;
public function __construct()
{
$this->username = config('services.netgsm.username');
$this->password = config('services.netgsm.password');
$this->url = config('services.netgsm.url');
$this->defaultHeader = config('services.netgsm.header');
}
/**
* Çoklu SMS gönderme işlemi
*/
public function send(string $header, array $messages, ?string $encoding = 'TR', ?string $iysfilter = '', ?string $partnercode = ''): array
{
$payload = [
'msgheader' => $header,
'messages' => $messages,
'encoding' => $encoding,
'iysfilter' => $iysfilter,
'partnercode' => $partnercode,
];
try {
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->withBasicAuth($this->username, $this->password)
->post($this->url, $payload);
if ($response->successful()) {
return [
'success' => true,
'data' => $response->json(),
];
}
return [
'success' => false,
'error' => $response->body(),
];
} catch (\Throwable $e) {
Log::error('Netgsm SMS gönderim hatası', [
'error' => $e->getMessage(),
'payload' => $payload,
]);
return [
'success' => false,
'error' => $e->getMessage(),
];
}
}
/**
* Tek kişiye SMS gönderme işlemi
*/
public function sendTo(string $number, string $message, ?string $header = null): array
{
$header = $header ?? $this->defaultHeader;
return $this->send($header, [
[
'msg' => $message,
'no' => $number,
]
]);
}
}
<?php
namespace App\Providers;
use App\Contracts\SmsServiceInterface;
use App\Services\External\NetgsmSmsService;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
$this->app->bind(SmsServiceInterface::class, NetgsmSmsService::class);
}
}
<?php
use App\Contracts\SmsServiceInterface;
app(SmsServiceInterface::class)->sendTo("05555555555","Bu bir test mesajıdır");