Scaffolded from the Ladill mini/events extraction pattern: multi-file transfers, retention controls, public landing pages, analytics, and Gitea deploy workflow. Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.1 KiB
PHP
44 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Billing;
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class SmsService
|
|
{
|
|
public function send(string $to, string $message): void
|
|
{
|
|
$apiKey = config('services.termii.api_key', '');
|
|
$senderId = config('services.termii.sender_id', config('app.name', 'LaDill'));
|
|
|
|
if ($apiKey === '') {
|
|
return;
|
|
}
|
|
|
|
$phone = preg_replace('/\D+/', '', $to);
|
|
if (strlen($phone) < 9) {
|
|
return;
|
|
}
|
|
|
|
if (strlen($phone) === 9) {
|
|
$phone = '233'.$phone;
|
|
} elseif (str_starts_with($phone, '0')) {
|
|
$phone = '233'.substr($phone, 1);
|
|
}
|
|
|
|
try {
|
|
Http::timeout(10)->post('https://v3.api.termii.com/api/sms/send', [
|
|
'api_key' => $apiKey,
|
|
'to' => $phone,
|
|
'from' => $senderId,
|
|
'sms' => $message,
|
|
'type' => 'plain',
|
|
'channel' => 'dnd',
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
Log::warning('SMS send failed', ['to' => $phone, 'error' => $e->getMessage()]);
|
|
}
|
|
}
|
|
}
|