Skip to content

Commit 38ec87a

Browse files
author
Enes Ozden
committed
first commit
0 parents  commit 38ec87a

File tree

10 files changed

+264
-0
lines changed

10 files changed

+264
-0
lines changed

CHANGELOG.md

Whitespace-only changes.

LICENSE

Whitespace-only changes.

README.md

Whitespace-only changes.

composer.json

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"name": "iletimerkezi/iletimerkezi-laravel",
3+
"version": "1.0.0",
4+
"homepage": "https://www.iletimerkezi.com",
5+
"description": "İletiMerkezi SMS API for Laravel",
6+
"type": "library",
7+
"keywords": [
8+
"iletimerkezi",
9+
"otp",
10+
"verify",
11+
"iys",
12+
"sms",
13+
"api",
14+
"sdk",
15+
"api-client",
16+
"laravel"
17+
],
18+
"license": "MIT",
19+
"authors": [
20+
{
21+
"name": "",
22+
"email": "[email protected]"
23+
}
24+
],
25+
"require": {
26+
"php": ">=7.4",
27+
"iletimerkezi/iletimerkezi-php": "1.0.0"
28+
},
29+
"autoload": {
30+
"psr-4": {
31+
"IletiMerkezi\\SMS\\": "src"
32+
}
33+
},
34+
"extra": {
35+
"laravel": {
36+
"providers": [
37+
"IletiMerkezi\\SMS\\IletiMerkeziServiceProvider"
38+
],
39+
"aliases": {
40+
"IletiMerkezi": "IletiMerkezi\\SMS\\Facades\\IletiMerkezi"
41+
}
42+
}
43+
}
44+
}

src/Facades/IletiMerkezi.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace IletiMerkezi\SMS\Facades;
4+
5+
use Illuminate\Support\Facades\Facade;
6+
7+
class IletiMerkezi extends Facade
8+
{
9+
protected static function getFacadeAccessor()
10+
{
11+
return 'IletiMerkezi';
12+
}
13+
}

src/IletiMerkezi.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace IletiMerkezi\SMS;
4+
5+
use IletiMerkezi\IletiMerkeziClient;
6+
use IletiMerkezi\Services\SmsService;
7+
use IletiMerkezi\Services\ReportService;
8+
use IletiMerkezi\Services\SummaryService;
9+
use IletiMerkezi\Services\SenderService;
10+
use IletiMerkezi\Services\BlacklistService;
11+
use IletiMerkezi\Services\AccountService;
12+
use IletiMerkezi\Services\WebhookService;
13+
14+
class IletiMerkezi
15+
{
16+
protected $client;
17+
18+
public function __construct(IletiMerkeziClient $client)
19+
{
20+
$this->client = $client;
21+
}
22+
23+
public function sms(): SmsService
24+
{
25+
return $this->client->sms();
26+
}
27+
28+
public function reports(): ReportService
29+
{
30+
return $this->client->reports();
31+
}
32+
33+
public function summary(): SummaryService
34+
{
35+
return $this->client->summary();
36+
}
37+
38+
public function senders(): SenderService
39+
{
40+
return $this->client->senders();
41+
}
42+
43+
public function blacklist(): BlacklistService
44+
{
45+
return $this->client->blacklist();
46+
}
47+
48+
public function account(): AccountService
49+
{
50+
return $this->client->account();
51+
}
52+
53+
public function webhook(): WebhookService
54+
{
55+
return $this->client->webhook();
56+
}
57+
58+
public function debug(): string
59+
{
60+
return $this->client->debug();
61+
}
62+
}

src/IletiMerkeziChannel.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace IletiMerkezi\SMS;
4+
5+
use IletiMerkezi\IletiMerkeziClient;
6+
use IletiMerkezi\Responses\SmsResponse;
7+
use Illuminate\Notifications\Notification;
8+
9+
class IletiMerkeziChannel
10+
{
11+
protected $client;
12+
protected $debug;
13+
14+
public function __construct(IletiMerkeziClient $client)
15+
{
16+
$this->client = $client;
17+
}
18+
19+
public function send($notifiable, Notification $notification): SmsResponse | null
20+
{
21+
$numbers[] = $notifiable->routeNotificationFor('iletimerkezi');
22+
if(count($numbers) === 0) {
23+
return null;
24+
}
25+
26+
$message = $notification->toIletiMerkezi($notifiable);
27+
if (is_string($message)) {
28+
$message = new IletiMerkeziMessage($message);
29+
}
30+
31+
$sms = $this->client->sms()->schedule($message->schedule_at ?? '');
32+
33+
if($message->iys) {
34+
$sms->enableIysConsent()->iysList($message->iys_list);
35+
} else {
36+
$sms->disableIysConsent();
37+
}
38+
39+
return $sms->send($numbers, $message->body, $message->sender ?? null);
40+
}
41+
}

src/IletiMerkeziMessage.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace IletiMerkezi\SMS;
4+
5+
use Carbon\Carbon;
6+
7+
class IletiMerkeziMessage
8+
{
9+
public $iys = false;
10+
public $iys_list = 'BIREYSEL';
11+
public $body;
12+
public $sender;
13+
public $schedule_at;
14+
15+
public static function create(string $body = ''): self
16+
{
17+
return new static($body);
18+
}
19+
20+
public function __construct(string $body)
21+
{
22+
$this->body = $body;
23+
}
24+
25+
public function setIys(bool $consent, string $list): self
26+
{
27+
$this->iys = $consent;
28+
$this->iys_list = $list;
29+
30+
return $this;
31+
}
32+
33+
public function setBody(string $value): self
34+
{
35+
$this->body = $value;
36+
37+
return $this;
38+
}
39+
40+
public function setSender(string $sender)
41+
{
42+
$this->sender = $sender;
43+
44+
return $this;
45+
}
46+
47+
public function sendAt(Carbon $value): self
48+
{
49+
$this->schedule_at = $value->format('d/m/Y H:i');
50+
51+
return $this;
52+
}
53+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace IletiMerkezi\SMS;
4+
5+
use IletiMerkezi\SMS\IletiMerkezi;
6+
use IletiMerkezi\IletiMerkeziClient;
7+
use Illuminate\Support\ServiceProvider;
8+
use Illuminate\Notifications\ChannelManager;
9+
use Illuminate\Support\Facades\Notification;
10+
11+
class IletiMerkeziServiceProvider extends ServiceProvider
12+
{
13+
public function register()
14+
{
15+
$this->mergeConfigFrom(__DIR__.'/config/iletimerkezi.php', 'iletimerkezi');
16+
17+
$this->app->bind('IletiMerkezi', function($app) {
18+
return new IletiMerkezi(new IletiMerkeziClient(
19+
config('iletimerkezi.key'),
20+
config('iletimerkezi.hash'),
21+
config('iletimerkezi.sender')
22+
));
23+
});
24+
}
25+
26+
public function boot()
27+
{
28+
Notification::resolved(function (ChannelManager $service) {
29+
$service->extend('iletimerkezi', function () {
30+
return new IletiMerkeziChannel(new IletiMerkeziClient(
31+
config('iletimerkezi.key'),
32+
config('iletimerkezi.hash'),
33+
config('iletimerkezi.sender')
34+
));
35+
});
36+
});
37+
38+
if($this->app->runningInConsole()) {
39+
$this->publishes([
40+
__DIR__.'/config/iletimerkezi.php' => config_path('iletimerkezi.php'),
41+
], 'config');
42+
}
43+
}
44+
}

src/config/iletimerkezi.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
return [
4+
'key' => '',
5+
'hash' => '',
6+
'sender' => ''
7+
];

0 commit comments

Comments
 (0)