75 lines
2.7 KiB
PHP
75 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
use App\Services\Payment\ManualPaymentDriver;
|
|
use App\Services\Payment\PaymentDriver;
|
|
use App\Services\Payment\PayMongoDriver;
|
|
use App\Services\Push\FcmPushDriver;
|
|
use App\Services\Push\LogPushDriver;
|
|
use App\Services\Push\PushDriver;
|
|
use App\Services\Sms\FakeSmsService;
|
|
use App\Services\Sms\LogSmsService;
|
|
use App\Services\Sms\SemaphoreSmsService;
|
|
use App\Services\Sms\SmsService;
|
|
use Illuminate\Support\Facades\Broadcast;
|
|
use Illuminate\Support\ServiceProvider;
|
|
|
|
class AppServiceProvider extends ServiceProvider
|
|
{
|
|
public function register(): void
|
|
{
|
|
$this->app->singleton(PaymentDriver::class, function ($app) {
|
|
$driver = config('services.payments.driver', 'manual');
|
|
$key = (string) config('services.paymongo.secret_key');
|
|
|
|
if ($driver === 'paymongo' && $key !== '') {
|
|
return new PayMongoDriver(
|
|
secretKey: $key,
|
|
webhookSecret: (string) config('services.paymongo.webhook_secret'),
|
|
successUrl: (string) config('services.paymongo.success_url'),
|
|
cancelUrl: (string) config('services.paymongo.cancel_url'),
|
|
);
|
|
}
|
|
|
|
return new ManualPaymentDriver;
|
|
});
|
|
|
|
$this->app->singleton(PushDriver::class, function ($app) {
|
|
$driver = config('services.push.driver', 'log');
|
|
$key = (string) config('services.fcm.server_key');
|
|
|
|
if ($driver === 'fcm' && $key !== '') {
|
|
return new FcmPushDriver($key);
|
|
}
|
|
|
|
return new LogPushDriver;
|
|
});
|
|
|
|
$this->app->singleton(SmsService::class, function ($app) {
|
|
$driver = config('services.sms.driver', 'log');
|
|
|
|
return match ($driver) {
|
|
'semaphore' => new SemaphoreSmsService(
|
|
apiKey: (string) config('services.semaphore.api_key'),
|
|
senderName: (string) config('services.semaphore.sender_name', 'VERDE'),
|
|
),
|
|
'fake' => new FakeSmsService,
|
|
default => new LogSmsService,
|
|
};
|
|
});
|
|
}
|
|
|
|
public function boot(): void
|
|
{
|
|
// Listeners under App\Listeners are auto-discovered by Laravel 11
|
|
// based on their handle() method's type-hint. Don't register them
|
|
// explicitly here — that causes double-dispatch.
|
|
|
|
// Broadcasting auth needs to accept Sanctum bearer tokens (admin web
|
|
// posts them via Echo's authorizer callback). Without this override
|
|
// it would only accept session cookies via the default `web` guard.
|
|
Broadcast::routes(['middleware' => ['auth:sanctum']]);
|
|
}
|
|
}
|